Bernd: Post-Array abarbeiten

Hallo Forum!

Ich bekomme aus einem Formular ein langes Post-Array. Die einzelnen Blöcke sind durch den "separator", der in dem Formular ein hidden-Feld ist, getrennt.

Nun möchte ich jeden Block durchgehen und die 5 Werte immer der Reihe nach in ein DB eintragen. Doch leider verließ mich mein Geist und ich komme nicht weiter :-(((

Array
(
    [300191_1] => 12.77
    [300191_2] => 11.93
    [300191_3] => 0.84
    [300191_4] => 23
    [300191_5] => 12
    [separator0] => XX
    [2156918_1] => 12.77
    [2156918_2] => 11.93
    [2156918_3] => 0.84
    [2156918_4] => 45
    [2156918_5] => 87.3
    [separator1] => XX
    [681508_1] => 44.88
    [681508_2] => 44.52
    [681508_3] => 0.36
    [681508_4] => 34.76
    [681508_5] => 32.6
    [separator2] => XX
)

Wißt Ihr Rat??

Danke im Voraus, Bernd

  1. Moin!

    Wißt Ihr Rat??

    foreach.

    - Sven Rautenberg

    --
    "Love your nation - respect the others."
    1. Hi Sven!

      Ja, foreach. Aber jedes INSERT soll dann etwa so aussehen:

      Beispielblock Nr.1:

      [300191_1] => 12.77
          [300191_2] => 11.93
          [300191_3] => 0.84
          [300191_4] => 23
          [300191_5] => 12
          [separator0] => XX

      insert into....(pos1,pos2,pos3,pos4,pos5) values ('12.77','11.93','0.84','23','12')

      Und wenn dann ein Separator kommt, wieder das Gleiche von vorne. Mit foreach wird ja immer für JEDES Element ein INSERT gemacht. Verstehst du in etwa, was ich meine?

      1. Moin!

        insert into....(pos1,pos2,pos3,pos4,pos5) values ('12.77','11.93','0.84','23','12')

        Und wenn dann ein Separator kommt, wieder das Gleiche von vorne. Mit foreach wird ja immer für JEDES Element ein INSERT gemacht.

        Nur, wenn du das so programmierst. Wenn du nacheinander erstmal fünf Elemente sammelst, und nur dann das INSERT machst, wenn du den Trenner findest (oder am Ende bist, sofern am Ende kein Trenner kommt), dann passiert was anderes.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
  2. n'abend,

    Array
    (
        [300191_1] => 12.77
        [300191_2] => 11.93
        [300191_3] => 0.84
        [300191_4] => 23
        [300191_5] => 12
        [separator0] => XX
        [2156918_1] => 12.77
        [2156918_2] => 11.93
        [2156918_3] => 0.84
        [2156918_4] => 45
        [2156918_5] => 87.3
        [separator1] => XX
        [681508_1] => 44.88
        [681508_2] => 44.52
        [681508_3] => 0.36
        [681508_4] => 34.76
        [681508_5] => 32.6
        [separator2] => XX
    )

    Bist du dir (hundertprozentig) _sicher_, dass die Elemente immer in dieser Reihenfolge ankommen? Nein? Wieso verlässt du dich dann darauf?

    Folgendes ist übrigens ohne weiteres möglich:

    <form [...]>  
      <input type="text" name="einArray[a]" value="blubb">  
      <input type="text" name="einArray[b]" value="bla">  
      <input type="text" name="einArray[c]" value="blubber">  
      <input type="text" name="einArray[d]" value="blo">  
      
      <input type="text" name="einMdArray[a][a]" value="blubb">  
      <input type="text" name="einMdArray[a][b]" value="bla">  
      <input type="text" name="einMdArray[b][aa]" value="blubber">  
      <input type="text" name="einMdArray[b][bb]" value="blo">  
    </form>
    

    entspricht dann in php folgendem:

    $einArray = array(  
      'a' => 'blubb',  
      'b' => 'bla',  
      'c' => 'blubber',  
      'd' => 'blo');  
      
    $einMdArray = array(  
      'a' => array(  
        'a' => 'blubb',  
        'b' => 'bla'),  
      'b' => array(  
        'aa' => 'blubber',  
        'bb' => 'blo'));
    

    Mit diesem kleinen Hinweis dürftest du deine Gruppierungsversuche (a) sicherer und (b) eleganter lösen können.

    weiterhin schönen abend...

    --
    wer braucht schon großbuchstaben?
    sh:( fo:# ch:# rl:° br:> n4:& ie:{ mo:} va:) de:] zu:} fl:{ ss:? ls:[ js:|
    1. Moin!

      Array
      (
          [300191_1] => 12.77
          [300191_2] => 11.93
          [300191_3] => 0.84
          [300191_4] => 23
          [300191_5] => 12

      Folgendes ist übrigens ohne weiteres möglich:

      <input type="text" name="einMdArray[a][a]" value="blubb">
        <input type="text" name="einMdArray[a][b]" value="bla">
        <input type="text" name="einMdArray[b][aa]" value="blubber">
        <input type="text" name="einMdArray[b][bb]" value="blo">

      Mist, ich hab in dem Array nur Zahlen gesehen und nicht genauer hingeschaut. Nennt man wohl Blackout. ;)

      Also entsprechend
        <input type="text" name="array[300191][1]" value="12.77">

      Und dann mit foreach die erste Ebene durchgehen, und dort einfach nur noch die zweite Ebene mit [1], [2],... ansprechen.

      Dann brauchst auch diesen Trenner nicht mehr. :)

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
      1. Ja, das ist ja echt Mist :-) ...weil ich hab´s jetzt mit Svens "Sammelmethode" probiert - hat hin.

        $i = 1;
        $arrTemp = array();
        foreach ($_POST as $key => $elem){

        $key = explode("_", $key);$key = $key[0]; // remove the "_1"
         if($i == 1){
          $arrTemp = array();
          array_push($arrTemp, $key);
         }
         // echo"<br>i = $i und elem = $elem<br>";
         array_push($arrTemp, $elem);
         if($i == 5){
          echo"<pre>";
          print_r($arrTemp);/*/ insert....*/
          echo"</pre>";
          $arrTemp = array();
         }
         $i++;
         if(ereg("separator",$key)){
          // echo"<br>sep war da<br>";
          $i = 1;
         }

        /**

        $save = "UPDATE tbl\_lwv\_auftrag\_pos
            Set
            PZN = '$key'
            WHERE AuftragsNr = '$_POST[AuftragsNr]'
            ";
          echo "update: ".$save."<br>";
          //$update = mysql_query($save);
        //*/
        }