Header already sent
Ik heb een fout met header().
IN mijn inlog script heb ik heel vaak:
Maar omdat het niet in de header staat krijg ik telkens weer de fout melding header already sends.
En ik heb zoveel mogelijke oplossingen geprobeerd maar dat lukt niet.
Dit is mijn script:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<?php
@session_start();
if($_GET['login'] == 'uitloggen')
{
header("Refresh: 3; url=inloggen.php");//foutmelding
session_unset();
session_destroy();
echo"Je bent nu uitgelogt!";
}
if($_POST['login'])
{
if($_POST['gebruikersnaam'] && $_POST['wachtwoord'])
{
function clean($str)
{
$cleaned = strip_tags(htmlspecialchars(addslashes(stripslashes( $str ))));
return $cleaned;
}
$gebruiker=clean($_POST[gebruikersnaam]);
$wachtwoord=md5($_POST[wachtwoord]);
$sql=mysql_query("SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruiker."' AND wachtwoord='".$wachtwoord."'");
$check=mysql_num_rows($sql);
if($check!=1)
{
header('Refresh: 3; url=inloggen.php'); //foutmelding
echo"Verkeerde gebruikersnaam of wachtwoord!";
}
else
{
$gebruikers=mysql_fetch_array($sql);
$_SESSION[gebruiker] = $gebruiker;
$_SESSION[login] = true;
header("Refresh:3; url=beveiligd.php"); // foutmelding
echo"Je bent succesvol ingelogd! U word doorgestuurd naar een beveiligde pagina!";
}
}else{
header("Refresh: 3; url=inloggen.php");//foutmelding
echo"Een van de vereiste velden bestaat niet!";
}
}else{
?>
@session_start();
if($_GET['login'] == 'uitloggen')
{
header("Refresh: 3; url=inloggen.php");//foutmelding
session_unset();
session_destroy();
echo"Je bent nu uitgelogt!";
}
if($_POST['login'])
{
if($_POST['gebruikersnaam'] && $_POST['wachtwoord'])
{
function clean($str)
{
$cleaned = strip_tags(htmlspecialchars(addslashes(stripslashes( $str ))));
return $cleaned;
}
$gebruiker=clean($_POST[gebruikersnaam]);
$wachtwoord=md5($_POST[wachtwoord]);
$sql=mysql_query("SELECT * FROM gebruikers WHERE gebruikersnaam='".$gebruiker."' AND wachtwoord='".$wachtwoord."'");
$check=mysql_num_rows($sql);
if($check!=1)
{
header('Refresh: 3; url=inloggen.php'); //foutmelding
echo"Verkeerde gebruikersnaam of wachtwoord!";
}
else
{
$gebruikers=mysql_fetch_array($sql);
$_SESSION[gebruiker] = $gebruiker;
$_SESSION[login] = true;
header("Refresh:3; url=beveiligd.php"); // foutmelding
echo"Je bent succesvol ingelogd! U word doorgestuurd naar een beveiligde pagina!";
}
}else{
header("Refresh: 3; url=inloggen.php");//foutmelding
echo"Een van de vereiste velden bestaat niet!";
}
}else{
?>
<form action="registreer.php" method="post">
<table >
<tr>
<td>Gebruikersnaam</td>
<td><input type="text" name="gebruikersnaam"></td>
</tr>
<tr>
<td>Wachtwoord</td>
<td><input type="password" name="wachtwoord"></td>
</tr>
<tr>
<td><input type="submit" value="inloggen" name="login">
</td></tr>
</table>
</form>
Alvast bedankt voor het helpen!
Groeten,
Nick
Gewijzigd op 21/09/2013 15:37:58 door Nick kuijpers
gebruik een fatsoenlijke PHP editor en maak een nieuw bestand aan. kopieër je code uit je oude bestand en plak deze in het nieuwe bestand. Sla het bestand op. Wees er 100% zeker van dat op regel 1, positie 1 begint met de 'php open tag' en dat je geen output genereert voor de header functies.
Toevoeging op 21/09/2013 16:15:07:
waarom en geen
Mijn editor is microsoft expresion web en ik ben er best tevreden over.
En ik wil graag dat mijn "Gebruikers" eerst een berichtje zien voordat ze uitloggen/inloggen.
en dat werkt met Refresh.
en ookal doe ik
Dan blijft de foutmelding komen.
Dit is BTW de foutmelding:
Warning: Cannot modify header information - headers already sent by (output started at /home/nickkwe105/domains/designnick.nl/public_html/dss/inc/header.php:28) in /home/nickkwe105/domains/designnick.nl/public_html/dss/registreer.php on line 44
Gewijzigd op 21/09/2013 16:22:48 door nick kuijpers
kopieër je code uit je oude bestand en plak deze in het nieuwe bestand. Sla het bestand op. Wees er 100% zeker van dat op regel 1, positie 1 begint met de 'php open tag' en dat je geen output genereert voor de header functies.
Toevoeging op 21/09/2013 16:40:17:
http://www.w3.org/International/questions/qa-byte-order-mark
het zijn een paar bytes die door PHP als output gezien worden maar die je niet ziet staan in je PHP bestand.
Interessant: addslashes(stripslashes( $str ))
?
Nick kuijpers op 21/09/2013 15:37:31:
Maar omdat het niet in de header staat krijg ik telkens weer de fout melding header already sends.
Weet je wat de foutmelding betekent?
Begint je script met de include, gebruik je daarna een sluittag en daarna weer een openingstag?
Waarom een @ voor session_start?
Functie clean is wat onzinning. Zowel op de manier waarop je het gebruikt. Daarnaast is er al een prima oplossing: mysql_real_escape_string.
Waarom variabelen kopiëren? Je kunt toch prima de $_POST-waarden gebruiken?!
md5 is geen goede beveiliging (meer) voor het beveiligen van een wachtwoord.
Waarom * in je query en niet het veld/de velden selecteren die je wilt?
Waar is de foutafhandeling?
Het gebruik van een tabel voor een formulier is niet meer van deze tijd.