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.
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.
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.
30. september 2008 - 09:55
#3
En god ide kan være at smide exit(); efter header(...);
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>
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.
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.
02. oktober 2008 - 10:05
#7
Som pidgeot siger er problemet at du har html inden din header().
Vi tilbyder markedets bedste kurser inden for webudvikling