Header() werkt niet
Ik heb een problemen als ik een gastenboek berichtje wil plaatsen..
hij word gecontroleert om het een of ander, als hij dan naar het gastenboek word verzonden moet hij een header () refresh maken. maar dat werkt in IE en FF niet.. ook werkt de gewonen header(Location) werkt niet..
dit is me code:
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
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
<?php
if(isset($_POST['Post'])) {
$IP = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$date = mysql_real_escape_string(date("d-m-Y h:i"));
$name = mysql_real_escape_string($_POST['Name']);
$mail = mysql_real_escape_string($_POST['Email']);
$message = mysql_real_escape_string(trim(htmlentities($_POST['Message'])));
if(empty($_POST['Message'])) {
echo "
<script language='javascript'>
alert(\"You cant post anything, because you didnt typ a message\");
</script>
";
} elseif(empty($_POST['Name'])) {
echo "<script language='javascript'>
alert(\"You didnt entered a name. please enter a name\");
</script>";
} else {
$Toevoegen = "INSERT INTO Questbook (Message, Mail, Date, Name) VALUE ('".$message."', '".$mail."', '".$date."', '".$name."')";
$toegevoegd = mysql_query($Toevoegen) or die (mysql_error());
if($toegevoegd) {
header("Location: yorsha.nl/NLD/index.php?page=Questbook");
echo "<script language='javascript'>
alert(\"You post it succesfull.\");
</script>";
} else {
echo "<script language='javascript'>
alert(\"You try to post something but it failed.\");
</script>";
}
}
}
?>
if(isset($_POST['Post'])) {
$IP = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$date = mysql_real_escape_string(date("d-m-Y h:i"));
$name = mysql_real_escape_string($_POST['Name']);
$mail = mysql_real_escape_string($_POST['Email']);
$message = mysql_real_escape_string(trim(htmlentities($_POST['Message'])));
if(empty($_POST['Message'])) {
echo "
<script language='javascript'>
alert(\"You cant post anything, because you didnt typ a message\");
</script>
";
} elseif(empty($_POST['Name'])) {
echo "<script language='javascript'>
alert(\"You didnt entered a name. please enter a name\");
</script>";
} else {
$Toevoegen = "INSERT INTO Questbook (Message, Mail, Date, Name) VALUE ('".$message."', '".$mail."', '".$date."', '".$name."')";
$toegevoegd = mysql_query($Toevoegen) or die (mysql_error());
if($toegevoegd) {
header("Location: yorsha.nl/NLD/index.php?page=Questbook");
echo "<script language='javascript'>
alert(\"You post it succesfull.\");
</script>";
} else {
echo "<script language='javascript'>
alert(\"You try to post something but it failed.\");
</script>";
}
}
}
?>
Hoe krijg ik die header nu aan de praat op een of andere manier..
bedankt alvast
Er mag geen enkele output zijn vóór header(). En ik zie een echo, dat werkt dus niet.
Warning: Cannot modify header information - headers already sent by (output started at /home/vhosts/yorsha.nl/httpdocs/NLD/index.php:24) in /home/vhosts/yorsha.nl/httpdocs/NLD/index.php on line 178
Dus dat wil zeggen dat ik ALLE! echo's VOOR de header er uit moet gooien??? wat voor een oplossing kan ik hier het beste gebruiken??
Denk dan gewoon alles in een apart script laten toevoegen ofniet?
Edit: en godverdomme PHP leren, SanThe's berichten lezen en HET STAAT HIER ZELF IN HET FAQ.
Gewijzigd op 01/01/1970 01:00:00 door Onbekend Onbekend
@Tommy ik hebt ook geprobeert met een http:// er voor gezet alleen dat wilt ook niet werken.
Dat was maar een tip, maar LEES de errors die je krijgt nou eens, dan kom je al verder.
want dit is me error:
Warning: Cannot modify header information - headers already sent by (output started at /home/vhosts/yorsha.nl/httpdocs/NLD/index.php:24) in /home/vhosts/yorsha.nl/httpdocs/NLD/index.php on line 178
zal eens even verder knutselen.
eventuele ideen hoor ik graag :)
En wtf bedoel je met een apart script toevoegen?
echo "<meta http-equiv='refresh' content='0; url=index.php'>";
Mitch schreef op 31.01.2009 23:34:
Gebruik dit?:P
echo "<meta http-equiv='refresh' content='0; url=index.php'>";
echo "<meta http-equiv='refresh' content='0; url=index.php'>";
Das gewoon een meta refresh, dat wil de TS dus niet ;)
if(...)
{
$var = ....
}
else
{
$var = .....
}
.....
header(....)
echo $var
(EDIT: Ik bedoel i.v.m. dit soort vragen, er is wel een FAQ i.v.m. het gebruik van dit forum.)
Dit soort dingen moeten we om de haverklap opnieuw uitleggen. Soms heeft een mens al eens wat minder zin om dat voor de honderdste keer uit te leggen.
Juist al aan de titel denk ik onmiddellijk: "Header() werkt wel!". Gewoon geen output sturen...
Gewijzigd op 01/01/1970 01:00:00 door Emmanuel Delay
Yoram schreef op 31.01.2009 22:24:
jaah als ik dat doe, en het advies van SanThe opvolg.. zou ik ALLE echo's uit me script halen, dan kan ik net zo goed een apart toevoeg script maken?
Ja... dat is inderdaad het enige juiste wat je kan doen.
Alle echo's van daarvoor weghalen.
Is even wat werk: maar dat moet maar.
Een huizenbouwer begint ook niet met dak.... en komt er later achter dat er nog een fundering onder de muren moet....
Dat doe jij hier ook: je trekt eerst de muren op en de vlag hangt al uit, omdat het hoogste punt bereikt is..... en dan moet de fundering (correct php + foutafhandeling) er nog in...
Het is net als met een presentatie houden. Je zorgt eerst dat iedereen in de goede ruimte is zodat je alles kunt laten zien en begint dan pas te vertellen. Hier ben je begonnen met vertellen om dan halverwege nog naar de goede ruimte te gaan zodat ze de dia's kunnen zien.
Een php script heeft global de volgende opbouw
* afhandelen logica voor het script
* headers versturen (cookies,sessies,gewone headers ...)
* output geven
Heeft al iemand je gezegd dat je jouw $date géén datum met tijd bevat? Hier staat een waardeloze string waar je verder niets meer mee kunt.
Wanneer jij een datum met tijd in de database wilt opslaan, dan moet je (in MySQL) een kolom van het type DATETIME gebruiken. En die eist het ISO-formaat yyyy-mm-dd hh:mm:ss.
Verder is het 100x eenvoudiger om voor het vullen van de datumtijd, gewoon de SQL-functie NOW() te gebruiken.
Daar komt geen letter PHP-code aan te pas en je krijgt een prachtige en vooral geldigde datum met tijd in je database. Je kunt nu ineens gaan sorteren, rekenen en vergelijken met datums en tijden, dat is met jouw "oplossing" onmogelijk.
@Tommy:
Ik bedoel daar mee van als je form begin de action naar het toevoegings script ;) sorry voor de slechte uitleg.
@TJVB: wat zou dan volgens jou de logische oplossing/volgorde hiervoor zijn?
ik bedoel Je moet eerst dingen checken voor dat iets gaat opslaan.
Ik heb nu het opslaan van dat bericht in een apart php bestandje gezet en dat werkt goed nu wil ik hem nog goed in me hoofd script zetten.
(heb de hele website in een switch gemaakt(verstandig??))
Telkens opnieuw moeten we dat uitleggen.
Kijk, je ziet toch waar het probleem zit, ja?
Ofwel stuur je een html pagina naar de gebruiker, ofwel handel je af wat je moet afhandelen en spring je met header dan weg.
Je snapt dat het zinloos is eerst een halve pagina naar de gebruiker te sturen om dan een halve microseconde later die pagina weer te verlaten en weg te springen.
Nog voor je 1 karakter naar de gebruiker stuurt, moet jij - de webmaster - al weten of je al dan niet header nodig zult hebben.
Dat doe je door een grote accolade rond je file te zetten.
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
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
<?php
if(isset($_POST['Post'])) {
$IP = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$name = mysql_real_escape_string(trim($_POST['Name']));
$mail = mysql_real_escape_string(trim($_POST['Email']));
$message = mysql_real_escape_string(trim(htmlentities($_POST['Message'])));
if(!empty($_POST['Name'])) {
if(!empty($_POST['Message'])) {
$Toevoegen = "INSERT INTO Questbook (Message, Mail, Name, Date) VALUE ('".$message."', '".$mail."', '".$name."', NOW())";
$toegevoegd = mysql_query($Toevoegen) or die (mysql_error());
if(isset($toegevoegd)) {
header("Location: index.php?page=Questbook&Quest=1");
} else {
echo "Het toevoegen is mislukt";
}
} else {
echo "<script language='javascript'>
alert('je bent vergeten een bericht in te vullen')
</script>";
}
} else {
echo "Je moet nog een naam invullen";
}
}
?>
if(isset($_POST['Post'])) {
$IP = mysql_real_escape_string($_SERVER['REMOTE_ADDR']);
$name = mysql_real_escape_string(trim($_POST['Name']));
$mail = mysql_real_escape_string(trim($_POST['Email']));
$message = mysql_real_escape_string(trim(htmlentities($_POST['Message'])));
if(!empty($_POST['Name'])) {
if(!empty($_POST['Message'])) {
$Toevoegen = "INSERT INTO Questbook (Message, Mail, Name, Date) VALUE ('".$message."', '".$mail."', '".$name."', NOW())";
$toegevoegd = mysql_query($Toevoegen) or die (mysql_error());
if(isset($toegevoegd)) {
header("Location: index.php?page=Questbook&Quest=1");
} else {
echo "Het toevoegen is mislukt";
}
} else {
echo "<script language='javascript'>
alert('je bent vergeten een bericht in te vullen')
</script>";
}
} else {
echo "Je moet nog een naam invullen";
}
}
?>
klopt hier al meer van?? maar hij werkt nog steeds niet zelfs niet op deze manier.. dan denk ik dat ik me script opnieuw moet maken.
Toch bedankt voor de reacties en tips :D het helpt wel :) snap er telkens meer van
Gewijzigd op 01/01/1970 01:00:00 door Yoram
if(isset($toegevoegd)) {
Moet worden
if($toegevoegd) {
zet en onder aan je pagina
dan ben je ervan af.. oke ik weet het, het mag officieel niet, maar je hoeft nu niet je hele script aan te passen.