Andreas Dölling: Formulare: GET-Parameter im action-Attribut

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&amp;blocksize=126&amp;sort_by=last_name&amp;sort_order=ASC" method="post">

Vorbildich XHTML-konform habe ich das verknüpfende "&" also jeweils durch die Entität "&amp;" ersetzt. Die Seite ist valide.

Dumm ist nur, daß nach dem Versenden des Formulares das "&amp;" genauso in der URL-Zeile steht, also als Literal '&amp;'. 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

  1. Hi,

    <form id="data_form" name="data_form" action="persons.php?offset=0&amp;blocksize=126&amp;sort_by=last_name&amp;sort_order=ASC" method="post">
    Dumm ist nur, daß nach dem Versenden des Formulares das "&amp;" genauso in der URL-Zeile steht, also als Literal '&amp;'.

    Welcher Browser macht dieses Problem?

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. 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

      1. 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

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. 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

          1. 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 &amp; durch & - das & kann im Parameter nicht unkodiert vorkommen.

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Schreinerei Waechter
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
  2. Hallo,

    schreib das mal mit an den Anfang deiner Seite ins PHP:

    ini_set ('arg_separator.output', '&amp;');

    Gruß Frank

    1. hi,

      schreib das mal mit an den Anfang deiner Seite ins PHP:

      ini_set ('arg_separator.output', '&amp;');

      wieso output? es handelt sich doch hier um keinen automatisch von PHP generierten URL?

      gruß,
      wahsaga

      --
      "Look, that's why there's rules, understand? So that you _think_ before you break 'em."