webForumDet fria alternativet

Gästbok vill inte fungera..

PHP

8 svar · 1 066 visningar · startad av mathias5

Medlem sedan apr. 200735 inlägg
Frågan#1

Jag använder mig av php till en gästbok där datan lagras i en .txt fil och jag har ett litet problem. När man skriver ett meddelande och postar så kommer detta felmeddelande upp:

Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\xdream\gastbok.php:12) in C:\wamp\www\xdream\gastbok.php on line 81

När jag sedan uppdaterar sidan så syns inlägget som det ska och allt är frid och fröjd. Detta är rätt så störande och lite hjälp vore kanon!

EDIT: När jag lägger upp det på min server så fungerar det likadant, men inget felmeddelande kommer fram.

Lite hjälp vore bra! tack på förhand! :)

gasbok.php

<?php  
// hämta gb.txt till en variabel
$filename = "gb.txt";
$handle = fopen($filename, "r");
$intext = fread($handle, filesize($filename));
fclose($handle);

$gbtext = $intext;
//ta bort a markeringen från texten
$gbtext = str_replace ("[a]", "", "$gbtext");
$gbtext = str_replace ("[/a]", "", "$gbtext");

          
//hantera formulär
if (isset($_POST['gb'])){
$namn = $_POST['namn'];
$text = $_POST['text'];
$datum = $_POST['datum'];

//ordna datum till svenska
$datum = str_replace ("Monday", "Måndag", "$datum");
$datum = str_replace ("Tuesday", "Tisdag", "$datum");
$datum = str_replace ("Wednesday", "Onsdag" , "$datum");
$datum = str_replace ("Thirsday", "Torsdag", "$datum");
$datum = str_replace ("Friday", "Fredag", "$datum");
$datum = str_replace ("Saturday", "Lördag", "$datum");
$datum = str_replace ("Sunday", "Söndag", "$datum");

//hindra om nån post e tom
        if (empty ($namn) || empty ($text)){
      header("Location: gastbok.php");
        exit;
        }
        
//vad som ska sparas
$intext = '[a]<tr><td width="250" bgcolor="#ecedec"><div id="namnfont"><b> ' . $namn . '</b></div></td><td width="150" bgcolor="#ecedec"><div id="namnfont"> ' . $datum . ' </div></td></tr><tr><td colspan="2" bgcolor="#fcfdec"><div id="textfont">' . $text . '</div></td></tr>[/a]'. $intext;

//spara data i en textfil
     $filnamn = "gb.txt";
     $fp = fopen($filnamn, "r+");
     flock($fp, LOCK_EX); 
     fwrite($fp,$intext); 
     flock($fp, LOCK_UN); 
     fclose($fp); 

//skicka oss tillbaka och läser in gästboken igen     
     header("Location: gastbok.php"); 
   exit;
}

?>

<html>
<head>

<style type="text/css">
<!--
html, body { margin: 0; height: 100%; width: 100%px; background-color:transparent}
#textfont { margin: 10px 0px 10px ; text-align: left; font-family: Tahoma; font-size: 11px; color: #000000}
#namnfont { margin: 0px 0px; text-valign: left; font-family: Tahoma; font-size: 11px; color: #000000}
-->
</style>

</head>

<table border="0" width="463px" cellspacing=0>
<?php echo $gbtext; ?>
</table>

<table width='400' border=0 cellspacing=0>

<tr><td>
<form action="gastbok.php" method="post" runat="server">
<div id='textfont'>Namn</div><input type="text" name="namn">
</td>

<tr><td colspan="2">
<div id="textfont">Meddelande</div>
<textarea type="text" name="text" rows="3" cols="47"></textarea>
</td></tr>

<tr><td colspan="2" align="right">
<input type="hidden" name="datum" value='<?php echo date("l j-M-Y"); ?>'
<input type="submit" id="gb" name="gb" value="Skicka" />
<input type="reset" id="gb" name="gb" value="Ångra" />
</td></tr>

</form>
</table>

</html>
Medlem sedan okt. 2006224 inlägg
#2

Inget får skickas till HTML filen före det att en header funktion kallas. Gissar på att du gör det i koden.. någonstans iaf. Vet inte om det är radbrytningarna som gör det eller vad det är.

Läs mer här.

Medlem sedan juli 20023 617 inlägg
#3

Jag kopierade din kod rakt av och fick det att fungera, med undantag för första gången då jag fick en varning om att det inte fanns någon text i textfilen. Som matlin skriver har du troligtvis skrivit ut något tecken före ditt första <?php. Det kan vara ett mellanslag eller en radbrytning.

Du lagrar väldigt mycket information i textfilen f.ö. Vore det inte bättre att lagra enbart det som är skickat med formuläret och lägga på formateringen när du skriver ut inläggen?

Medlem sedan apr. 200735 inlägg
#4

Yes. Jag har saker innan då denna kodsnutt ligger i en större fil till en hemsida jag gör. Det som finns innan är annan php och html.

Fiddler: jo, ska tänka på det!

Medlem sedan juli 20023 617 inlägg
#5

Du skulle kunna lyfta ur delen som tar emot POST-datat och skriver till textfilen och lägga det i en egen fil.

Medlem sedan apr. 200735 inlägg
#6

Jag förstår hur du menar.. jag är rätt ny på php så en förklaring på vad du mer exakt menar vore kanon! :)

Medlem sedan juli 20023 617 inlägg
#7

Hackade din fil lite och delade upp den på två. Skulle egentligen vilja städa upp koden lite, men har inte tid just nu...

Medlem sedan apr. 200735 inlägg
#8

Ett stort jävla tack till dig Fiddler! Fungerar kanon.

Medlem sedan juli 20023 617 inlägg
#9

mathias5 skrev:

Ett stort jävla tack till dig Fiddler! Fungerar kanon.

Kul! :bire

298 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
157 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
157 ms — ändringar (db)