Es gibt eine ganz üble Nebenwirkung von PHP, in Verbindung mit dem Weg, wie Gambio Eingabe-Felder erstellt…. Ein Kunde hatte bei der Bearbeitung von Bestellungen in dem Bereich der "Zusammenfassung" nicht die Werte des jeweiligen Eintrags stehen, sondern immer den gleichen Text Wert... Diese Eingabe-Felder werden mit "xtc_draw_input_field('value',$ototal['value'])" erzeugt. Beim Debuggen hatte "$ototal['value']" aber immer den gewünschten Wert, so dass ich mir die "xtc_draw_input_field"-Funktion angesehen habe. Darin gibt es den folgenden Code: PHP: if ( ($GLOBALS[$name]) && ($reinsert_value) ) { $field .= ' value="' . htmlspecialchars(trim($GLOBALS[$name])) . '"'; } wobei "$name" hier den Wert "value" hat. Und siehe da, "$GLOBALS['value']" hatte genau den Wert, der in allen Feldern angezeigt wurde.... Und ohne, dass ich "$GLOBALS['value']" explizit definiert hatte. Weiteres Debugging ergab dann, dass "$GLOBALS['value']" bei Ausführung des Befehls PHP: $value=$irgendwas gesetzt wurde, obwohl die PHP-Config-Variable "register_globals" auf "Off" steht! PHP: if ( ($GLOBALS[$name]) && ($reinsert_value) ) { $field .= ' value="' . htmlspecialchars(trim($GLOBALS[$name])) . '"'; } sollte man m.E. aus der "xtc_draw_input_field"-Funktion entfernen, ich habe da eh' noch nie einen tieferen Sinn gesehen, und es kann solche üblen Nebenwirkungen erzeugen.
Moin, register_globals bezieht sich nur darauf, ob Werte aus Environment/GET/POST/Cookies/Server in den globalen Namensraum übernommen werden. (Dieser Kram verschwindet zum Glück mit PHP 5.4 endgültig.) Im eigentlichen PHP-Code können globale Variablen immer gesetzt werden.
Der Punkt ist ja, dass diese Variable eben nicht explizit, sondern durch eine Nebenwirkung gesetzt wurde. Und das Problem habe ich unter 5.4 hier auch noch.
Du schriebst doch selbst, dass es irgendwo eine Zuweisung der Form PHP: $value = $irgendwas; gibt. Wenn diese Zuweisung im globalen Namensraum geschieht, ist das semantisch identisch mit PHP: $GLOBALS['value'] = $irgendwas; Desweiteren ist PHP: function beispiel() { global $value; echo $value; } im Prinzip das gleiche wie PHP: function beispiel() { echo $GLOBALS['value']; } Was ich meine: Mit register_globals hat das alles nichts zu tun. Das ist einfach nur das normale Verhalten des globalen Namensraumes in PHP. Problematisch ist hier, das xtc_draw_input_field() überhaupt Daten aus dem globalen Namensraum verwendet.