Formularauswertung
Andreas
- php
0 Tom0 Andreas
0 Thomas Luethi0 Andreas
Hallo,
stehe total auf dem Schlauch und komme nicht weiter.
Folgendes Problem:
Datei index.php, über Tabelle aufgeteilt in oben, links und rechts.
In der Zelle "rechts" frage ich über if($action='') die Aktionen ab,
und lade dann die entsprechende Datei in den rechten Bereich: require_once("Datei.php);
Soweit klappt alles, nur bei der einen Aktion nicht.
Bei Aktion = Profil lade ich profil.php:
print "<FORM ACTION="index.php?action=profilsave" METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA">\n";
...
print "<INPUT TYPE="SUBMIT" CLASS="ibut" name="action" VALUE="Ändern">\n";
in der index.php habe ich dann wieder die action-Abfrage stehen:
if($action=='profilsave'){
echo "test";
}
Doch genau dieser Schritt klappt nicht.
es wird nichts ausgegeben, der rechte Bereich bleibt leer.
Was mache ich falsch?
Gruß Andreas
Hello Andreas,
Bei Aktion = Profil lade ich profil.php:
print "<FORM ACTION="index.php?action=profilsave" METHOD="POST" ENCTYPE="MULTIPART/FORM-DATA">\n";
...
print "<INPUT TYPE="SUBMIT" CLASS="ibut" name="action" VALUE="Ändern">\n";
in der index.php habe ich dann wieder die action-Abfrage stehen:
if($action=='profilsave'){
echo "test";
}Doch genau dieser Schritt klappt nicht.
es wird nichts ausgegeben, der rechte Bereich bleibt leer.Was mache ich falsch?
Danke für dieses tolle Beispiel für den Nutzen von "regsister_globals = off"!
Ich musste erst stutzen, was Du da wohl gebastelt hast, aber auf den zweiten Blick wurde es klar.
1. Du hast entgegen jeder Empfehlung register_globals auf on
2. Du arbeitest mit den Script-"Kurzvariablen"
3. Du hast zwei Wege, auf denen deine Parameter in das Script gelangen,
gleichzeitig benutzt: im <form>-tag die GET-Methode und im
<input>-Tag die Post-Methode.
4. Du hast einen Parameternamen doppelt vergeben. (siehe 3. )
- <form action="... action=profilsave" ...>
- <input name="action" value="...
Abhilfe:
1. Stell deinen Host auf register_globals = off
2. Nutze im Script nur die $_GET, $_POST, $_COOKIE,... Vraiablen
3. Vergib eindeutige Parameter- / Vraiablennamen.
Viel Erfolg
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo Tom
Danke für dieses tolle Beispiel für den Nutzen von "register_globals = off"!
Bitte, habe ich gern getan ;-)
doch ich habe nicht die Möglichkeit was einzustellen, PHP läuft außerdem im Safe-Mode.
- Du hast entgegen jeder Empfehlung register_globals auf on
hab ich nicht, macht der von selbst
- Du arbeitest mit den Script-"Kurzvariablen"
als Unwissender kenne ich keine Alternativen
gleichzeitig benutzt: im <form>-tag die GET-Methode und im
<input>-Tag die Post-Methode.
verstehe ich nicht, habe doch im form-Tag method = post angegeben?
- Du hast einen Parameternamen doppelt vergeben. (siehe 3. )
- <form action="... action=profilsave" ...>
- <input name="action" value="...
genau das war der Fehler, jetzt wird die action erkannt.
Abhilfe:
2. Nutze im Script nur die $_GET, $_POST, $_COOKIE,... Vraiablen
3. Vergib eindeutige Parameter- / Vraiablennamen.
werde ich zukünftig so machen.
Gruß Andreas
Hallo,
doch ich habe nicht die Möglichkeit was einzustellen, PHP läuft außerdem im Safe-Mode.
Quatsch.
1. Das hat mit dem Safe-Mode nichts zu tun.
http://www.dclp-faq.de/q/q-konfiguration-safe-mode.html
2. Den Wert von register_globals kann man auch
selbst aendern in der .htaccess Datei:
php_flag register_globals off
register_globals hat in neuen PHP-Installationen (ab 4.2.0)
den Default-Wert "0" bzw. "off".
Dein Provider hat ihn offenbar aus Gefaelligkeit gegenueber
bequemen Skript-Kiddies oder alten Kunden wieder auf "1"/"on"
gesetzt. Oder er benutzt eine total veraltete PHP-Version.
- Du arbeitest mit den Script-"Kurzvariablen"
als Unwissender kenne ich keine Alternativen
Dann hast Du PHP mit einer schlechten bzw. veralteten
Anleitung gelernt.
Lies lieber das:
http://www.dclp-faq.de/ch/ch-webvariablen.html
http://www.php.net/manual/de/security.registerglobals.php
Korrekt, stabil und "modern" sind die Variablen
$_GET, $_POST, $_REQUEST u.s.w.
PHP-Manual: Predefined Variables (englisch, die deutsche Uebersetzung ist unvollstaendig/veraltet)
http://www.php.net/manual/en/language.variables.predefined.php und
http://www.php.net/manual/en/reserved.variables.php
gleichzeitig benutzt: im <form>-tag die GET-Methode und im
<input>-Tag die Post-Methode.
verstehe ich nicht, habe doch im form-Tag method = post angegeben?
Aber Du haengst Parameter an die URL im ACTION-Attribut.
Das halte ich - wie erwaehnt - nicht fuer schlau.
Auch wenn gewisse Leute behaupten, es sei erlaubt.
Gruesse,
Thomas
Hello,
gleichzeitig benutzt: im <form>-tag die GET-Methode und im
<input>-Tag die Post-Methode.
verstehe ich nicht, habe doch im form-Tag method = post angegeben?
Ja, darum ist die Übertragungsmethode POST aktiviert. Die Parameter in der URi werden aber trotzdem im $_GET-Array abgelegt. Und wenn man nun die normale reihenfolge für die Übertragung der Werte aus den Arrays in die "Kurzen" eingestellt hat (GPC = Get Post Cookie), dann werden die Gets mit den gleichnamigen Posts und dann mit den gleichnamigen Cookies überschrieben. Das war ja Dein Problem.
Aber Du haengst Parameter an die URL im ACTION-Attribut.
Das halte ich - wie erwaehnt - nicht fuer schlau.
Auch wenn gewisse Leute behaupten, es sei erlaubt.
Das ist auch erlaubt. Als Fabian mir das mal untergejubelt hat, habe ich gleich recherchiert. Leider finde ich den Thread nicht mehr, in dem mir ein "Wissender des Forums" die passende Hinweise gab.
Liebe Grüße aus http://www.braunschweig.de
Tom
Hallo,
sorry dass ich mich erst jetzt wieder melde.
Wie gesagt, weiß ich nur dass ich nicht viel weiss. Aber das weiss ich sicher.
Werde mich nach den Klausuren mal näher mit der Materie befassen.
Werde mal die Links in die Favoriten kopieren damit ich sie nicht verlier.
Gruß Andreas
Hallo,
print "<FORM ACTION="index.php?action=profilsave" METHOD="POST
^^^^^^^^^^^^^^^^^^
Ich halte es nicht fuer schlau, URL-Parameter
und die POST-Methode zu kombinieren.
Wenn der Benutzer diesen Button klickt:
"<INPUT TYPE="SUBMIT" CLASS="ibut" name="action" VALUE="Ändern">\n";
dann hat
$_POST['action'] den Wert "Aendern"
und vermutlich
$_GET['action'] den Wert "profilsave".
Was (wenn ueberhaupt) in $action steht, haengt von
der Reihenfolge in variables_order ab.
http://www.php.net/manual/en/configuration.directives.php#ini.variables-order
Lass Dir doch vor der Entscheidung
if($action=='profilsave'){
mal anzeigen, was in $action steht.
Statt $action solltest Du sowieso
$_GET['action'], $_POST['action'] oder $_REQUEST['action']
verwenden, wobei bei $_REQUEST wieder nicht klar ist, aus
welchem "Raum" (GET/POST) der Parameter kommt.
Gruesse,
Thomas
Danke für die Tipps,
werde versuchen mich zukünftig daran zu halten.
Gruß Andreas