Gästebuch: Formular wird nicht angezeigt

Hallo!

@reptiler
Weil GET bei Formularen Probleme macht.... so ist es jedenfalls bei mir.
Leider habe ich gestern erst meine Logs gelöscht, sonst könnte ich dich jetzt mit Fehlermeldungen bombadieren. *g*
Ausserdem habe ich hier schon oft genug gelesen dass man POST anstatt GET nehmen soll.
Da es ja aber kein Problem ist beide Varianten mal schnell zu testen, denke ich dass wir uns nun nicht darüber streiten brauchen. ;)

Gruss Dr Dau
 
Hier der aktuelle Code:
PHP:
html>
<head>
<title>Sven's Gästebuch</title>
</head>
<body>
<?php
if(action == "add")
{
if(empty($_POST['name']) || empty($_POST['mail']) || empty($_POST['text']))
{
echo "<b>Du hast nicht alle Felder ausgef&uuml;llt !</b><br>";
echo "Klicke auf den Zurück-Button deines Browsers";
}
else{
echo "Danke <i>$name</i> f&uuml;r deinen Eintrag!";
}
}
else
{
?>
<b>Eintragen in mein G&auml;stebuch<b><br>
<form action="gb.php?action=add" method="post">
Dein Name: <input type="text" name="name" size="24"><br>
E-Mail: <input type="text" name="mail" size="24"><br>
Homepage: <input type="text" name="www" size="24"><br>
<br>
Dein Eintrag:<br>
<textarea name="text" cols="35" rows="5"></textarea><br> 
<input type="submit" value="Abschicken">
<input type="reset" value="Löschen">
</form>
<?php
}
$zeit = getdate();
$tag = $zeit["mday"];
$jahr = $zeit["year"];
$stunden = $zeit["hours"];
$minuten = $zeit["minutes"];
$monat = $zeit["month"];
$wochentag = $zeit["weekday"];

switch ($wochentag)
{ 
case "Monday";
	$wochentag_de = "Montag";
	break;
case "Tuesday";
		$wochentag_de = "Dienstag";
		break;
case "Wednsday";
		$wochentag_de = "Mittwoch";
		break;
case "Thursday";
    	$wochentag_de = "Donnerstag";
 		break;
case "Friday";
        $wochentag_de = "Freitag";
       break;
case "Saturday";
        $wochentag_de = "Samstag";
		break;
case "Sunday";
		$wochentag_de = "Sonntag";
		break;
}

switch($monat)
{
case "January";
    $monat_de = "Januar";
	break;
case "February";
     $monat_de="Februar";
     break;
   case "March";
     $monat_de="März";
     break;
   case "June";
     $monat_de="Juni";
     break;
   case "July";
     $monat_de="Juli";
     break;
   case "October";
     $monat_de="Oktober";
     break;
   case "December";
     $monat_de="Dezember";
     break;  
}

$nummer = fopen("gaesteanzahl.txt","r");
$zahl = fgets($nummer,10);
$zahl=trim($zahl);
$zahl++;
$nummer_schreiben = fopen("gaesteanzahl.txt","w");
fwrite($nummer_schreiben,$zahl);
		
$nummer_und_datum="Nr. $zahl vom $wochentag_de, den $tag. $monat_de $jahr um $stunden.$minuten Uhr."; 		
$text=nl2br($text);  //Zeilenumbrüche in <br> umwandeln		


$name =$_POST['name']; 
$email = $_POST['mail'];
$homepage = $_POST['www'];
$text = $_POST['text'];

 $eintrag="<table">
 <tr><td>$nummer_und_datum</td></tr>
<tr><td>Name:</td><td>$name</td></tr>
<tr><td>Email:</td><td><a href=\"mailto:$email \">$email </td></tr>
<tr><td>Homepage:</td><td><a href=\"$homepage\" target=\"_blank\">$homepage</td></tr>
<tr><td">$text</td></tr></table><br><br>\n"; 

$eintraege_alt = file("buch.txt");
$eintraege_anzahl = count($eintraege_alt);
$eintraege = "$eintrag$eintraege_alt[0]";
for($i=0; $i<$eintraege_anzahl; $i++)
{
$eintreage = "$eintrag$eintraege_alt[$i]";
}
$datei = fopen("gaeste.txt","w");
fwrite($datei,$eintraege);
?>
</body>
</html>

Muss das action auch in $_POST stehen?
Und ich glaube das Schreiben in die Datei funktioniert auch nicht so ganz, da steht jetzt nur der letzte Eintrag drinne ....
 
Änder noch
if(action == "add")
in
if($_POST['action#] == "add")

und ausserdem
echo "Danke <i>$name</i> f&uuml;r deinen Eintrag!";
in
echo "Danke <i>$_POST['name']</i> f&uuml;r deinen Eintrag!";
 
Also, das Eintragen klappt jetzt, nur die Gäste werden in 2er Schritten gezählt und wie gesagt wird nur der neue Eintrag in der Datei gespeichert.

Und bevor ich es vergesse:
Die Ausgabe nach dem Eintragen kommt auch nicht, also wenn ich was abschicke ist danach nur das leere Formular da.
 
Zuletzt bearbeitet:
Weiterhin solltest Du noch
PHP:
$eintrag="<table"> 
<tr><td>$nummer_und_datum</td></tr> 
<tr><td>Name:</td><td>$name</td></tr> 
<tr><td>Email:</td><td><a href=\"mailto:$email \">$email </td></tr> 
<tr><td>Homepage:</td><td><a href=\"$homepage\" target=\"_blank\">$homepage</td></tr> 
<tr><td">$text</td></tr></table><br><br>\n";
in
PHP:
$eintrag="<table> 
<tr><td>$nummer_und_datum</td></tr> 
<tr><td>Name:</td><td>$name</td></tr> 
<tr><td>Email:</td><td><a href=\"mailto:$email \">$email </td></tr> 
<tr><td>Homepage:</td><td><a href=\"$homepage\" target=\"_blank\">$homepage</td></tr> 
<tr><td>$text</td></tr></table><br><br>\n";
ändern, sonst bekommst Du ein Parse Error

[edit] 2. und letzte Zeile muss auch <td colspan=\"2\"> heissen [/edit]
 
Zuletzt bearbeitet:
und noch eine änderung
PHP:
$datei = fopen("gaeste.txt","w"); 
durch
$datei = fopen("gaeste.txt","a"); 
ersätzen
 
Danke, jetzt schreibt er auch mehrere Einträge in die Textdatei.

Folgende Probleme bestehen aber noch:
- bei jedem Seitenaufruf wird ein leerer Eintrag erstellt
- die Anweisungen, wenn action = add ist werden nicht ausgeführt
- der letzte Eintrag im Gästebuch steht unten und nicht wie erhofft oben

Weitere Ideen und Lösungsvorschläge wären sehr nett... ;)

Hier nochmal der Quellcode
PHP:
<html>
<head>
<title>Sven's Gästebuch</title>
</head>
<body>
<?php
if($_POST['action'] == "add")
{
if(empty($_POST['name']) || empty($_POST['mail']) || empty($_POST['text']))
{
echo "<b>Du hast nicht alle Felder ausgef&uuml;llt !</b><br>";
echo "Klicke auf den Zurück-Button deines Browsers";
}
else{
$n = $_POST['name'];
echo "Danke <i>$n</i> f&uuml;r deinen Eintrag!";
}
}
else
{
?>
<b>Eintragen in mein G&auml;stebuch<b><br>
<form action="gb.php?action=add" method="post">
Dein Name: <input type="text" name="name" size="24"><br>
E-Mail: <input type="text" name="mail" size="24"><br>
Homepage: <input type="text" name="www" size="24"><br>
<br>
Dein Eintrag:<br>
<textarea name="text" cols="35" rows="5"></textarea><br> 
<input type="submit" value="Abschicken">
<input type="reset" value="Löschen">
</form>
<?php
$zeit = getdate();
$tag = $zeit["mday"];
$jahr = $zeit["year"];
$stunden = $zeit["hours"];
$minuten = $zeit["minutes"];
$monat = $zeit["month"];
$wochentag = $zeit["weekday"];

switch ($wochentag)
{ 
case "Monday";
	$wochentag_de = "Montag";
	break;
case "Tuesday";
		$wochentag_de = "Dienstag";
		break;
case "Wednsday";
		$wochentag_de = "Mittwoch";
		break;
case "Thursday";
    	$wochentag_de = "Donnerstag";
 		break;
case "Friday";
        $wochentag_de = "Freitag";
       break;
case "Saturday";
        $wochentag_de = "Samstag";
		break;
case "Sunday";
		$wochentag_de = "Sonntag";
		break;
}

switch($monat)
{
case "January";
    $monat_de = "Januar";
	break;
case "February";
     $monat_de="Februar";
     break;
   case "March";
     $monat_de="März";
     break;
   case "June";
     $monat_de="Juni";
     break;
   case "July";
     $monat_de="Juli";
     break;
   case "October";
     $monat_de="Oktober";
     break;
   case "December";
     $monat_de="Dezember";
     break;  
}

$nummer = fopen("gaesteanzahl.txt","r");
$zahl = fgets($nummer,10);
$zahl=trim($zahl);
$zahl++;
$nummer_schreiben = fopen("gaesteanzahl.txt","w");
fwrite($nummer_schreiben,$zahl);
		
$nummer_und_datum="Nr. $zahl vom $wochentag_de, den $tag. $monat_de $jahr um $stunden.$minuten Uhr."; 		
$text=nl2br($text);  //Zeilenumbrüche in <br> umwandeln		


$name =$_POST['name']; 
$email = $_POST['mail'];
$homepage = $_POST['www'];
$text = $_POST['text'];

 $eintrag="<table width=\"78%\">
 <tr><td colspan=\"2\">$nummer_und_datum</td></tr>
<tr><td width=\"12%\">Name:</td><td width=\"88%\">$name</td></tr>
<tr><td width=\"12%\">Email:</td><td width=\"88%\"><a href=\"mailto:$email \">$email </td></tr>
<tr><td width=\"12%\">Homepage:</td><td width=\"88%\"><a href=\"http://$homepage\" target=\"_blank\">$homepage</td></tr>
<tr><td colspan=\"2\">$text</td></tr></table><br><br>\n"; 

$eintraege_alt = file("gaeste.txt");
$eintraege_anzahl = count($eintraege_alt);
$eintraege = "$eintrag$eintraege_alt[0]";
for($i=0; $i<$eintraege_anzahl; $i++)
{
$eintreage = "$eintrag$eintraege_alt[$i]";
}
$datei = fopen("gaeste.txt","a");
fwrite($datei,$eintraege);
}
?>
</body>
</html>
 
Dass sortieren wirst Du wohl so nicht hinbekommen.
Dazu müsstest Du die Einträge auslesen und in einem Array zwischenspeichern, dann den neuen Eintrag reinschreiben lassen und dann die alten Einträge aus dem Array wieder anhängen.

Eigentlich müsste r+ gehn (Öffnet die Datei zum Lesen und Schreiben und setzt den Dateizeiger auf den Anfang der Datei.) aber komischerweise wird dann der Eintrag gelöscht.
r öffnet die Datei ohnehin nur zum lesen.
w und w+ setzen die Datei auf 0 Byte (Inhalt wird also gelöscht).
a und a+ schreiben ans ende der Datei.

Zu Punkt 1 und 2 würde ich sagen, mach ein normales Formular und übergebe damit die Daten an eine extra PHP.
Ansonsten such mal im Forum nach php_self, evtl. lässt sich dein Problem damit auch beheben.
 
Zurück