Vraag & Antwoord

Webprogrammeren & scripting

PHP Gastenboek Error

7 antwoorden
  • >PHP 4.2.3< ik heb een gastenboek die niet goed werkt.. hij schrijft het na het posten wel naar gastenboek.txt maar laad een error zien op het scherm zodra je dan weer naar het gastenboek word doorgelinkt; [quote:bad200432e]Warning: Cannot add header information - headers already sent by (output started at c:\phpdev\www\Layout\Includes\Gastenboek.inc:6) in c:\phpdev\www\files\gastenboek\gastenboek_overzicht.php on line 14[/quote:bad200432e] gastenboek_overzicht.php; [quote:bad200432e]<?php include("../../Layout/Includes/Gastenboek.inc") ?> <? $amount=15; if ($_GET['action']=='write') { $file=fopen('gastenboek.txt','a'); $message=str_replace("\r",'',$message); $message=str_replace("\n",'{{{',$_GET['message']); fwrite($file,$_GET['name'].'|||'.$_GET['email'].'|||'.date('d-m-Y H:i:s').'|||'.$_GET['url'].'|||'.$message."\n"); fclose($file); header('location: gastenboek_overzicht.php?action=read&start=0'); } $start=(isset($_GET['start'])?$_GET['start']:0); $gastenboek=Array(); $gastenboek=file('gastenboek.txt'); ?> <HTML><HEAD> <center> <SCRIPT language="JavaScript"> function validate(form) { if (form.name.value=="") { alert("Vul je naam in"); return false; } else if (form.message.value=="") { alert("Vul je bericht in"); return false; } } </SCRIPT> </HEAD> </center> <BODY onLoad="//SUR()"> <P> <TABLE width="100%" cellspacing="0" cellpadding="0"> <TR> <TD height="19" class="tittd"><div align="center"><a href="gastenboek_invul.php" target="_parent">Schrijf een bericht in het gastenboek</a></div></TD> </TR> </TABLE> <TABLE width="100%" cellspacing="0" cellpadding="0"> <TR> <TD class="conttd"> <div align="center">Berichten <? echo $start+1; ?> tot en met <? echo min($start+$amount,sizeof($gastenboek)); ?>.</div> <HR align="center"> <div align="center"> <TABLE width="100%"> <? $gastenboek=array_reverse($gastenboek); for ($i=$start;$i<$start+$amount && $i<sizeof($gastenboek);$i++) { list($name,$email,$date,$url,$message)=explode('|||',$gastenboek[$i]); $message=str_replace('{{{',"\n",$message); echo '<TR><TD><B>'.($email!=""?'<A href="mailto:'.$email.'">'.$name.'</A>':$name).'</B></TD><TD align="center"><B><A href="'.$url.'" target="_blank">'.$url.'</B></TD><TD align="right"><B>'.$date.'</B></TD></TR>'."\n"; echo '<TR><TD colspan="3"><SPAN class="SUR">'.str_replace("\n",'<BR>',htmlspecialchars($message)).'</SPAN></TD></TR>'."\n"; echo '<TR><TD colspan="3"><HR></TD></TR>'."\n"; } ?> </TABLE> <?php if ($start>0) echo '<A href="gastenboek_overzicht.php?start='.max(0,$start-$amount).'"><<<</A> '; if ($start+$amount<sizeof($gastenboek)) echo ' <A href="gastenboek_overzicht.php?start='.($start+$amount).'">>>></A>'; ?> </div></TD> </TR> </TABLE> <P> <TABLE width="100%" cellspacing="0" cellpadding="0"> <TR> <TD class="tittd"><div align="center"></div></TD> </TR> </TABLE> </BODY> </HTML>[/quote:bad200432e] gastenboek_invul.php; [quote:bad200432e] <?php include("../../Layout/Includes/Gastenboek.inc") ?> <? $amount=15; if ($_GET['action']=='write') { $file=fopen('gastenboek.txt','a'); $message=str_replace("\r",'',$message); $message=str_replace("\n",'{{{',$_GET['message']); fwrite($file,$_GET['name'].'|||'.$_GET['email'].'|||'.date('d-m-Y H:i:s').'|||'.$_GET['url'].'|||'.$message."\n"); fclose($file); header('location: gastenboek_overzicht.php?action=read&start=0'); } $start=(isset($_GET['start'])?$_GET['start']:0); $gastenboek=Array(); $gastenboek=file('gastenboek.txt'); ?> <HTML> <HEAD> <body link="#000000" vlink="#000000" alink="#000000" text="#000000" bgcolor="CAD1D9"> <center> <SCRIPT language="JavaScript"> function validate(form) { if (form.name.value=="") { alert("Vul je naam in"); return false; } else if (form.message.value=="") { alert("Vul je bericht in"); return false; } } </SCRIPT> </HEAD> </center> <BODY onLoad="//SUR()"> <P> <TABLE width="100%" "cellspacing="0" cellpadding="0"> <TR> <TD class="tittd"><div align="center">Invullen gastenboek</div></TD> </TR> </TABLE> <P> <TABLE width="100%" cellspacing="0" cellpadding="0"> <TR> <TD class="tittd"><div align="center"></div></TD> </TR> </TABLE> <TABLE width="100%" cellspacing="0" cellpadding="0"> <TR> <TD class="conttd"> <FORM action="gastenboek_overzicht.php" method="GET" onSubmit="return validate(this);"> <div align="center"> <INPUT type="hidden" name="action" value="write"> <TABLE> <TR> <TD>Naam:</TD> <TD><INPUT type="text" name="name" size="30"></TD> </TR> <TR> <TD>E-Mail:</TD> <TD><INPUT type="text" name="email" size="30"> </TD> </TR> <TR> <TD>Homepage:</TD> <TD><INPUT type="text" name="url" size="30"> </TD> </TR> <TR> <TD height="129">Bericht:</TD> <TD><TEXTAREA name="message" cols="50" rows="5"></TEXTAREA></TD> </TR> </TABLE> <INPUT type="submit" value="Verstuur"> </div> </FORM></TD> </TR> </TABLE> </HTML> </table> </tr> </td> </table>[/quote:bad200432e]
  • De foutmelding wordt veroorzaakt door het feit dat je al output naar de gebruiker hebt gestuurd op het moment dat je een header() wilt schrijven. Waar dat gebeurd staat netjes in de warning die je terugkrijgt (namelijk in de include file). De oplossing is dus om de include file een stukje naar onderen te plaatsen in het script, de output [url=http://www.php.net/manual/en/control-structures.php#control-structures.if]conditioneel[/url] te tonen of [url=http://www.php.net/manual/en/ref.outcontrol.php]buffering[/url] in te bouwen. Aan jouw de keuze.
  • Daarnaast moet je nooit en te nimmer files die je include de extensie .inc geven, die worden vrijwel nooit door de php-parser verwerkt en zullen dus of te downloaden zijn als je ze aanroept, of als tekst weergegeven worden. Mag jij zelf raden wat je daar allemaal mee zou kunnen doen ;)
  • jeuh! mag ik raden ????? en wat kan ik winnen? ;) :P
  • Mag je wel *.inc.php?
  • ja. t.
  • Thnx

Beantwoord deze vraag

Weet jij het antwoord op deze vraag? Registreer of meld je aan met je account

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.