Problem mit Gästebuch

dunestar

Grünschnabel
Hallo Zusammen,

ich bin neu hier und hoffe, dass Ihr mir weiterhelfen könnt. Ich nutze seit Jahren das im Anhang befindliche txt File basierende Gästebuch. Bis zur Version 4.X funktionierte es noch problemlos. Aktuell leider nicht mehr... ich kann mir nur vorstellen, dass mit Version 5 eine Änderung vollzogen worden ist. Leider bin ich was php5 angeht nicht mehr up to date. Vllt. kann mir jemand schnell weiterhelfen...

Viele Dank
dunestar

PHP:
                          <?		  
$adminpasswort="test";

$myemail="test@test.de";

$email_senden="ja";

if ($eintrag) { eintrag(); }
else if ($senden) { auswertung($kommentar,$nname,$hpage,$email); }
else if ($admin_login) { admin_login(); }
else if ($admin) { admin($passwort); }
else if ($loeschen) { loeschen($to_delete); }
else gaestebuch_zeigen();


function gaestebuch_zeigen ()
{
	global $PHP_SELF;
	echo <<<FORMULAR
        <br>	
		<center>
		<FORM METHOD="POST" ACTION="$PHP_SELF">
		<INPUT TYPE="SUBMIT" NAME="eintrag" VALUE="Neuer Eintrag">
		</FORM>
		</center>
FORMULAR;
	
	$eintrag=array();
	$lesen=array();
	$teil=array();
	
	if (file_exists("../gbuch.txt")) {
	
	$datei=fopen("../gbuch.txt","r");
	while (!feof($datei)) {
	$lesen=fgets($datei,100000);
	array_push($eintrag,$lesen);
	}
	
	array_pop($eintrag);
	arsort($eintrag);
	
	foreach ($eintrag as $zeile) {
	$teil=explode("|",$zeile);
	
	$sekunden=$teil[0];
	$zeit=$teil[1];
	$name=$teil[2];
	$email=$teil[3];
	$hpage=$teil[4];
	$text=$teil[5];
	
	echo "<p align=\"justify\" style=\"margin-left:17pt;margin-right:25pt\">\n";
	echo"$zeit<br>\n";
	echo "<img src=\"gb_person.gif\" width=\"12\" height=\"12\" border=\"0\" vspace=\"0\">&nbsp;$name<br>\n";
	
	if ($email!="") {
	echo "<img src=\"gb_email.gif\" width=\"12\" height=\"12\" border=\"0\" vspace=\"0\">&nbsp;<a href=\"mailto:$email\">$email</a><br>\n";
	}
	
	if ($hpage!="") {
	echo "<img src=\"gb_home.gif\" width=\"12\" height=\"12\" border=\"0\" vspace=\"0\">&nbsp;<a href=\"$hpage\" target=\"blank\">$hpage</a><br>\n";
	}
	
	echo "<p align=\"justify\" style=\"margin:40pt; margin-top:0pt; margin-bottom:0pt\">$text</p>";
	echo "</p>\n";
	echo"<hr width=\"80%\" color=\"#2f5a4f\" size=\"1\">\n";
	
	}
	
	}
		echo "<p align=\"right\"><a href=\"$PHP_SELF?admin_login=true\">Admin</a>\n";
}

function eintrag()
{
	global $PHP_SELF;
	
	$ua=getenv("HTTP_USER_AGENT");
	if (1*strpos(strtolower($ua),"msie")>0) {
	$breite1=38;
	$breite2=50;
	} else { 
	$breite1=22;
	$breite2=30;
	}
	
	echo <<<EINTRAG
	<p align="right"><a href="$PHP_SELF">zum Gästebuch</a></p>
	<table cellpadding="5" cellspacing="5" width="100%">
	<tr>
	<td align="center">
	
	<font color="#000000">Eintrag ins Gästebuch</font><p>
	<FORM action="$PHP_SELF" method="post">
	<table width="310">
	<tr>
		<td>
			<font color="#000000">Name:</font>
		</td>
		<td>
			<input type="text" name="nname" size="$breite1" maxlength="40" VALUE="$nname">
		</td>
	</tr>
	<tr>
		<td>
			<font color="#000000">Email:*</font>
		</td>
		<td>
			<input type="text" name="email" size="$breite1" VALUE="$email">
		</td>
	</tr>
	<tr>
		<td width="33%">
			<font color="#000000">Homepage:*</font>
		</td>
		<td>
			<input type="text" name="hpage"  size="$breite1" VALUE="$hpage">
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<font color="#000000">Kommentar:</font><br>
			<textarea name="kommentar" rows="6" cols="$breite2" VALUE="$kommentar"></textarea>
		</td>
		<td>
			&nbsp;
		</td>
	</tr>
	<tr>
		<td colspan="2">
			<input type="submit" name="senden" value="eintragen">&nbsp;
			<INPUT TYPE="reset" VALUE=" löschen ">
		</td>
		<td>
		</td>
	</tr>
	<tr>
		<td>
			<br><font color="#000000">* optional</font><br>
		</td>
	</tr>
	</table>
	</FORM>
	
	</td></tr></table>
EINTRAG;
}

function auswertung ($kommentar,$nname,$hpage,$email)
{
	global $PHP_SELF;
	global $myemail;
	global $email_senden;
	
	echo "<p align=\"right\"><a href=\"$PHP_SELF\">zum Gästebuch</a></p>\n";
	
	$kommentar = stripslashes ($kommentar);
	$kommentar = trim ($kommentar);
	$nname = stripslashes ($nname);
	$nname = trim ($nname);
	$hpage = stripslashes ($hpage);
	$hpage = trim ($hpage);
	$email = stripslashes ($email);
	$email = trim ($email);
	
	$tag=date("d.");
	$m=array("Januar","Februar","M&auml;rz","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
	$monat=$m[1*date("m")-1];
	$jahr=date("Y");
	$tdw=array("Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag",);
	$x=date("w");
	$zeit=date("H:i:s");
	$anm=$tdw[$x].",&nbsp;".$tag."&nbsp;".$monat."&nbsp;".$jahr."&nbsp;-&nbsp;".$zeit;
	$sekunden=date("U");
	
	$zurueck="Klicken Sie <a href=\"javascript:history.back()\"><b>hier</b></a>, um zum Formular zurückzukehren und die Fehler zu beheben.</center>";
	
	if ((empty($kommentar)) || ((!ereg(".+@.+\..+", $email)) && (!empty($email))) || (empty($nname))) {echo "<center><br><br><br>Fehler !<br><br>";}
	
	if (empty($kommentar))
	{ echo "Sie keinen Kommentar eingegeben.<br><br>"; echo "$zurueck\n"; }
	
	else
	if(!ereg(".+@.+\..+", $email)&& !empty($email)) {
	echo "Die Email-Adresse ist falsch.<br><br>"; echo "$zurueck\n"; } 
	
	else
	if (empty($nname))
	{ echo "Sie haben Ihren Namen nicht eingegeben.<br><br>"; echo "$zurueck\n"; } 
	
	else {
	
	$komm=ereg_replace(chr(10),"<br>",$kommentar);
		if (!file_exists("../gbuch.txt")) { $datei=fopen("../gbuch.txt","w"); fclose($datei); }
	$gbfile=fopen("../gbuch.txt","a");
	fputs($gbfile,"$sekunden|$anm|$nname|$email|$hpage|$komm\n");
	fclose($gbfile);
    
	    if ($email_senden=="ja")
		{
		$subject = "Eintrag";
	    $header = "From: Gästebuch <$myemail>\n";
		$nachricht="Zeit - $anm\nName - $nname\nEmail - $email\nText - $komm";
		mail($myemail,$subject,$nachricht,$header);
		}
	
	echo "<center><br><br><br>Die Daten wurden gesendet.<br><br><br>\n";
	echo "<a href=\"$PHP_SELF\">Gästebuch erneut anschauen</a></center>";
	}
}

function admin_login()
{
	global $PHP_SELF;
	
	echo <<<ADMINFORMULAR
	<p align="right"><a href="$PHP_SELF">zum Gästebuch</a></p>
	<center><br><br>
	<form action="$PHP_SELF?admin=true" method="post">
	Passwort:
	<input type="password" name="passwort" size="20" maxlength="30">
	<input type="submit" name="admin" value=" login ">
	</form><br>
	</center>
ADMINFORMULAR;
}

function admin($passwort)
{
	global $PHP_SELF;
	global $adminpasswort;
	
	echo "<p align=\"right\"><a href=\"$PHP_SELF\">zum Gästebuch</a></p>\n";
	
		if ($passwort==$adminpasswort)
	{
	echo "<form action=\"$PHP_SELF\" method=\"post\">";
	echo "<table cellpadding=\"5\" cellspacing=\"5\" width=\"100%\">";
	
	$eintrag=array();
	$lesen=array();
	$teil=array();
	
	if (file_exists("../gbuch.txt"))
	{
		$datei=fopen("../gbuch.txt","r");
		while (!feof($datei))
		{
			$lesen=fgets($datei,100000);
			array_push($eintrag,$lesen);
		}
		
		array_pop($eintrag);
		rsort($eintrag);
		
		foreach ($eintrag as $zeile)
			{
			$teil=explode("|",$zeile);
			$sekunden=$teil[0];
			$zeit=$teil[1];
			$name=$teil[2];
			$email=$teil[3];
			$hpage=$teil[4];
			$text=$teil[5];
			$time=ereg_replace("&nbsp;","",$zeit);
			$time=ereg_replace(" ","",$time);
			echo "<tr><td width=\"50\" align=\"right\" valign=\"top\">";
			echo "<input type=\"radio\" name=\"to_delete\" value=\"$sekunden\"><br>";
			echo "</td><td>";
			echo "<font color=#000000>Zeit: $zeit</font><br>";
			echo "<font color=#000000>Name: $name</font><br>";
			echo "<font color=#000000>Email: $email</font><br>";
			echo "<font color=#000000>Homepage: $hpage</font><br>";
			echo "<font color=#000000>Kommentar: $text</font><br><br>";
			echo "</td></tr>";
			}
		echo "<tr><td></td><td align=\"left\">";
		echo "<input type=\"submit\" name=\"loeschen\" value=\"den markierten Eintrag löschen\">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;";
		echo "<input type=\"reset\" value=\"abbrechen\"></td></tr>";
		echo "</table></form>";
	}
	
	}
	
	else
	{
	echo "<center><br><br><br><br>Falsches Passwort!\n";
	echo "<p align=\center\"><a href=\"$PHP_SELF?admin_login=true\">Admin</a><center>\n";
	}
}

function loeschen($to_delete)
{
	global $PHP_SELF;
	global $adminpasswort;
	
	$zeile=array();
	$tosave=array();
	
	$to_delete=ereg_replace("&nbsp;","",$to_delete);
	$to_delete=ereg_replace(" ","",$to_delete);
	
	$datei=fopen("../gbuch.txt","r");
	while (!feof($datei))
		{
		$zeile=fgets($datei,100000);
		$teil=explode("|",$zeile);
		$datum=ereg_replace("&nbsp;","",$teil[0]);
		$datum=ereg_replace(" ","",$datum);
		if ($datum!=$to_delete) { array_push($tosave,$zeile); }
		}
	fclose($datei);
	
	$datei=fopen("../gbuch.txt","w");
	foreach ($tosave as $x)
		{
		fputs($datei,"$x");
		}
	fclose($datei);
	
	echo <<<FORMULAR
	<p align="right"><a href="$PHP_SELF">zum Gästebuch</a></p>
	<center>
	Der Eintrag wurde gelöscht<br><br><br>
	<a href="$PHP_SELF">zum Gästebuch</a><br><br><br>
	<form action="$PHP_SELF" method="post">
	<input type="hidden" name="passwort" value="$adminpasswort">
	<input type="submit" name="admin" value="zurück zur Administration">
	</form>
	</center>
FORMULAR;
}
?>
 

Anhänge

Zuletzt bearbeitet von einem Moderator:
Hi

es wäre gut zu wissen, was genau nicht funktioniert bzw. was stattdessen passiert.

Unabhängig davon würd ich mir ernsthaft überlegen, dieses Gästebuch loszuwerden.
Wenn es wirklich immer problemlos funktioniert hat (es könnte ja sein, dass ein Benutzer Probleme hatte, die du nicht kennst) ist der Grund dafür nur etwas Glück; der Dateiteil im Code funktioniert nämlich nicht, wenn mehrere Benutzer gleichzeitig schreiben = Code falsch.

Außerdem ist alles voll CSS-loser Styles, evt. vorhandene inkludierende Dateien mit header können je nach Inhalt Probleme bekommen, der Code ist generell etwas verwirrt (angefangen mit der Einrückung), die Existenz von Charsets ist vergessen worden usw.usw
 
Hi sheel,

dnake für Deine Antwort. Nun sobald ich auf den Button "Eintragen" klicke passiert nichts mehr...

Danke für die Hinweise... das GB ist so alt und war mal ne Vorlage. Welches würdest Du denn empfehlen? Ich möchte eigentlich die alten Einträge in der txt Datei im GB behalten...

Gruß dunestar
 
Falls du nichts finden solltest: Schalte mal das error_reporting und die Fehlerausgabe ein:

PHP:
// schreib mich an den Anfang des Scripts
ini_set('display_errors', 1);
error_reporting(-1);
 
Falls du nichts finden solltest: Schalte mal das error_reporting und die Fehlerausgabe ein:

PHP:
// schreib mich an den Anfang des Scripts
ini_set('display_errors', 1);
error_reporting(-1);

Vielen Dank, bekomme die folgenden Fehlermeldungen

Notice: Undefined variable: eintrag in /homepages/.../guestbook.php on line 75

Notice: Undefined variable: senden in /homepages/.../guestbook.php on line 76

Notice: Undefined variable: admin_login in /homepages/.../guestbook.php on line 77

Notice: Undefined variable: admin in /homepages/.../guestbook.php on line 78

Notice: Undefined variable: loeschen in /homepages/.../guestbook.php on line 79

Hat sich bei der Variablendefinition etwas geändert?
 
Bist du dir sicher, dass das gezeigte Script vollständig ist?
a) Die Zeile 75-79 aus den Fehlermeldungen schauen nach Zeile 8-12 im Code oben aus.
b) So sollte es bisher auch nicht funktioniert haben.
 
Hallo,

sorry für die Verwirrung, davor fehlt der Header der html Datei... den hab ich natürlich nicht mitgepostet... was meinst Du mit b) genau? Bisher bzw. bis mein Provider php4.X unterstützt hat, ging das GB...
 
Was ich meinte: Wenn das wirklich der ganze PHP-Code ist kann es auch mit PHP4 nicht funktioniert haben.
Beim weggeschnittenen Teil muss auch PHP dabei sein, nicht nur HTML
 
Rein theoretisch wäre es möglich, dass das mit PHP4 funktioniert hat. Nämlich dann, wenn register_globals aktiv war. Das erklärt eigentlich alles. In dem Falle ist es aber sehr mühselig, das wieder zum laufen zu bewegen. Nur als Einstiegspunkt: Formular-Daten, URL-Parameter und der gleichen waren bei "register_globals" = "on" im globalen Scope als Variablen verfügbar. Seit PHP 5.x gibt es diese Einstellung nicht mehr bzw. ist per default deaktiviert. Um das zum Laufen zu bewegen, müssen alle Variablen identifiziert werden, die bisher als register_global angelegt worden und über die qualifizierten Superglobalen $_GET, $_POST, $_COOKIE, usw. getauscht werden. Beispiel:

Was vorher $eintrag war, ist jetzt $_POST['eintrag'] (wenn das Formular mittels POST-Methode übertragen wurde).
Was vorher $loeschen war, ist jetzt $_GET['loeschen'] (wenn es sich um einen URL-Parameter in der Form http://seite.de/gaestebuch.php?loeschen=563 gehandelt hat).
 
Zurück