Gästebuch
Jens
- php
Hallo PHP Freaks,
leider bin ich noch ziemlicher Neuling in PHP und habe mir erst gestern mein eigenen Server eingerichtet. Jetzt meine Frage:
Ich habe ein Gästebuch-Tutorial nachgebaut aber leider funktioniert das nicht so wie ich will. Ist nun das Scrip falsch oder irgend eine Einstellung in meiner php.ini oä. Das Script trägt keine Einträge in die Textdatei ein und überprüft auch nicht ob die Felder ausgefüllt sind.
Danke schon mal für die Hilfe
Hier das Script:
<?php
if ($action == "add"){
if ($name == "" || $mail == "" || $text == ""){
echo "<b>Du hast nicht alle Felder ausgefüllt !</b><br>";
echo "Klicke auf den Backbutton deines Browsers";
}
else{
$fp = fopen("gaestebuch.txt","r+");
$inhalt= fread($fp,filesize("gaestebuch.txt"));
fclose($fp);
if ($www == ""){
$eintrag = "$inhalt<a href="mailto:$mail">$name</a><br>$text";
}
else{
$eintrag = "$inhalt<a href="mailto:$mail">$name</a><br><a href="$www">$www</a>$text<hr><br><br>";
}
$datei = fopen("gaestebuch.txt","w+");
fputs($datei,$eintrag);
fclose($datei);
echo "Danke <i>$name</i> für deinen Eintrag";
}
}
else{
?>
<font face="Verdana" size="1">
<b>Eintragen in mein Gästebuch</b><br>
<form action="eintragen.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">
</form>
</font>
<?php
}
?>
Bei mir geht's!
Was bekommst du denn fuer einen Fehler?
Du musst natuerlich erstmal Schreibrechte fuer die Datei gaestebuch.txt haben.
Und dein PHP-Script muss tatsaechlich 'eintragen.php' heissen.
Sonst weiss ich jetzt auch nich...
Gruss, Eddie
Hi Eddie,
danke schon maln für die Info, dass es nicht am Script liegt.
Aber was meinst du mit Schreibrechte (wie gesagt hab den Server erst gestern eingerichtetn und so gut wie keine Ahnung).
MfG
Jens
Aber was meinst du mit Schreibrechte
Dann arbeitest du wohl mit Windows?
Da solltest du das Problem nicht haben (die Datei muss sowohl lesbar, als auch schreibbar sein, was unter Windows normalerweise gegeben ist.)
Bekommst Du denn irgendwelche Fehler?
Bei mir heisst es einfach nur:
"Danke Eddie für deinen Eintrag"
Aem und ansonsten: ich finds immer ein bisschen nervig, wenn ich meine eMail-Adresse angeben muss (wenns nicht wirklich Sinn macht) - fuer mich immer ein willkommener Grund Seiten wegzuklicken.
Aber was meinst du mit Schreibrechte
Dann arbeitest du wohl mit Windows?
Da solltest du das Problem nicht haben (die Datei muss sowohl lesbar, als auch schreibbar sein, was unter Windows normalerweise gegeben ist.)
Bekommst Du denn irgendwelche Fehler?
Bei mir heisst es einfach nur:
"Danke Eddie für deinen Eintrag"
Aem und ansonsten: ich finds immer ein bisschen nervig, wenn ich meine eMail-Adresse angeben muss (wenns nicht wirklich Sinn macht) - fuer mich immer ein willkommener Grund Seiten wegzuklicken.
Also bei mir kommt "Notice: Undefined variable: action in ..."(if ($action == "add"){)", und sonst tut sich garnichts ausser dass beim abschicken mein Formular gelöscht wird. Liegt es vielleich doch an irgend einer Einstellung in php.ini oder an der php Version ?
PHP Version 4.2.2
System Windows NT 5.1 build 2600
Build Date Jul 21 2002 23:51:43
Server API CGI
Virtual Directory Support enabled
Configuration File (php.ini) Path e:\php-4.2.2-win32\php.ini
Debug Build no
Thread Safety enabled
MfG
Jens
Moin!
Also bei mir kommt "Notice: Undefined variable: action in ..."(if ($action == "add"){)", und sonst tut sich garnichts ausser dass beim abschicken mein Formular gelöscht wird. Liegt es vielleich doch an irgend einer Einstellung in php.ini oder an der php Version ?
PHP Version 4.2.2
Sag das doch gleich!
PHP hat seit Version 4.1 einiges an der Art der Variablenübergabemöglichkeit geändert und seit Version 4.2 gewisse Einstellungen neu gesetzt, die bei alten Skripten zu Fehlern führen.
Dein Problem: Du willst direkt auf dir übergebenen Parameter zugreifen, beispielsweise mit $action.
In PHP ist aus Sicherheitsgründen mittlerweile abgeschaltet, dass Parameter und Formulardaten direkt in Variablennamen umgesetzt werden. Deshalb musst du deine Variablennamen umändern.
Alle Daten, die per GET übergeben werden (URL-Parameter oder GET-Formular), stehen im Hash $_GET, alle Daten, die per POST kommen (POST-Formulare) stehen in $_POST, die Cookies stehen in $_COOKIE, hochgeladene Dateiinformationen in $_FILES, die Serverinformationen in $_SERVER, und die Umgebungsvariablen in $_ENV.
Mit anderen Worten: Wenn du ein POST-Formular hast, dann greife auf $_POST zu. Das Feld "Action" heißt $_POST['action'] anstatt $action, und so weiter für alle anderen Variablen. Danach sollte es funktionieren.
- Sven Rautenberg
Moin!
Also bei mir kommt "Notice: Undefined variable: action in ..."(if ($action == "add"){)", und sonst tut sich garnichts ausser dass beim abschicken mein Formular gelöscht wird. Liegt es vielleich doch an irgend einer Einstellung in php.ini oder an der php Version ?
PHP Version 4.2.2
Sag das doch gleich!
PHP hat seit Version 4.1 einiges an der Art der Variablenübergabemöglichkeit geändert und seit Version 4.2 gewisse Einstellungen neu gesetzt, die bei alten Skripten zu Fehlern führen.
Dein Problem: Du willst direkt auf dir übergebenen Parameter zugreifen, beispielsweise mit $action.
In PHP ist aus Sicherheitsgründen mittlerweile abgeschaltet, dass Parameter und Formulardaten direkt in Variablennamen umgesetzt werden. Deshalb musst du deine Variablennamen umändern.
Alle Daten, die per GET übergeben werden (URL-Parameter oder GET-Formular), stehen im Hash $_GET, alle Daten, die per POST kommen (POST-Formulare) stehen in $_POST, die Cookies stehen in $_COOKIE, hochgeladene Dateiinformationen in $_FILES, die Serverinformationen in $_SERVER, und die Umgebungsvariablen in $_ENV.
Mit anderen Worten: Wenn du ein POST-Formular hast, dann greife auf $_POST zu. Das Feld "Action" heißt $_POST['action'] anstatt $action, und so weiter für alle anderen Variablen. Danach sollte es funktionieren.
- Sven Rautenberg
Danke für den Tipp, werde es ändern und hoffen, dass es funktioniert.
MfG
Jens
Gibt es eigentlich einen Unterschied zwischen $_GET und $HTTP_GET_VARS["Variable"] bezüglich REGISTER_GLOBALS = off?
Ich benutze nämlich letzteres und mein Provider hat noch PHP 4.1.
Die Frage ist ob ich dann alles umschreiben muss für 4.2
Gruß,
Henning
Hallo,
Gibt es eigentlich einen Unterschied zwischen $_GET und $HTTP_GET_VARS["Variable"] bezüglich REGISTER_GLOBALS = off?
Register_globals on/off spielt bei $_GET bzw. $HTTP_GET_VARS keine Rolle. Der Unterschied ist folgender: $_GET gibt's erst ab PHP 4.1 und ist Superglobal, d.h. man kann den Array in jeder Funktion einfach so verwenden. $HTTP_GET_VARS gibt's schon länger (weiß nicht genau wann) und ist _nicht_ superglobal (müsste mit global importiert werden) und wird es ab PHP 4.3 _nicht mehr_ geben.
Ich benutze nämlich letzteres und mein Provider hat noch PHP 4.1.
Die Frage ist ob ich dann alles umschreiben muss für 4.2
Von 4.1 auf 4.2 musst Du gar nichts umschreiben. Aus Deiner oberen Frage lese ich ab, dass Du $HTTP_GET_VARS verwendest. Das macht erst ab 4.3 Probleme. Aber 4.1 unterstützt schon $_GET, nur 4.0 nicht, daher solltest Du sie umschreiben, damit keine Probleme in der Richtung auftreten.
Grüße,
Christian