Jens: Gästebuch

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
}
?>

  1. 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

    1. 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

      1. 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.

        1. 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

          1. 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

            1. 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

            2. 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

              1. 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