Formulare: GET-Parameter im action-Attribut
Andreas Dölling
- html
Hallo,
habe eine Anwendung, bei der ich GET-Parameter über das action-Attribut von Formularen durchschleife:
<form id="data_form" name="data_form" action="persons.php?offset=0&blocksize=126&sort_by=last_name&sort_order=ASC" method="post">
Vorbildich XHTML-konform habe ich das verknüpfende "&" also jeweils durch die Entität "&" ersetzt. Die Seite ist valide.
Dumm ist nur, daß nach dem Versenden des Formulares das "&" genauso in der URL-Zeile steht, also als Literal '&'. Damit sind natürlich auch die GET-Parameter nicht mehr bekannt, wenn ich sie nun mit PHP auslesen will.
Verwende ich nun aber im action-Attribut der Formulare das "&" unmaskiert, so klappt es mit den GET-Variablen wieder, aber dafür ist die Seite nicht mehr valide.
Habt Ihr einen Vorschlag, wie ich aus dieser Zwickmühle herauskomme (abgesehen von der für mich mit Aufwand verbundene Lösung, die Parameter über versteckte Formularfelder per POST durchzuschleifen)?
Thanx und ciao,
Andreas
Hi,
<form id="data_form" name="data_form" action="persons.php?offset=0&blocksize=126&sort_by=last_name&sort_order=ASC" method="post">
Dumm ist nur, daß nach dem Versenden des Formulares das "&" genauso in der URL-Zeile steht, also als Literal '&'.
Welcher Browser macht dieses Problem?
cu,
Andreas
Welcher Browser macht dieses Problem?
Ich habe es bis jetzt im Firefox 1.0 und im IE 6.0 (unter Win2000) getestet.
Ich kann Dir leider keinen Link zum Anschauen schicken, da das ganze auf einem lokalen Server liegt.
Ciao,
Andreas
Hi,
Welcher Browser macht dieses Problem?
Ich habe es bis jetzt im Firefox 1.0 und im IE 6.0 (unter Win2000) getestet.
Kann ich in beiden nicht nachvollziehen.
Ich kann Dir leider keinen Link zum Anschauen schicken, da das ganze auf einem lokalen Server liegt.
Dann wird es schwierig.
cu,
Andreas
Kann ich in beiden nicht nachvollziehen.
Du hast recht. In einer einfachen Testdatei konnte ich den Fehler ebenfalls nicht nachvollziehen.
Danach habe ich noch ein wenig gesucht und bin jetzt fündig geworden.
Es war natürlich - wie so oft - ein SAUBLÖDER Fehler:
Nachdem ich die jeweils vom Formular ausgelöste Aktion durchgeführt habe, leite ich den User wieder zurück auf die Ausgangsseite:
header("Location: persons.php?".$get_string);
Ihr ahnt es schon?
Die Variable $getString, die ich mir zu Beginn des PHP-Scripts zusammenbaue, enthält den XHTML-konformen URL-String - mit dem PHP bzw. die header-Funktion nicht viel anfangen kann bzw. den sie so nimmt, wie sie ihn bekommt...
Habe es jetzt quick'n'dirty so gelöst:
header("Location: persons.php?".(str_replace('amp;', '', $get_string)));
Und damit klappt es.
Sorry, das ich darauf nicht früher gekommen bin - aber immerhin hat mich der Hinweis darauf, daß der Fehler nicht nachbaubar ist, letztlich zur Lösung geführt.
Thanx und ciao,
Andreas
Hi,
header("Location: persons.php?".$get_string);
Ihr ahnt es schon?
Die Variable $getString, die ich mir zu Beginn des PHP-Scripts zusammenbaue, enthält den XHTML-konformen URL-String - mit dem PHP bzw. die
header-Funktion nicht viel anfangen kann bzw. den sie so nimmt, wie sie ihn bekommt...
Ja, außerhalb des (X)HTML-Kontexts ist die Kodierung des & in der URL unsinnig.
Habe es jetzt quick'n'dirty so gelöst:
header("Location: persons.php?".(str_replace('amp;', '', $get_string)));
Und damit klappt es.
Solange keiner der Parameter die Zeichenfolge amp; enthält.
Ersetze lieber & durch & - das & kann im Parameter nicht unkodiert vorkommen.
cu,
Andreas
Hallo,
schreib das mal mit an den Anfang deiner Seite ins PHP:
ini_set ('arg_separator.output', '&');
Gruß Frank
hi,
schreib das mal mit an den Anfang deiner Seite ins PHP:
ini_set ('arg_separator.output', '&');
wieso output? es handelt sich doch hier um keinen automatisch von PHP generierten URL?
gruß,
wahsaga