Beste mensen!

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:

<?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>";
  }
 }	
}
?>


Hoe krijg ik die header nu aan de praat op een of andere manier..

bedankt alvast
Goed opbouwen.

if(...)
{
$var = ....
}
else
{
$var = .....
}
.....
header(....)
echo $var
Is hier eigenlijk geen plekje met frequently asked questions?

(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...
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...
PHP scripts kun je (zoals hier gebeurt) heel onlogisch opbouwen, maar dan krijg je dit soort problemen.

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
<?
$date = mysql_real_escape_string(date("d-m-Y h:i"));
?>
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.

INSERT INTO
  tabelnaam (
    datumtijdveld
  )
VALUES (
  NOW()
);

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.
@Emmanuel Delay: Ik had al gezocht naar een eerder topic over dit eventuele probleem maar kan ik niet vinden!

@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??))
Niets persoonlijk hoor. Het is gewoon zo'n veel voorkomend probleem.
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.

<?php
if ( ... ) //hier controleer je dus of er redenen zijn om header te gebruiken
{
// afhandeling MySQL, cookies, ...

header('location: ...');
}
else
{
echo 'pas vanaf hier en niet eerder begin je output naar de gebruiker te sturen';
}
?>
Ik heb er nu dit v an gemaakt:

<?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";
  	}
  }
?> 


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
Dit is al een aardige verbetering.

if(isset($toegevoegd)) {
Moet worden
if($toegevoegd) {
ik weet dat dit eigenlijk niet mag in de php maar als je bovenaan je pagina
<?php
ob_start();
?>
zet en onder aan je pagina
<?php
ob_end_flush();
?>

dan ben je ervan af.. oke ik weet het, het mag officieel niet, maar je hoeft nu niet je hele script aan te passen.

Reageren