xatic Skrevet 16. mai 2009 Del Skrevet 16. mai 2009 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
Jonas Skrevet 16. mai 2009 Del Skrevet 16. mai 2009 Headers "må" stå øverst i koden fordi headers kan ikke sendes etter output. (Kall det en liten ulempe ved HTTP-protokollen ) 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
Runar Skrevet 16. mai 2009 Del Skrevet 16. mai 2009 Vis oss litt mer kode, for eksempel innholdet i login.php, så kan det hende du får et par nyttige svar. Lenke til kommentar
AlecTBM Skrevet 18. mai 2009 Del Skrevet 18. mai 2009 Hva slags headere er det som skal sendes? ob_start(); rett etter <?php øverst i fila kan funke Lenke til kommentar
nree Skrevet 18. mai 2009 Del Skrevet 18. mai 2009 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
Wackamole Skrevet 18. mai 2009 Del Skrevet 18. mai 2009 Han vil vel sende brukeren videre hvis innlogningen var vellykket Goggen90 Javascript er en løsning: echo ' <script type="text/javascript"> <!-- window.location = "http://www.google.com/" //--> </script>'; Ellers kan du jo prøve med ob_start(); Lenke til kommentar
nree Skrevet 19. mai 2009 Del Skrevet 19. mai 2009 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
Wackamole Skrevet 19. mai 2009 Del Skrevet 19. mai 2009 (endret) 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? EDIT: Tror jeg forsto hva du mente ved og lese den forrige posten din. - Men et eksempel er velkommen for det Endret 19. mai 2009 av Famen Lenke til kommentar
nree Skrevet 19. mai 2009 Del Skrevet 19. mai 2009 (endret) 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 19. mai 2009 av Goggen90 Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå