OT: Frage zu Firefox, PHP und HTML-Formularen: $_POST['...'] ist nicht definiert.
Hallo allerseits, eine etwas off topic Frage. Ich habe hier eine kleine Web-Applikation in PHP geschrieben, der Server ist ein Apache. Der Benutzer soll nun in einem HTML-Formular einige Daten eingeben. Diese werden per POST an den Server übermittelt. Der HTML code sieht etwa so aus: Nun prüfe ich in PHP ob $_POST['feld'] auch definiert ist: if ( ! isset ($_POST['feld'])) { // FEHLER meldung ausgeben } In 99.99% der Fälle ist $_POST['feld'] definiert und mit einem Wert besetzt. (Ein JavaScript Code-Schnipsel prüft beim Submit, daß auch wirklich etwas eingegeben wurde). Und __manchmal__ passiert es, daß $_POST['feld'] nicht definiert ist, d.h. isset (..) liefert false. Das Verhalten ist nicht systematisch reproduzierbar. Es tritt mit Firefox unter Windows und Linux auf. Ich versteh das nicht. Was passiert da? Bin für jede Hilfe dankbar. Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hallo Jürgen,
Ich habe hier eine kleine Web-Applikation in PHP geschrieben, der Server ist ein Apache.
Der Benutzer soll nun in einem HTML-Formular einige Daten eingeben. Diese werden per POST an den Server übermittelt.
Der HTML code sieht etwa so aus:
Nun prüfe ich in PHP ob $_POST['feld'] auch definiert ist:
if ( ! isset ($_POST['feld'])) { // FEHLER meldung ausgeben }
In 99.99% der Fälle ist $_POST['feld'] definiert und mit einem Wert besetzt. (Ein JavaScript Code-Schnipsel prüft beim Submit, daß auch wirklich etwas eingegeben wurde).
Und __manchmal__ passiert es, daß $_POST['feld'] nicht definiert ist, d.h. isset (..) liefert false.
Ich würde vermeiden zu einem input-Feld dieselbe Bezeichnung für id und name auszugeben. Wozu benötigst Du die ID des Feldes? Hast Du bei Firefox zur Kontrolle den Firebug als Addon installiert? Der hat mir an dieser Stelle immer schnell auf die Sprünge geholfen. Ein ähnliches Verhalten ist mir bei meinen Formularen (ich betreibe mehrere MySQL-Datenbanken mit PHP/Javascript über Apache) noch nicht passiert. Mich würde dazu genauer auch das JavaScript Code-Schnipsel interessieren. Denn wenn beim Server nichts ankommt muss das meines Erachtens unter bestimmten Umständen vorher entfernt worden sein. Gruß Robert -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo, Am Freitag 13 Februar 2009 18:19:57 schrieb Robert Großkopf:
Ich habe hier eine kleine Web-Applikation in PHP geschrieben, der Server ist ein Apache.
Der Benutzer soll nun in einem HTML-Formular einige Daten eingeben. Diese werden per POST an den Server übermittelt.
Der HTML code sieht etwa so aus:
Nun prüfe ich in PHP ob $_POST['feld'] auch definiert ist:
if ( ! isset ($_POST['feld'])) { // FEHLER meldung ausgeben }
In 99.99% der Fälle ist $_POST['feld'] definiert und mit einem Wert besetzt. (Ein JavaScript Code-Schnipsel prüft beim Submit, daß auch wirklich etwas eingegeben wurde).
Und __manchmal__ passiert es, daß $_POST['feld'] nicht definiert ist, d.h. isset (..) liefert false.
Ich würde vermeiden zu einem input-Feld dieselbe Bezeichnung für id und name auszugeben. Wozu benötigst Du die ID des Feldes?
hmm, copy&pase aus Beispielen.
Hast Du bei Firefox zur Kontrolle den Firebug als Addon installiert? Der hat mir an dieser Stelle immer schnell auf die Sprünge geholfen.
ja, aber wieg gesagt, das Problem tritt nur sporadisch auf.
Ein ähnliches Verhalten ist mir bei meinen Formularen (ich betreibe mehrere MySQL-Datenbanken mit PHP/Javascript über Apache) noch nicht passiert. Mich würde dazu genauer auch das JavaScript Code-Schnipsel interessieren. Denn wenn beim Server nichts ankommt muss das meines Erachtens unter bestimmten Umständen vorher entfernt worden sein.
hier der Javascript-Code function chkLoginForm() // Alle Felder mussen belegt sein // Führende und folgende Leerzeichen werden entfernt { var fields = new Array ("loginName", "loginPassword"); if(document.loginForm.Button == "cancel") { return true; } for (var f in fields) { fo = document.getElementById (fields[f]); // führende und folgende Leerzeichen entfernen fo.value = fo.value.replace (/^ */,""); fo.value = fo.value.replace (/ *$/,""); if (fo.value == "") { alert("Bitte füllen Sie dieses Feld aus."); fo.focus(); return false; } } return true; } Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hallo Jürgen,
Ich habe hier eine kleine Web-Applikation in PHP geschrieben, der Server ist ein Apache.
Der Benutzer soll nun in einem HTML-Formular einige Daten eingeben. Diese werden per POST an den Server übermittelt.
Der HTML code sieht etwa so aus:
Nun prüfe ich in PHP ob $_POST['feld'] auch definiert ist:
if ( ! isset ($_POST['feld'])) { // FEHLER meldung ausgeben }
In 99.99% der Fälle ist $_POST['feld'] definiert und mit einem Wert besetzt. (Ein JavaScript Code-Schnipsel prüft beim Submit, daß auch wirklich etwas eingegeben wurde).
Und __manchmal__ passiert es, daß $_POST['feld'] nicht definiert ist, d.h. isset (..) liefert false.
Ich würde vermeiden zu einem input-Feld dieselbe Bezeichnung für id und name auszugeben. Wozu benötigst Du die ID des Feldes?
hmm, copy&pase aus Beispielen.
Die IDs benötigst Du im Script. Hier müssen stehen allerdings andere IDs als in Deinem oben genannten Beispiel: "loginName" bzw. "loginPassword". Wie gesagt, ich bin Problemen mit IDs und Feldnamen oft dadurch erst einmal aus dem Weg gegangen, indem ich sie anders benannt habe.
Ein ähnliches Verhalten ist mir bei meinen Formularen (ich betreibe mehrere MySQL-Datenbanken mit PHP/Javascript über Apache) noch nicht passiert. Mich würde dazu genauer auch das JavaScript Code-Schnipsel interessieren. Denn wenn beim Server nichts ankommt muss das meines Erachtens unter bestimmten Umständen vorher entfernt worden sein.
hier der Javascript-Code
function chkLoginForm() // Alle Felder mussen belegt sein // Führende und folgende Leerzeichen werden entfernt { var fields = new Array ("loginName", "loginPassword");
if(document.loginForm.Button == "cancel") { return true; }
for (var f in fields) { fo = document.getElementById (fields[f]); // führende und folgende Leerzeichen entfernen fo.value = fo.value.replace (/^ */,""); fo.value = fo.value.replace (/ *$/,"");
Kleiner Hinweis mit einer Kopie: http://forum.de.selfhtml.org/archiv/2005/4/t106433/#m659588 var regX = /\s+/g; /* \s : ein einzelnes aus einer vielzahl von moeglichen leerzeichen; \s+ : mindestens ein leerzeichen oder eine squenz von leerzeichen; g : das "global"-flag veranlasst eine suche ueber den gesamten term; */ variationen des gerade gegebenen beispiels: var regX = /\s+$/; // einzelnes leerzeichen oder leerzeichen-sequenz am stringende; var regX = /^\s+/; // einzelnes leerzeichen oder leerzeichen-sequenz am stringanfang;
if (fo.value == "") { alert("Bitte füllen Sie dieses Feld aus."); fo.focus(); return false; } } return true; }
Allerdings verändert das Script nur etwas am Inhalt des Feldes und lässt nicht den Feldnamen verschwinden. Und genau das müsste ja passieren, so dass dieser Name beim Verschicken anschließend nicht mehr auftaucht. Wie sieht der Submit aus? An dieser Stelle würde ich weiter suchen - aber zuerst die Namen wie oben bereits gesagt verändern. Gruß Robert -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Hallo Robert,
Ich habe hier eine kleine Web-Applikation in PHP geschrieben, der Server ist ein Apache.
Der Benutzer soll nun in einem HTML-Formular einige Daten eingeben. Diese werden per POST an den Server übermittelt.
Der HTML code sieht etwa so aus:
Nun prüfe ich in PHP ob $_POST['feld'] auch definiert ist:
if ( ! isset ($_POST['feld'])) { // FEHLER meldung ausgeben }
In 99.99% der Fälle ist $_POST['feld'] definiert und mit einem Wert besetzt. (Ein JavaScript Code-Schnipsel prüft beim Submit, daß auch wirklich etwas eingegeben wurde).
Und __manchmal__ passiert es, daß $_POST['feld'] nicht definiert ist, d.h. isset (..) liefert false.
Ich würde vermeiden zu einem input-Feld dieselbe Bezeichnung für id und name auszugeben. Wozu benötigst Du die ID des Feldes?
hmm, copy&pase aus Beispielen.
Die IDs benötigst Du im Script. Hier müssen stehen allerdings andere IDs als in Deinem oben genannten Beispiel: "loginName" bzw. "loginPassword". Wie gesagt, ich bin Problemen mit IDs und Feldnamen oft dadurch erst einmal aus dem Weg gegangen, indem ich sie anders benannt habe.
Ein ähnliches Verhalten ist mir bei meinen Formularen (ich betreibe mehrere MySQL-Datenbanken mit PHP/Javascript über Apache) noch nicht passiert. Mich würde dazu genauer auch das JavaScript Code-Schnipsel interessieren. Denn wenn beim Server nichts ankommt muss das meines Erachtens unter bestimmten Umständen vorher entfernt worden sein.
Kleiner Hinweis mit einer Kopie: http://forum.de.selfhtml.org/archiv/2005/4/t106433/#m659588
Danke.
Allerdings verändert das Script nur etwas am Inhalt des Feldes und lässt nicht den Feldnamen verschwinden. Und genau das müsste ja passieren, so dass dieser Name beim Verschicken anschließend nicht mehr auftaucht.
Hab alle id's entfernt, den entsprechenden JavaScriptcode von getElementbyId(..) durch getEmelentsByName(..)[0] ersetzt. Das Problem existiert leider immer noch.
Wie sieht der Submit aus? An dieser Stelle würde ich weiter suchen - aber zuerst die Namen wie oben bereits gesagt verändern.
<input type="submit" style="width:100%" value="Anmelden"/> Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hallo Jürgen, ich habe einmal für die Übersichtlichkeit stark gekürzt.
Wie sieht der Submit aus? An dieser Stelle würde ich weiter suchen - aber zuerst die Namen wie oben bereits gesagt verändern.
<input type="submit" style="width:100%" value="Anmelden"/>
Irgendwo musst Du doch noch etwas anstellen, so dass das Javascript überhaupt darauf zugreifen kann. Bei mir sehen die Absendebuttons meist so aus, dass mit ihnen ein "onclick" verbunden ist, dann die Formularprüfung erfolgt und anschließend per "document.forms[0].submit()" alles abgeschickt wird. Wo greift bei Dir Javascript zu? Ansonsten wüsste ich auch nicht, an welcher Stelle sich das Ganze verschluckt. Wenn Du keine Probleme damit hast will ich mir das gerne einmal hier bei mir anschauen. Einfach per persönlicher Mail. Gruß Robert -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um eine Liste aller verfuegbaren Kommandos zu bekommen, schicken Sie eine Mail an: opensuse-de+help@opensuse.org
Am Sonntag 15 Februar 2009 15:23:40 schrieb Robert Großkopf:
Hallo Jürgen,
ich habe einmal für die Übersichtlichkeit stark gekürzt.
Wie sieht der Submit aus? An dieser Stelle würde ich weiter suchen - aber zuerst die Namen wie oben bereits gesagt verändern.
<input type="submit" style="width:100%" value="Anmelden"/>
Irgendwo musst Du doch noch etwas anstellen, so dass das Javascript überhaupt darauf zugreifen kann. Bei mir sehen die Absendebuttons meist so aus, dass mit ihnen ein "onclick" verbunden ist, dann die Formularprüfung erfolgt und anschließend per "document.forms[0].submit()" alles abgeschickt wird.
Wo greift bei Dir Javascript zu?
<form action="../login-ctrl.php?a=login" name="loginForm" accept-charset="ISO-8859-1" onsubmit="return chkLoginForm()" method="post">
Ansonsten wüsste ich auch nicht, an welcher Stelle sich das Ganze verschluckt. Wenn Du keine Probleme damit hast will ich mir das gerne einmal hier bei mir anschauen. Einfach per persönlicher Mail.
Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 92 04 87 1 Fax: +49(721) 92 04 87 2 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
participants (2)
-
Dr. Jürgen Vollmer
-
Robert Großkopf