Ludwig Ruderstaller: document.form.feld.value() wenn "feld" ein array() sein soll.

Hallo,

Um per HTML ein Multiple Select an den Server zu übertragen notiert man den namen des Select feldes ja mit feldname[].
Per get würde das dann in etwa so aussehen:

file.php?feldname[]=1&feldname[]=2 usw.

Soweit kein problem. aber Serverseitig arbeit das SixCMS system. Welches anscheinend die URL pastet, ich hab nun die möglichkeit über die article_id artikel zu suchen welche mit eben dieser(diesen) artikel verknüpft sind.

wobei die notation ODER als article_id=1,2,3,4 dargestellt wird.
die notation UND als article_id[]=1&article_id[]=2,.....

alles klar ?

ich weiß das sowas eigentlich ungültig ist, aber SixCMS scheint den QUERY_STRING zu verarbeiten.

So zurück zum formular. natürlich kann ich im formular nicht alle felder als array definiern (was zwar möglich ist, aber das würde heißen das alle felder als ODER gehandhabt werden.

ich hab schon ein kleines script welches normale felder (select, checkbox, radio) zusammenpastet als string in ein form feld schreibt, und dann das gesamte formular submitet.

Nun stehe ich vor dem problem das ich mehrere Multiple select felder habe. Die von einem script geparst werden müssen.

die url sollte schlussendlich so aussehen:
?article_id[]=1,2,3,4&article_id[]=5,6.. usw.

also die werte eines multiple selects als komma seperatat liste als ein element des arrays (article_id)

mit document.form.feldname.value einen string an ein formularfeld geben ist ja kein problem, aber ich müsste das mehrmals machen (eben wegen des arrays)

Any Hint ?

Wenn mehr informationen benötigt werden sagt es..

Vielen Dank im Voraus fürs kopfzerbrechen *g*
Ludwig

  1. Hallo!

    Nun stehe ich vor dem problem das ich mehrere Multiple select felder habe. Die von einem script geparst werden müssen.

    die url sollte schlussendlich so aussehen:
    ?article_id[]=1,2,3,4&article_id[]=5,6.. usw.

    Wieso zweimal article_id[] verstehe ich jetzt nicht ganz.

    also die werte eines multiple selects als komma seperatat liste als ein element des arrays (article_id)

    mit document.form.feldname.value einen string an ein formularfeld geben ist ja kein problem, aber ich müsste das mehrmals machen (eben wegen des arrays)

    Any Hint ?

    Wenn mehr informationen benötigt werden sagt es..

    Also hier mal mein Ansatz/Lösung, so wie ich es verstanden habe.

    ====================================================================
    <html>
    <head>
    <script language="JavaScript">

    function liste()
     {
      a = 0;
      stadt_auswahl = new Array();
      for(i = 0; i < document.formular.stadt.length; i++)
       {
        if(document.formular.stadt.options[i].selected == true)
         {
          stadt_auswahl[a] = document.formular.stadt.options[i].value;
          a++;
         }
       }

    stadt_liste = stadt_auswahl.join(",");
      alert("?article_id[]=" + stadt_liste);
     }
    </script>
    </head>
    <body>

    <form name="formular">
     <select name="stadt" multiple size="6">
      <option value="1">Berlin</option>
      <option value="2">Moskau</option>
      <option value="3">Prag</option>
      <option value="4">Madrid</option>
      <option value="5">London</option>
      <option value="6">Paris</option>
     </select>
    </form>

    <a href="#" onclick="liste(); return false;">test</a>

    </body>
    </html>

    MfG, André Laugks

    1. Hallo!

      Nun stehe ich vor dem problem das ich mehrere Multiple select felder habe. Die von einem script geparst werden müssen.

      die url sollte schlussendlich so aussehen:
      ?article_id[]=1,2,3,4&article_id[]=5,6.. usw.

      Wieso zweimal article_id[] verstehe ich jetzt nicht ganz.

      Weil sich die einträge in der liste (1-4 und 5 -6) als ODER verhalten, und das erste article_id[] zu der zweiten article_id[] als UND

      In text ausgedrückt würde das heissen:

      Zeige alle artikel welche mit den artikel 1 oder 2 oder 3 oder 4 und mit den artikel 5 oder 6 verknüpft sind.

      oder programmiertechnisch ausgedrückt:

      ((1 || 2 || 3 || 4) && ( 5 || 6))

      das problem besteht ja darin mehrfach den gleichen feldnamen mit anderen werten zu füllen und dann das form zu submitten.

      Keine Frage das ganze könnte man anders, besser lösen, nur leider ist SixCMS ein closed source, dh. ich komm nicht an die parsing routine, welche die URL zerlegt,  ran :(

      lg
      Ludwig

      1. Hallo!

        oder programmiertechnisch ausgedrückt:

        ((1 || 2 || 3 || 4) && ( 5 || 6))

        das problem besteht ja darin mehrfach den gleichen feldnamen mit anderen werten zu füllen und dann das form zu submitten.

        Ok, ich habe mal das Script verändert.

        <script language="JavaScript">
        <!--
        query = "?";
        function liste()
         {
          a = 0;
          stadt_auswahl = new Array();
          for(i = 0; i < document.formular.stadt.length; i++)
           {
            if(document.formular.stadt.options[i].selected == true)
             {
              stadt_auswahl[a] = document.formular.stadt.options[i].value;
              a++;
             }
           }

        stadt_liste = stadt_auswahl.join(",");
          query += "article_id[]=" + stadt_liste + "&";
          alert(query);
         }
        //-->
        </script>

        Klickt man den auf ein OR oder UND, also "Suche mir alle Artikel die auf 1,2,4 oder auf 1,4,5 passen"?

        MfG, André Laugks