PHP-Fehler im Gästebuch Code
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anwenden
code
date
datei
datenbank
datum
eintrag
email
fehler
http
inhalt
jemand
logische operatoren
manual
muster
mustermann
problem
url
zeichensatz
zerlegen
-
Hallo,
ich habe ein Gästebuch mit PHP erstellt. Die Beiträge werden in einem Textdokument gespeichert. Das Gästebuch besitzt auserdem noch einen Blätterfunktion und einen Spamschutz. Es funktioniert eigentlich, nur das Sonderzeichen (ö,ä,ü,..) nicht richtig mit htmlentities in entsprechende HTML-Codes umgewandelt werden (siehe Dateien)!
gaestebuch.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <meta content="de" http-equiv="Content-Language" /> <title>Gästebuch</title> <link href="style.css" rel="stylesheet" type="text/css" /> </head> <body> <h2>Gästebuch</h2> Wollen Sie einen Beitrag hinzufügen?<br /> <form action="neuerbeitrag.php" method="post"> <table style="width: 746px"> <tr> <td style="width: 334px">Ihr Name:<br /> <input name="eman" size="40" style="width: 240px" /> <input class="input" name="name" style="width: 70px" type="text" /> </td> <td style="width: 362px">E-Mail:<br /> <input name="liame" size="40" style="width: 240px" /> <input class="input" name="email" style="width: 70px" type="text" /> </td> </tr> <tr> <td colspan="2">Inhalt:<br /> <textarea name="tlahni" style="width: 598px; height: 60px;"></textarea> <textarea class="input" name="inhalt" style="width: 72px; height: 60px"></textarea><br /><br /> <input type="submit" value="Absenden" /></td> </tr> </table> </form> <hr /> <?php $seite = $_GET["seite"]; if(!isset($seite)) { $seite = 1; } $eintraege_pro_seite = 10; $beitrag = file("gaestebuch.txt"); $a =count($beitrag)-($seite-1)*$eintraege_pro_seite-1; $b=$a-$eintraege_pro_seite; for($a;$a>-1 AND $a > $b ; $a--) { //Ich denke, hier liegt das Problem $beitrag[$a] = htmlentities($beitrag[$a]); $zerlegen = explode("|", $beitrag[$a]); echo "<br/><table style=\"border-collapse: collapse;border: 1px solid #3399FF;background-color: #99CCFF;\" width=\"746px\"><tr><td><strong>"; If ($zerlegen[0] == "") { echo "Von $zerlegen[1]"; } else { echo "Von <a href=\"mailto:$zerlegen[0]\">$zerlegen[1]</a>"; } echo " am $zerlegen[2]</strong></td></tr><tr><td>$zerlegen[3]</td></tr></table><br/>"; } echo "<div style=\"text-align:center\">"; echo "<b>Seite:</b> "; for($s=0; $s < count($beitrag)/$eintraege_pro_seite; $s++) { $b = $s + 1; if($seite == $b) { echo " <b>$b</b> "; } else { echo " <a href=\"?seite=$b\">$b</a> "; } } echo "</div>"; ?> </body> </html>
style.css:
.input { display:none }
neuerbeitrag.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html dir="ltr" xmlns="http://www.w3.org/1999/xhtml"> <head> <meta content="text/html; charset=utf-8" http-equiv="Content-Type" /> <meta content="de" http-equiv="Content-Language" /> <title>Gästebuch - Eintrag - Kirchgemeinde Pobershau</title> </head> <body> <h2>Gästebuch - Neuer Beitrag</h2> <?php $spam=$_POST['name'].$_POST['email'].$_POST['inhalt']; if (!$spam=="") { echo "Sie sind ein Spammer!"; } else { $user = htmlentities($_POST["eman"]); $inhalt = htmlentities($_POST["tlahni"]); $inhalt = str_replace("\n", "<br>", $inhalt); $email = htmlentities($_POST["liame"]); if($inhalt == "" or $user == "") { echo "Sie müssen das Feld \"Namen\" und \"Inhalt\" ausfüllen"; } else { $datum= date("d.m.Y H:i:s"); $eintrag="$email|$user|$datum|$inhalt"; $datei = fopen("gaestebuch.txt", "a"); fwrite($datei, "\n".$eintrag); fclose($datei); echo "Ihr Eintrag wurde erfolgreich gespeichert!"; } } ?> <br/><br/> <a href="gaestebuch.php">Zurück zum Gästebuch</a> </body> </html>
Diese 2 Beiträge habe ich als Beispiel eingegeben:
Mustermann, muster@muster.de, Musterbeitrag
Müstermann. müster@müster.de, Ich habe alle ü´s in Muster durch ü ersetzt!
Das ist daraus geworden:
gaestebuch.txt:
muster@muster.de|Mustermann|31.12.2010 10:16:37|Musterbeitrag müster@müster.de|Müstermann|31.12.2010 10:19:03|Ich habe alle u´s in Muster durch ü ersetzt!
Es wäre sehr schön, wenn jemand den Fehler oder das Problem finden würde! Danke! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Der (bzw. die) Fehler ist/sind recht einfach:
1. du darfst htmlentities() nicht 2 mail anwenden - entweder in gaeatebuch.php oder in neuereintrag.php
2. du verwendest den Zeichensatz UTF-8, Standard ist jedoch ISO-8859-1. Gib den Zeichensatz zB so an:
(mehr Details in der PHP-Doku)$beitrag[$a] = htmlentities($beitrag[$a], ENT_COMPAT, "UTF-8");
Noch ein paar Verbesserungsvorschläge:
- Die Methode nl2br() erleichtert es, Zeilenumbrüche einzusetzen
- 'AND' und 'OR' sind als logische Operatoren nicht mehr sehr gebräuchlich; '&&' '||' haben sich da mehr durchgesetzt
- Du solltest in den Beiträgen dass '|' codieren, da sonst deine Dateistruktur durcheinander kommt, wenn jemand dieses Zeichen verwendet (die Verwendung einer Datenbank wäre noch besser)
- Es wäre sauberer, wenn du auch deine Formularbeschriftungen mit Entitäten codierst (zB <h2>Gästebuch</h2>)
-
Vielen Dank!
Eine Datenbank habe ich nicht benutzt, weil ich die bei meinen Webspace nicht dabei habe.
Falls jemand weitere Verbesserungsvorschläge hat können die gerne gepostet werden. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage