Gå til innhold

Header, andre løsninger?


Anbefalte innlegg

Heisann,

 

Jeg har et lite problem. I localhost fungerer dette utmerket men fikk problemer da jeg skulle laste dette opp på en server. Når noen har klart og logge seg inn ønsker jeg og sende dem tilbake for startsiden (index). Men, da jeg lastet opp scriptet på serveren får jeg denne meldingen,

 

Warning: Cannot modify header information - headers already sent by (output started at /home/public_html/login.php:9) in /class/BloggLogin.php on line 37

 

 

Jeg har googlet og fant ut at Header måtte brukes øverst i koden om det skulle fungere? Så, da er jo spørsmålet. Hvordan skal jeg sende brukere videre (tilbake?) til forsiden når login var vellykket? Takker for alle svar på forhånd.

Lenke til kommentar
Videoannonse
Annonse

Headers "må" stå øverst i koden fordi headers kan ikke sendes etter output. (Kall det en liten ulempe ved HTTP-protokollen :p) Logikk skal ideelt sett kjøres før presentasjon og da vil man aldri få et slikt problem. Anbefaler deg å se på et par patterns (f.eks. mvc), fordi dette hjelper deg nettopp med å separere disse to.

Lenke til kommentar

Output buffering burde fungere ja (ob_start()), men det er en dårlig løsning (som jeg bruker veldig ofte selv).

Du bør ha alt av header informasjon før det blir sendt noe som helst til brukeren.

 

For å svare på spørsmålet ditt.

 

Hvis du ser at ved vellykket innlogging blir det opprettet en session som heter noe slikt som $_SESSION['loggedIn'] = 1;

Da kan du sjekke dette i toppen av filen og videresende brukeren til et annet område.

 

Om du bruker include script må du sjekke at adressen ikke er dette området, hvis ikke blir det refresh loop.

Lenke til kommentar

Javascript er ikke løsningen, javascript kan deaktiveres av systemadministrator eller bruker.

 

Det jeg mente med mitt forrige innlegg var at han skulle ha innloggings scriptet før alt annet, slik at brukeren kunne bli videresendt med header("Location:"); før alt av output fra scriptet.

Lenke til kommentar

Login skjema --> "vellykket" --> Hovedside --> Login skjema
		  -> "feilet"	--> Login skjema

 

Ville ikke da siden gå inn i en redirect loop? - dær brukeren vil komme til login skjemaet uansett?

 

Gidder du og vise meg et eksempel? :p

 

EDIT: Tror jeg forsto hva du mente ved og lese den forrige posten din. - Men et eksempel er velkommen for det :p

Endret av Famen
Lenke til kommentar

Her kommer det et svært eksempel fra meg..

Ta deg tid å lese gjennom, og lag spørringen og sessions slik at den passer til databasestrukturen din.

 

Toppen av filen:

 

<?php

// Alt av mysql_connect og mysql_select_db her

if($_SESSION['loggedIn'] !== 1) {

 $brukernavn  = mysql_real_escape_string($_POST['brukernavn']);
 $passord	   = md5($_POST['passord']);

 if(mysql_real_escape_string($_POST['innlogging']) == 1 and !empty(mysql_real_escape_string($_POST['submit']))) {

// Sjekke at $brukernavn og md5($passord) stemmer med databasen
$sporring = "select id, brukergruppe, etc... from brukere where brukernavn='$brukernavn' and passord='$passord';";
$resultat = mysql_query($sporring);

if(mysql_num_rows($resultat) !== 1) {
  $innlogging_feil = 1;
}
elseif(mysql_num_rows($resultat) == 1) {

  $rad = mysql_fetch_array($sporring);

  $_SESSION['loggedIn'] = 1;
  $_SESSION['brukerid'] = $rad['id'];
  header("Location: innlogget.php"); // Denne trengs egentlig ikke om man sjekker at session er satt neders og gir brukeren tilgang til det han skal ha.
									 // Men om brukeren skal få en melding om at han er innlogget osv, eller skal inn i et eget kontrollpanel må man ha med dette.
}
else {
  $innlogging_feil = 2;

 }
}
?>

 

Denne legges et sted der innloggings meldingene skal komme.

<?php

 if($_SESSION['loggedIn'] == 1) {
echo("Du er innlogget!");
 }

 if($innlogging_feil == 1) {
echo("Feil brukernavn eller passord!");
 }
 elseif($innlogging_feil == 2) {
echo("En ukjent feil oppstod, kontakt webmaster");
 }

?>

 

Lengre nede i scriptet hvor skjemaet skal være, else kan fjernes om man ikke vil ha denne beskjeden

Eller den kan erstattes med en meny eller lignende.

<?php 

if($_SESSION['loggedIn'] !== 1) {
 echo("
<form action=\"\" method=\"post\">
  Brukernavn: <input type=\"text\" name=\"brukernavn\" />
  Passord: <input type=\"password\" name=\"passord\" />
  <input type=\"hidden\" name=\"innlogging\" value=\"1\" />
  <input type=\"submit\" name=\"submit\" value=\"Logg inn\" />
</form>
");
}
else {
 echo("Du er allerede innlogget. <a href=\"loggut.php\">Logg ut...</a>");
}
?>

 

Husk at alt dette må være i samme fil, eller alt må bli inkludert i en fil.

 

Har ikke testet noe av dette, så muligens det blir noen feilmeldinger ;)

Endret av Goggen90
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...