Avatar billede bissen87 Nybegynder
30. september 2008 - 02:05 Der er 7 kommentarer

Cannot modify header information

jeg er i gang med at lave et login system i PHP men får problemer med min header(location) funktion. jeg får meddelsen "Cannot modify header information - headers already sent..... tilbage i hovedet. min kode ser ud som følger.

<?php

  $action = $_POST['what'];
  $brugernavn = $_POST['navn'];
  $pass = $_POST['pass'];


  $searchUser = "SELECT username, password FROM users WHERE username='".$brugernavn."' AND password='".$pass."'";

  $resultat = mysql_query($searchUser) or die("der skete en fejl: ".mysql_error() );

  // Ingen bruger fundet
  if(mysql_num_rows($resultat) == 0){
    if($action == "login"){
      header("Location: index.php?message=nobody"); // tilbage til forsiden..
    }
    else{
          $indsaet = "INSERT INTO users( `username` , `password` ) VALUES ('".$brugernavn."', '".$pass."')";  //opret brugeren
      mysql_query($indsaet) or die("der skete en fejl: ".mysql_error());
      header("Location: index.php?message=created"); // tilbage til forsiden..
    }
  }

  if(mysql_num_rows($resultat) == 1 ){
   
    if($action=="login") { // han er fundet
      $_SESSION["status"] = "ok";
      header("Location: velkommen.php"); // ind til det hemlige..
    }
    else if($action =="opret"){ // en bruger eksisterer i forvejen
      header("Location: index.php?message=userExists"); // tilbage til forsiden..
    }
  }

?>

håber der er nogen der kan hjælpe mig på at finde en løsning.
Avatar billede jakobdo Ekspert
30. september 2008 - 06:51 #1
Har du html kode over dette script ?
Ala:

<html>
<head>
.....
<body>
<?php
require / include ('din_kode.php');
?>

Hvis ja, det må man nemlig ikke.
Der må ikke være sendt data til browseren, inden du kalder: header();
Og det kan sagtens bare være et mellemrum eller lign. som ellers driller.
Avatar billede Slettet bruger
30. september 2008 - 09:48 #2
Så vidt jeg har forstået, må der heller ikke kunne forekomme situationer, hvor header-informationen bliver sendt to gange - hvilket måske er en mulighed i din kode... Men jeg er langt fra sikker.
Avatar billede jakobdo Ekspert
30. september 2008 - 09:55 #3
En god ide kan være at smide exit(); efter header(...);
Avatar billede bissen87 Nybegynder
30. september 2008 - 14:08 #4
Jeg har følgende kode over scriptet. Har tidligere brugt scriptet til et andet site hvor det fungerede uden de store problemer. Men vil da forsøge at smide en exit(); på efter de enkelte header og se om det har nogen effekt :)

<?php
session_start();

    $brugernavn = "brugernavn";           
    $adgangskode = "password";       
    $databasenavn ="user";              $forbindelse = mysql_connect("localhost", "$brugernavn", "$adgangskode");
    mysql_select_db("$databasenavn", $forbindelse) or die("der skete en fejl. ingen forbindelse");

?>

<HTML>

<head>
<title>modtaget data</title>
</head>

<body>
Avatar billede pidgeot Nybegynder
30. september 2008 - 14:16 #5
Du har lige vist grunden til dit problem: Du har <html>, m.v. inden din header(). DEt mås man ikke!

Flyt HTML-delen ud i en separat fil og inkluder den EFTER alle disse behandlinger.

(Alternativt kan man bruge output-buffering for at komme udenom det, men det er noget slam)

Og ja, sørg for en exit(); efter dine header('location: ...'), så du er sikker på at scriptet stopper der.
Avatar billede jakobdo Ekspert
30. september 2008 - 14:18 #6
Du bør altid udføre alt php inden du kalder noget output.
F.eks. kan du jo indlæse alt output i en variabel:
$output = 'NOGET';

<html>
...
<body>
<?php echo $output; ?>
</body>
</html>

Så vil det virke.
Avatar billede the_wanderer Nybegynder
02. oktober 2008 - 10:05 #7
Som pidgeot siger er problemet at du har html inden din header().
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester