Hakan: Formular Liste komplett übergeben

Hallo Leute,

wieder ein Problem mit einer Liste, bei dem ich nicht weiterkomme.

Ich habe zwei Listen.
Liste A ist leer und Liste B ist voll.

Dann wähle ich einige Elemente aus der Liste B und
übertrage diese per JS auf die Liste A.

Dann drücke ich auf Submit und möchte im nächsten Formular alle Elemente der Liste A auslesen.

Funzt aber nicht, weil solange die elemente aus der Liste A nicht explizit markiert sind, übergibt er keine Inhalte.
Gibt es eine Möglichkeit, beim Übergeben des Formulars, auf alle Elemente der Liste A zuzugreifen per $_REQUEST bzw. $_POST??

Auch funzt es nicht, wenn ich beim Listenfeld "multiple" angebe und mehrere markiere. Es wird immer nur ein Element übergeben.
-> count($_REQUEST['Liste']); ergibt immer 1.

Hat einer eine Idee?

Danke im Voraus!

Gruß

  1. Hello,

    Auch funzt es nicht, wenn ich beim Listenfeld "multiple" angebe und mehrere markiere. Es wird immer nur ein Element übergeben.
    -> count($_REQUEST['Liste']); ergibt immer 1.

    Es funktioniert schon...

    <select name="element" multiple>

    führt dazu, dass alle Optionen dieses Selects mit demselben Namen übergeben werden. Das bedeutet, dass der Browser lauter geliche Name=Value-Pärchen bastelt und im Post-Body an den Server verschickt.

    Angucken könntest Du Dir das, wenn Du mal den Input-Stream ansprichst

    $fh = fopen('php://input','r'),
        $input = fread($fh, 4096);
        fclose($fh);

    echo "<pre>\r\n";
        echo htmlspecialchars($input);
        echo "</pre>\r\n";

    PHP legt nun eine Variable an und überschreibt diese dann wieder, wenn dre nächste Parameter mit demselben bezeichner auftaucht.

    Um das Problem zu lösen, solltest Du den Browser bitten, ein Array für PHP vorzubereiten

    <select name="element[]" multiple>

    Nun wird PHP explizit darauf aufmerksam gemacht, dass mehrere Elemente mit demselben Basisnamen kommen und legt diese gleich als Array an.

    Ein harzliches Glückauf

    Tom vom Berg
    http://bergpost.annerschbarrich.de

    --
    Nur selber lernen macht schlau
    1. Hallo Tom,

      vielen dank, dass ist genau das, woran ich gescheitert bin.

      Aber jetzt hab ich ein anderes Problem. Vielleicht kannst Du mir da auch auf Anhieb helfen.
      Ist aber ein JS-problem.

      Listenelement vorher:
      <select name="element" multiple>

      Unter JS konnte ich auf das Element wie folgt zugreifen:
      document.formular.toUsr.length

      Jetzt mit:
      <select name="element[]" multiple>

      kann ich unter JS auf das Element nicht zugreifen. Bekomme keine Meldung garnichts. JS bricht einfach ab - folgende JS-Befehle werden nicht ausgeführt.

      waas mach ich falsch?

      Gruß, Hakan

      1. Hi,

        Aber jetzt hab ich ein anderes Problem.

        Ein weiteres uraltes ...

        Unter JS konnte ich auf das Element wie folgt zugreifen:
        document.formular.toUsr.length

        Jetzt mit:
        <select name="element[]" multiple>
        kann ich unter JS auf das Element nicht zugreifen.

        http://de.selfhtml.org/javascript/objekte/elements.htm#allgemeines, Schema 4

        MfG ChrisB

        1. Leider ist das nicht die Antwort auf mein Problem!

          Es geht nicht darum, wie ich auf das Element zugreifen kann, sondern es scheitert allein an den Eckigen klammern.

          Wenn das Element wie folgt aussieht:
          <select name='user' size='16' multiple>

          dann kann ich mit Schema4 genauso darauf zugreifen, wie mit jeder anderen Schema auch.

          Also unter JS:
          test = document.forms["formular"].elements["user"].length;
          alert("Alarm "+test);

          Sobald ich aber die Eckigen klammern hinzufüge:
          <select name='user[]' size='16' multiple>

          wird der "Alarm" nicht ausgeführt.

          Und ich weiss nicht warum?!

          Gruß, Hakan

          1. Hi,

            Es geht nicht darum, wie ich auf das Element zugreifen kann,

            Doch, tut es.

            test = document.forms["formular"].elements["user"].length;
            alert("Alarm "+test);

            Sobald ich aber die Eckigen klammern hinzufüge:
            <select name='user[]' size='16' multiple>

            wird der "Alarm" nicht ausgeführt.

            Und ich weiss nicht warum?!

            Weil du auf ein Feld ueber den Namen "user" zuzugreifen versuchst, obwohl dieses diesen Namen gar nicht traegt.

            MfG ChrisB

          2. Irgendwie hattest Du doch Recht, ChrisB.

            Aber es funzt nicht, wenn ich das Element mit dem Namen anspreche.
            Ich muss es als Index ansprechen. Dann gehts. Komische Sache.

            Trotzdem danke!

            Hakan

  2. Hallo,

    Funzt aber nicht, weil solange die elemente aus der Liste A nicht explizit markiert sind, übergibt er keine Inhalte.
    Auch funzt es nicht, wenn ich beim Listenfeld "multiple" angebe und mehrere markiere. Es wird immer nur ein Element übergeben.

    "funzt nicht" ist keine Fehlerbeschreibung, siehe auch Tipps für Fragende.

    -> count($_REQUEST['Liste']); ergibt immer 1.

    Schon mal var_dump oder print_r statt count verwendet?

    Freundliche Grüße

    Vinzenz

  3. Hi,

    Funzt aber nicht, weil solange die elemente aus der Liste A nicht explizit markiert sind, übergibt er keine Inhalte.

    Dann markiere sie - im Moment des Absendens.

    Auch funzt es nicht, wenn ich beim Listenfeld "multiple" angebe und mehrere markiere. Es wird immer nur ein Element übergeben.

    Ganz alter Hut.

    MfG ChrisB