DeMaephis: History.Back() - Fehler ???

Hallo zusammen ich hab einen ganz eigenartigen Fehler produziert.

Es ist folgendes: Über Tage und Nächte hab ich mir mein eigenes Gästebuch zusammenprogrammiert. Und nun passiert dies:

Wenn ein Gast eine Angabe vergessen hat kommt eine Fehlerseite. Klickt er danach auf zurück kommt er wieder zum Formular Bildschirm... aber auf einen anderen Server landet man wieder auf der Gästebuch-Ansicht (man muß hier aber zweimal auf '<< Zurück' drücken)

Also um das zu verdeutlichen geb ich mal 2 Links an wo man das ausprobieren kann. (einfach auf Eintragen gehen... und nichts Angeben... und dann Bestätigen drücken... danach auf '<< Zurück')

Hier ist alle ok:
http://www.germangothic.de/fgbook/data/control/gbook.php

Hier NICHT:
http://www.grabnebelfuersten.de/GermanGothic/FGBOOK/data/control/gbook.php

Ich hoffe ihr könnt mir da weiterhelfen oder mir ersteinmal mitteilen wo das Problem überhaupt liegt.

Vielen Dank für eure Hilfe.

  1. Guten Abend!

    Du könntest zu aller erst mal überprüfen, ob register_globals auf dem einen Server on und auf dem anderen möglicherweise off ist... (phpinfo())
    Dein Skript merkt sich ja, welche Variablen (Name, Beitrag) bereits gesetzt wurden und anscheinend auch, bei welchem Formular man sich gerade befindet (Zum eintragen ist ja nur eine php-Datei da, die mehrere Forms generieren kann.) - sollte dies der Fall sein, musst du entweder deine Variablenübergabe säubern oder eben register_globals auf dem Server der laufenden Version angleichen. (Eleganter wäre sicherlich erstere Version :) )

    Robin

    1. Also ich weiß jetzt das auf dem server wo es nicht funktioniert register_globals auf 'on' geschaltet ist.

      Trotzdem bleibt es bei dem Fehler auch wenn ich die Variablen die das verursachen am Ende wieder leere..:

      $_POST['newentry'] = '';
      unset($new_entry);

      ,d.h. wenn es überhaupt so geht ?!

      1. Hi!

        Ich vermute, es gibt noch eine Variable, die der add_entry.php mitteilt, welches Formular ausgegeben werden soll?
        Überprüfe mal, wie und wo die gesetzt wird!!

        Robin

        1. Hi!

          Ich vermute, es gibt noch eine Variable, die der add_entry.php mitteilt, welches Formular ausgegeben werden soll?
          Überprüfe mal, wie und wo die gesetzt wird!!

          Also ich hab das Programm ja geschrieben und es gibt nur eine IF Abfrage wo überprüft wird ob nun ein neuer Beitrag hinzugefügt werden soll :

          $new_entry = $_POST['newentry'];

          if ($new_entry == '')
          {
          ...
          }
          else
          {
          check_entry(); <- überprüft Eintrag auf Vollständigkeit
          ...
          }

          Ich hab mal auf meinen eigenen Server auch register_globals auf 'On' geschaltet und da Funktioniert es auch ohne ein Problem...
          alles etwas eigenartig !?

          1. Hi!

            Ok, neuer Ansatz - PHP-Versionen?
            $_POST[''] gibt es erst ab Version 4.X.schalgmichtot und wenn PHP $_POST nicht kennt ist newentry immer ''; versuche es bei der kaputten Version mal mit...
            Ahhhh, hab's noch irgendwo gefunden:

            //fix autoglobals for php-version <= 4.1:
            if (isset($HTTP_POST_VARS)) $_POST = & $HTTP_POST_VARS;
            if (isset($HTTP_GET_VARS)) $_GET = & $HTTP_GET_VARS;
            if (isset($HTTP_SESSION_VARS)) $_SESSION = & $HTTP_SESSION_VARS;

            Kannste natürlich für $_SERVER etc. noch erweitern.

            Robin

  2. hallo DeMaephis,

    folgendes:
    -du rufst ja über den submit-button "Hinzufügen" control/add_entry.php auf.
    -dann wird ein unvollständiger eintrag gemacht.
    -und es wird wieder control/add_entry.php aufgerufen.
    -in der history steht nun 2x control/add_entry.php.
    -somit musst du auch 2x auf zurück klicken und du kommst wieder auf die "Gästebuchseite".

    -besser wäre, wenn bei einer fehlerhaften eingabe du den anwender darauf hinweist und darunter das formular mit den schon ev. teilweise ausgefüllten feldern wieder bringst.

    -du musst also die schon eingetragenen felder auslesen und wieder ins formular einsezten.

    -das ist die sicherste variante.

    -die funktion history.back() ist einfach zu anfällig.

    gruss LenaLuna