Gästebuch - Wo ist der Fehler?
Chaosweib
- php
Hallo!
Ich habe nur ein kleinwenig Ahnung mit php-Sprache. Jedoch strenge ich mich sehr an. Hier sind meine Code:
gaestebuchtest.html:
...
<title>Gäsetbuchtest</title>
</head>
<body>
<form action="file:///C:/Homepage/Gaestebuchtest2/gb.php" method="post">
<table
style="width: 455px; height: 247px; text-align: left; margin-left: auto; margin-right: auto;"
border="1" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td>Name:</td>
</tr>
<tr>
<td><input size="40" maxlength="40" name="name"></td>
</tr>
<tr>
<td>Ihr Eintrag:</td>
</tr>
<tr>
<td><textarea rows="5" cols="50" name="eintrag"></textarea></td>
</tr>
<tr>
<td><input value="Absenden" type="submit"></td>
</tr>
</tbody>
</table>
</form>
...
gb.php:
...
<?php
$daten=$_POST[eintrag]."<br>von<br>"
$daten=$_POST[name]."<br><br>";
$eintragen = "eintragen.txt";
$datei = fopen($eintragen,"a");
fwrite($datei, $daten);
?>
Eintrag erfolgreich.
<a href="guestbook.php">Zurück zum Gästebuch</a>
...
guestbook.php:
...
<center><h2>Mein Gästebuch</h2>
<a href="gaestebuchtest.html">Ins Gästebuch eintragen</a></center>
<?php
$datenbank = "daten.dat"; $datei = fopen($datenbank,"r");
fpassthru($datei);
?>
...
Ich habe einen Teil der obige HTML-Code "gaestebuchtest.html" von diese http://de.selfhtml.org/perl/module/cgi.htm#formularverarbeitung@title=Seiteverwendet und die restliche php-Code habe ich von der phpbox.de geholt. So, ich habe ausgetestet, komme nicht weiter. Wenn ich auf die Schaltfläche "Absenden" klicke, kommt keine saubere Seite, dann erscheint so:
"von
" $daten=$_POST[name]."
"; $eintragen = "eintragen.txt"; $datei = fopen($eintragen,"a"); fwrite($datei, $daten); ?> Eintrag erfolgreich. Zurück zum Gästebuch"
Wo ist der Fehler?
Gruß Chaosweib
Ich kann Dir schon mal sagen, was behoben werden muss:
a) <form action="file:///C:/Homepage/Gaestebuchtest2/gb.php" method="post">
Da ist als Pfad Deine Festplatte angegeben. Das ganze C:/-Gedöhns muss weg.
b) Die Textdateien brauchen die richtigen Rechte, damit Daten in sie geschrieben werden können. 777 geht, kann aber sein, dass es mit 666 auch getan ist.
Probier das mal, vielleicht reicht das schon.
Gruß
Hallo Friedel!
b) Die Textdateien brauchen die richtigen Rechte, damit Daten in sie geschrieben werden können. 777 geht, kann aber sein, dass es mit 666 auch getan ist.
Wo denn? Wo kann ich ändern?
Gruß Chaosweib
Hallo Chaosweib,
b) Die Textdateien brauchen die richtigen Rechte, damit Daten in sie geschrieben werden können. 777 geht, kann aber sein, dass es mit 666 auch getan ist.
Wo denn? Wo kann ich ändern?
Unter der Annahme, dass es sich beim Webserver um einen
entfernten Server handelt, der auf Linux/Unix o.ä. läuft
und auf den Du per FTP zugreifst:
Mach Dich schlau, wie Du in Deinem FTP-Client die Dateirechte
setzen kannst. Das Stichwort lautet: CHMOD. Such z.B. so:
http://www.google.com/search?q=chmod+ftp+[Name Deines FTP-Clients]
Hintergrund-Infos:
http://de.wikipedia.org/wiki/Chmod
http://de.wikipedia.org/wiki/Unix-Dateirechte
HTH, mfg
Thomas
Hallo Thomas!
Unter der Annahme, dass es sich beim Webserver um einen
entfernten Server handelt, der auf Linux/Unix o.ä. läuft
und auf den Du per FTP zugreifst:
Mach Dich schlau, wie Du in Deinem FTP-Client die Dateirechte
setzen kannst. Das Stichwort lautet: CHMOD. Such z.B. so:
http://www.google.com/search?q=chmod+ftp+[Name Deines FTP-Clients]Hintergrund-Infos:
http://de.wikipedia.org/wiki/Chmod
http://de.wikipedia.org/wiki/Unix-Dateirechte
Genau, das mit dem Befehl "chmod" habe ich vor kurzem auf diese Seite gelesen.
Vielen Dank für den Link. Werd nochmal ausprobieren. Also, stimmt meine Code fast alles?
Liebe Grüße
Chaosweib
Hallo,
Genau, das mit dem Befehl "chmod" habe ich vor kurzem auf diese Seite gelesen.
Wie ChrisB schon geschrieben hat, brauchst Du _nicht_ mit PHP
und der Funktion chmod() die Dateirechte zu setzen.
(Dazu müsste die Datei überhaupt schon für PHP schreibbar sein.)
Stattdessen empfehle ich Dir eben, mit dem FTP-Programm,
mit dem Du die Dateien auf den Webserver hochlädst,
die Rechte an der Text-Datei mit CHMOD zu setzen.
Das ist viel einfacher und bequemer, und Du musst
es nur einmal machen (nämlich nach dem Hochladen
der Datei). Den PHP-Befehl chmod() brauchst Du nicht.
mfg Thomas
Hallo,
Genau, das mit dem Befehl "chmod" habe ich vor kurzem auf diese Seite gelesen.
Wie ChrisB schon geschrieben hat, brauchst Du _nicht_ mit PHP
und der Funktion chmod() die Dateirechte zu setzen.
(Dazu müsste die Datei überhaupt schon für PHP schreibbar sein.)Stattdessen empfehle ich Dir eben, mit dem FTP-Programm,
mit dem Du die Dateien auf den Webserver hochlädst,
die Rechte an der Text-Datei mit CHMOD zu setzen.
Das ist viel einfacher und bequemer, und Du musst
es nur einmal machen (nämlich nach dem Hochladen
der Datei). Den PHP-Befehl chmod() brauchst Du nicht.mfg Thomas
Ich habe einen winzigkleinen Fehler in der Code entdeckt!
CHMOD hab ich weggelassen.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-15"
http-equiv="Content-Type">
</head>
<body>
<?php
$daten=$_POST[eintrag]."<br>von<br>" <---- ";" hat gefehlt!!!
$daten=$_POST[name]."<br><br>";
$eintragen = "eintragen.txt";
$datei = fopen($eintragen,"a");
fwrite($datei, $daten);
?>
Eintrag erfolgreich.
<a href="guestbook.php">Zurück zum Gästebuch</a>
</body>
</html>
Dann hat es funktioniert! Jetzt auf der nächste Seite ist wieder ein Problem aufgetreten, aber das kriege ich schon im Griff.
hallo,
Dann hat es funktioniert! Jetzt auf der nächste Seite ist wieder ein Problem aufgetreten, aber das kriege ich schon im Griff.
Setz mal nach <?php
error_reporting(E_ALL);
Guck dir die Fehlermeldungen an, die damit ausgegeben werden. Zumindest mit "on line n" kannst du den Fehler halbwegs lokalisieren.
Geh dann zuerst die einfachsten Wege. Ist das Semikolon am Ende der Zeile vorhanden (wenn nötig) oder zuviel, hast du in Variablennamen Tipfehler, oder oder oder.
hallo,
Dann hat es funktioniert! Jetzt auf der nächste Seite ist wieder ein Problem aufgetreten, aber das kriege ich schon im Griff.
Setz mal nach <?php
error_reporting(E_ALL);
Guck dir die Fehlermeldungen an, die damit ausgegeben werden. Zumindest mit "on line n" kannst du den Fehler halbwegs lokalisieren.
Geh dann zuerst die einfachsten Wege. Ist das Semikolon am Ende der Zeile vorhanden (wenn nötig) oder zuviel, hast du in Variablennamen Tipfehler, oder oder oder.
Ok, werd auf jeden Fall probieren. Danke Dir für den Rat!
Liebe Grüße
Chaosweib
Ps.: Ich glaub, macht mir langsam Spass ^^.
Ich habe das fertige Gericht runtergeladen, könnt ihr auf meine Seite sehen, ist nicht alles fertig. Ich habe zwei Problempunkte. Das einem ist die Navigationsleiste. In der Navigationsleiste seht ihr die blaue Schrift, wenn ich mit dem Maus rüberfahre, zeigt rosa und dann hellgrün. Eigentlich soll es keine blaue Schrift zeigen, sondern es muss onmouseout="this.style.color='rgb(255, 204, 255)'" (rosa) und onmouseover="this.style.color='rgb(153, 255, 153)'" (hellgrün) stehen. Wie mache ich bloss die blaue Schrift weg?!?
Und das zweite Problem, wenn ich auf "Neuen Gästebucheintrag hinzufügen" klicke, sieht man aussenrum einen breiten, weissen Rahmen und das sieht nicht schön aus =(. Wie verkleinere ich ihn, daß er schön in der Mitte sitzt?
Gruß Chaosweib
Wie mache ich bloss die blaue Schrift weg?!?
Nutze CSS statt JS
Übrigens:
* = optionale Felder
...ist gegen die Konvention, Pflichtfelder direkt nach dem label mit einem auffälligen Stern zu kennzeichnen.
<link> Elemente gehören in den Head, und
http://users.skynet.be/mgueury/mozilla/ gehört zu (d)einem Firefox.
Und das zweite Problem, wenn ich auf "Neuen Gästebucheintrag hinzufügen" klicke, sieht man aussenrum einen breiten, weissen Rahmen und das sieht nicht schön aus =(. Wie verkleinere ich ihn, daß er schön in der Mitte sitzt?
Kann ich nicht nachvollziehen.
mfg Beat
http://users.skynet.be/mgueury/mozilla/ gehört zu (d)einem Firefox.
Ah, Klasse. Genau, das brauch ich.
hallo...
dein code schaut ziemlich ungeparst aus bzw. du hast wohle kein php parser auf deinem computer.. desshalb wird dir nur der php code angezeigt.. also: php fähigen server beschaffen...
lg
hallo...
dein code schaut ziemlich ungeparst aus bzw. du hast wohle kein php parser auf deinem computer.. desshalb wird dir nur der php code angezeigt.. also: php fähigen server beschaffen...
lg
Das stimmt.
Es klappt immer noch nicht =(.
Ihr könnt meine Seite http://damaris-creative-arts.de/Guestbooktest/gb.php testen. Schaut immer noch nicht so gut aus.
Hier nochmal mein Code von gb.php:
<?php
$daten=$_POST[eintrag]."<br>von<br>"
$daten=$_POST[name]."<br><br>";
chmod ($eintragen.txt, 704); <---- Ist das richtig?
$eintragen = "eintragen.txt";
$datei = fopen($eintragen,"a");
fwrite($datei, $daten);
?>
Eintrag erfolgreich.
<a href="guestbook.php">Zurück zum Gästebuch</a>
</body>
</html>
Ach apropo, mein ftp-Server gehört zu Hetzner Online. Die chmod Einstellung, dank an Thomas, den er mir den Link weiter geholfen hatte, habe ich diese Seite probiert, klappt irgendwie nicht.
Hi,
Es klappt immer noch nicht =(.
Das taug als Problembeschreibung *gar* *nichts*.
Ihr könnt meine Seite http://damaris-creative-arts.de/Guestbooktest/gb.php testen. Schaut immer noch nicht so gut aus.
Dort meldet PHP den folgenden Fehler - warum zitierst du diesen nicht, statt nur "funzt nich" zu sagen?
Parse error: syntax error, unexpected T_VARIABLE in /usr/www/users/damari/Guestbooktest/gb.php on line 13
Hier nochmal mein Code von gb.php:
Das kann nicht wirklich der Code sein - denn da müsste PHP schon früher einen Fehler melden -
<?php
$daten=$_POST[eintrag]."<br>von<br>"
$daten=$_POST[name]."<br><br>";
chmod ($eintragen.txt, 704); <---- Ist das richtig?
Selbst wenn der Wert passen sollte, ist es unsinnig, die Rechte bei jedem Scriptaufruf zu setzen - das macht man wenn überhaupt nötig ein mal, beim erstellen der Datei.
MfG ChrisB
Hallo nochmal,
$daten=$_POST[eintrag]."<br>von<br>"
$daten=$_POST[name]."<br><br>";
Der Schlüssel der Variablen muss in Anführungszeichen stehen:
$_POST['name'] statt $_POST[name].
Die 1. Zeile müsste mit einem Semikolon (;) aufhören.
In der 2. Zeile überschreibst Du den Inhalt der Variable.
Um weiteren Inhalt an eine String-Variable dranzuhängen,
müsstest Du es mit .= schreiben, also so:
$daten=$_POST['eintrag']."<br>von<br>";
$daten.=$_POST['name']."<br><br>";
Oder gleich so:
$daten=$_POST['eintrag']."<br>von<br>".$_POST['name']."<br><br>";
Allerdings ist das ganze Vorgehen sehr gefährlich.
Du übernimmst einfach das, was der Benutzer eingibt,
und schreibst es ohne Prüfung in die Daten-Datei,
welche Du später ebenfalls ohne Prüfung den Besuchern
auslieferst.
Beschäftige Dich mal grundsätzlich mit dem Thema Sicherheit.
Sinnvoll wäre zumindest mal ein strip_tags().
Und damit gewisse Sonderzeichen (<,>,",&) am Ende
(wenn das Gästebuch angezeigt wird) korrekt angezeigt
werden, musst Du sie mit htmlspecialchars() umwandeln.
/* Variablen putzen: */
$eintrag2=htmlspecialchars(strip_tags($_POST['eintrag']));
$name2=htmlspecialchars(strip_tags($_POST['name']));
/* String, der gespeichert werden soll, zusammensetzen: */
$daten="<p>Eintrag von $name2<br>$eintrag2</p>\n";
$eintragen = "eintragen.txt";
$datei = fopen($eintragen,"a");
Hier fehlt eine saubere Fehlerbehandlung.
Du musst zuerst kontrollieren, ob die Datei eintragen.txt
überhaupt existiert und ob sie beschreibbar ist.
Das erledigt die Funktion is_writable().
Erst wenn diese Prüfung erfolgreich war,
solltest Du die Datei mit fopen() öffnen.
Und auch dann wieder: Testen ob das Öffnen und Schreiben
erfolgreich war, andernfalls Fehlermeldung (oder so).
Also z.B. so etwas (Code ungetestet):
if (is_writable($eintragen))
{
$datei = fopen($eintragen,"a");
if ($datei===false)
{ echo "Fehler - Datei konnte nicht geöffnet werden."; }
else
{
if (fwrite($datei,$daten)===false)
{ echo "Fehler - Daten können nicht gespeichert werden."; }
else
{ echo "Daten wurden erfolgreich gespeichert."; }
fclose($datei);
}
}
$datenbank = "daten.dat"; $datei = fopen($datenbank,"r");
fpassthru($datei);
Hier heisst die Daten-Datei plötzlich daten.dat - oben hiess sie
eintragen.txt - das kann nicht gutgehen...
Ausserdem ist $datenbank ein etwas unglücklicker Dateiname
für eine normale Text-Datei...
Auch hier wieder:
Vor dem öffnen prüfen, ob die Datei überhaupt existiert - z.B.
mit file_exists() - dann erst mit fopen() öffnen und mit
fpassthru() den Inhalt durchschleusen.
Alternativ könnte man den Inhalt auch mit readfile() ausgeben.
(Das hat den Vorteil, dass man sich das fopen() sparen kann.)
$ausgaberesultat=readfile($datenbank);
if ($ausgaberesultat==false)
{ echo "Datei mit den Einträgen konnte nicht eingelesen werden."; }
Wenn ich auf die Schaltfläche "Absenden" klicke, kommt keine saubere Seite, dann erscheint so:
"von
" $daten=$_POST[name].""; $eintragen = "eintragen.txt"; $datei = fopen($eintragen,"a"); fwrite($datei, $daten); ?> Eintrag erfolgreich. Zurück zum Gästebuch"
Wo ist der Fehler?
Dein Webserver kann offenbar kein PHP, oder er wendet es zumindest
bei dieser Datei (gb.php) nicht an.
Wende Dich an Deinen Webhosting-Anbieter, um zu erfahren, was Du
machen musst, damit PHP läuft.
(Dir ist ja hoffentlich schon klar, dass PHP auf Deinem eigenen
Rechner nicht funktioniert, es sei denn, Du hast dort drauf
einen Webserver am laufen, der PHP kann...)
HTH, mfg
Thomas
Moin!
Ich habe nur ein kleinwenig Ahnung mit php-Sprache. Jedoch strenge ich mich sehr an.
Das reicht aber noch nicht.
Dein bisheriges Arbeitsergebnis ist gefährlich! Ich habe dir ein kleinwenig von der Gefährlichkeit gerade in Form eines netten Javascriptes in deine Seite integriert (der erste Versuch wurde von Magic Quotes vereitelt, aber das hält niemanden auf, wie du sehen solltest).
Du hast den elementarsten Arbeitsschritt bei der Datenverarbeitung nicht beachtet: Kontextwechsel erfordern unter Umständen eine andere Darstellung für gewisse Zeichen.
Dein bisher einziger Kontextwechsel ist von Text (im Texteingabefeld) zu HTML (in der Datenausgabe).
Der verlinkte Artikel sagt dir, was zu tun ist. Lies ihn!
Und entscheide dich eventuell doch lieber, ein fertiges Gästebuchskript einzusetzen und es "nur" anzupassen, wenn du es ernsthaft online einsetzen willst.
Für deine Programmierexperimente hingegen solltest du deine Skripte niemals ohne Zugangskontrolle öffentlich online stellen. Entweder du installierst dir auf deinem eigenen Rechner z.B. XAMPP (Apache, PHP, Perl und MySQL), oder du erstellst auf deinem Online-Server wenigstens einen .htaccess-Verzeichnisschutz mit Passwort.
- Sven Rautenberg
Moin!
Ich habe nur ein kleinwenig Ahnung mit php-Sprache. Jedoch strenge ich mich sehr an.
Das reicht aber noch nicht.
Dein bisheriges Arbeitsergebnis ist gefährlich! Ich habe dir ein kleinwenig von der Gefährlichkeit gerade in Form eines netten Javascriptes in deine Seite integriert (der erste Versuch wurde von Magic Quotes vereitelt, aber das hält niemanden auf, wie du sehen solltest).
Du hast den elementarsten Arbeitsschritt bei der Datenverarbeitung nicht beachtet: Kontextwechsel erfordern unter Umständen eine andere Darstellung für gewisse Zeichen.
Dein bisher einziger Kontextwechsel ist von Text (im Texteingabefeld) zu HTML (in der Datenausgabe).
Der verlinkte Artikel sagt dir, was zu tun ist. Lies ihn!
Und entscheide dich eventuell doch lieber, ein fertiges Gästebuchskript einzusetzen und es "nur" anzupassen, wenn du es ernsthaft online einsetzen willst.
Für deine Programmierexperimente hingegen solltest du deine Skripte niemals ohne Zugangskontrolle öffentlich online stellen. Entweder du installierst dir auf deinem eigenen Rechner z.B. XAMPP (Apache, PHP, Perl und MySQL), oder du erstellst auf deinem Online-Server wenigstens einen .htaccess-Verzeichnisschutz mit Passwort.
- Sven Rautenberg
Vielen Dank, Sven. Ich werde nachher dein Text in aller Ruhe lesen, bin in moment beschäftigt.
Liebe Grüße
Chaosweib
Moin!
Ich habe nur ein kleinwenig Ahnung mit php-Sprache. Jedoch strenge ich mich sehr an.
Das reicht aber noch nicht.
Dein bisheriges Arbeitsergebnis ist gefährlich! Ich habe dir ein kleinwenig von der Gefährlichkeit gerade in Form eines netten Javascriptes in deine Seite integriert (der erste Versuch wurde von Magic Quotes vereitelt, aber das hält niemanden auf, wie du sehen solltest).
Du hast den elementarsten Arbeitsschritt bei der Datenverarbeitung nicht beachtet: Kontextwechsel erfordern unter Umständen eine andere Darstellung für gewisse Zeichen.
Dein bisher einziger Kontextwechsel ist von Text (im Texteingabefeld) zu HTML (in der Datenausgabe).
Der verlinkte Artikel sagt dir, was zu tun ist. Lies ihn!
Und entscheide dich eventuell doch lieber, ein fertiges Gästebuchskript einzusetzen und es "nur" anzupassen, wenn du es ernsthaft online einsetzen willst.
Für deine Programmierexperimente hingegen solltest du deine Skripte niemals ohne Zugangskontrolle öffentlich online stellen. Entweder du installierst dir auf deinem eigenen Rechner z.B. XAMPP (Apache, PHP, Perl und MySQL), oder du erstellst auf deinem Online-Server wenigstens einen .htaccess-Verzeichnisschutz mit Passwort.
- Sven Rautenberg
So, ich hab dein Text alles durchgelesen und verstanden. Ja, die php-Sprache meines Wissens reicht nicht aus, hast du recht. Ich weiss, wie gefährlich das ist, war ja nur ein Test. Ich denke, sollte ich dann doch lieber ein fertiges Gästebuch holen. XAMPP hört sich interessant an, würd auf jeden Fall gern testen. Leider verwende ich keine gute Leitung und benutze gerade über das Mobilfunk Stick, da bei uns kein DSL verfügbar ist und somit kann ich kein XXAMP runterladen =(. Kuhkaff halts -.-.