Ankündigung

Einklappen
Keine Ankündigung bisher.

POST-Array mit mehreren Select-Arrays

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • POST-Array mit mehreren Select-Arrays

    Hallo in die Gemeinde!

    Ich habe ein echtes Problem. Über ein dynamisch generiertes Formular werden verschiedene Select-Tags generiert. Jetzt möchte ich alle Inhalte der Verschiedenen Selects auslesen und habe das so gemacht:

    Im Formular habe ich z.B. diese Selects
    PHP-Code:
    <select name='size[]' id='size[]' style='width:100px;'>
    <
    select name='farbe[]' id='farbe[]' style='width:100px;'
    Abgearbeitet wird das nun so:
    PHP-Code:
    foreach ($_POST["ids"] as $key => $value) {      
        
        
    $query_anzahl $_POST["anzahl"][$key];
        
    $query_artikelnummer $_POST["artikelnummer"][$key];
        
    $query_farbe $_POST["farbe"][$key];
        
    $query_size $_POST["size"][$key];
        
        if (
    $query_anzahl and $query_anzahl <> "") {
            
    $query "INSERT INTO $db_tabelle SET sessionid = '$sessionid', anzahl = '$query_anzahl', artikelnummer = '$query_artikelnummer', size = '$query_size', farbe = '$query_farbe'";
            
    $result mysql_query($query) or die(mysql_error());
        }
                

    Ich denke, das Problem liegt bei den Punkten "query_size" und "query_farbe". Hier werden ja Arrays abgefragt, die schon in einem Array enthalten sind. Wie bekomme ich da die korrekten Values raus?

    Vielleicht kann mir jemand den entscheidenden Tipp geben. Schon mal vielen Dank für jede Antwort.

    Gruß!

    Torsten

  • #2
    Hallo,

    zunächst mal ein Herzliches Willkommen im Forum!

    Die Frage ist aus meiner Sicht keine Profi-Frage, denn die Adressierung eines Feldes mit Namen "size[]" kann nicht per $_POST["ids"] durchgeführt werden, da es diesen offset im $_REQUEST nicht geben wird. Mir fehlen für eine Profi-Frage weiterhin bereits erledigte Debug-Versuche.
    Viele Grüße,
    Dr.E.

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1. Think about software design [B]before[/B] you start to write code!
    2. Discuss and review it together with [B]experts[/B]!
    3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
    4. Write [I][B]clean and reusable[/B][/I] software only!
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Kommentar


    • #3
      Da sind verschiedenen Fehler drin.
      1. Es macht keinen Sinn, bei Auswahlboxen einen Array als Name anzugeben, wenn die Box nicht als «multiple» definiert wird. Da wird immer nur ein Wert übergeben
      2. Woher dein $_POST['ids'] kommt weiss ich nicht, aber es hat nichts mit den andern Post-Variablen zu tun
      3. Als Folge des ersten Punktes macht auch die Schleife in der Auswertung keinen Sinn
      Vielleicht versuchst du mal tabellarisch zu beschreiben, was du erreichen willst und zeigst uns mal den Code deiner Auswahl-Boxen.
      Gruss
      L

      Kommentar


      • #4
        Vielen Dank schon mal - auch sorry, daß ich im falschen Forum gepostet hatte. (SCHÄM)

        Ich hatte der Übersichtlichkeit halber nur einen Teil des Codes gepostet. Die ersten beiden Parameter werden akkurat ausgelesen. Das mit den "ids" funktioniert auch, da die ID des jeweiligen Datensatzes ebenfalls mit übergeben wird - war halt nur nicht Teil des geposteten Codes.

        Generell bezieht sich meine Frage auch darauf, wie kann man es überhaupt erreichen, daß man den Value der selects auslesen kann, wenn es mehrere, dynamisch erzeugte sind (also Anzahl vorher unbekannt), und es auch andere dazugehörige Formulareingabefelder gibt, die schon als $_POST ausgelesen werden.

        PHP-Code:
        <form action="script_add.php" method='post' name='form_ansicht' id='form_ansicht'>
         
        // Einlesen
           $query = "SELECT * FROM ...";
           $result = mysql_query($query) or die(mysql_error());
         
           while($row = mysql_fetch_array($result)) { 
         
            ... EINLESEN DES DATENSATZES ...
            ... In der Anzeigen kommen dann folgende Felder rein
         
        <input name='ids[]' type='hidden' value='<?php echo "$id"?>' />
        <input name='artikelnummer[]' type='hidden' value='<?php echo "$artikelnummer"?>' />
        <input name='anzahl[]' type='text' id='anzahl[]'  /> 
        <select name="size[]" id='size[]'>
        ...
        </select>
        <select name="farbe[]" id='farbe[]'>
        ...
        </select>
        <input name="button" type="submit" id="button" value="Senden" />
         
        ....
         
        }
        Das war der erste Teil - wie kann ich das jetzt aber weiterverarbeiten? Das habe ich bisher so gemacht:

        PHP-Code:
        foreach ($_POST["ids"] as $key=>$value) {  
         
         
        $query_anzahl $_POST["anzahl"][$key];
         
        $query_artikelnummer $_POST["artikelnummer"][$key];
         
        $query_size $_POST["size"][$key];
         
        $query_farbe $_POST["farbe"][$key];  
         .....

        Im Grunde werden ja mehrere Felder in einem Formular ausgelesen. Nur bei den selects habe ich kein value. Irgenwie muss ich noch eine Etage tiefer in die Arrays (der selects) aber wie? Wahrscheinlich sehe ich einfach nur den Wald vor lauter Bäumen nicht. Nochmals vielen Dank!

        Kommentar


        • #5
          Einfache Lösung

          Hallo,

          die Lösung ist so stumpf wie einfach. Ich Depp: Durch den Befehl is_array() frage ich einfach ab, ob es eine select-Box ist und rufe dann einen eigenen foreach im vorhandenen foreach ab.

          Sorry - war bei der Hitze nicht mehr in der Lage, das sofort zu checken

          Kommentar


          • #6
            Wenn du kein «multiple» in den Auswahlboxen eingegeben hast, musst, dann brauchst du auch keine Ebene tiefer zu gehen. Wenn du die Optionen mit
            Code:
            <select name='abc'>
            <option value='$xx'>$yyyy</option>
            ...
            </select>
            angegeben hast, befindet sich der selektierte Wert nachher in $_POST['abcd']. Ich vermute aber eher, dass du gar kein «value» angegeben hast.
            Gruss
            L

            Kommentar

            Lädt...
            X