Formular mit vielen Zeilen übergeben

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

  • Formular mit vielen Zeilen übergeben

    Hi,

    ich gebe zu, der Threadtitel ist nicht sehr aussagekräftig, aber mir ist nichts besseres eingefallen. Ich möchte folgendes realisieren:

    Ich möchte aus einer Artikelliste in Tabellenform ein Projekt generieren. Die Tabelle soll mehrere Spalten haben:

    Artikel-Nr., Menge, Bezeichnung, Lieferant

    In jeder Zeile stehen die Werte eines Artikels. Die Spalte Menge soll nun Input-Felder enthalten und als Standardwert eine "0" haben. Der Benutzer kann nun in die Inputs bei den Artikeln, die er im Projekt haben will die entsprechende Menge eintragen. Am Ende soll dann ein einzelner Submit-Button sein, der das ganze an ein Skript schickt, das alle Artikel, die eine Menge != "0" haben in das Projekt einträgt.

    Das Formular würde ich so bauen:

    PHP-Code:
    <?php
    $query 
    =
    "
      SELECT
        *
      FROM
        artikeldaten;
    "
    ;

    $result mysql_query ($query) or die (mysql_error());
      while (
    $row mysql_fetch_assoc ($result))
      {
        
    $artikel[] = $row;
      }

    $n count ($artikel);
    $form =
    '
      <table>
        <form action="projektgenerieren.php" method="post">
          <tr>
            <th>
              Artikel-Nr.
          </th>
          <th>
            Menge
          </th>
          <th>
            Bezeichnung
          </th>
          <th>
            Lieferant
          </th>
          </tr>
    '
    ;
      for (
    $i 0$i $n$i++)
      {
        
    $form .=
        
    '
          <tr>
            <th>
              <input name="id_'
    $artikel[$i]['id'] .'" value="'$artikel[$i]['id'] .'" readonly />
            </th>
            <th>
              <input name="menge_'
    $artikel[$i]['id'] .'" value="0" />
            </th>
            <th>
              <input name="bezeichnung_'
    $artikel[$i]['id'] .'" 
               value="'
    $artikel[$i]['bezeichnung'] .'" readonly />
            </th>
            <th>
              <input name="lieferant_'
    $artikel[$i]['id'] .'" 
               value="'
    $artikel[$i]['lieferant'] .'" readonly />
            </th>
          </tr>
        '
    ;
      }
    $form .=
    '
        </form>
      </table>
    '
    ;
    echo 
    $form;
    ?>
    Wie übernehme ich das ganze jetzt so gescheit, dass ich es wieder in die Datenbank schreiben kann?

    Danke schonmal im Voraus!
    Zuletzt geändert von sfischer; 05.08.2010, 21:13.

  • #2
    Hallo,

    http://php.net/manual/en/features.fi...d.multiple.php
    http://www.php-resource.de/forum/php...tml#post643299
    http://www.phpf1.com/tutorial/php-form-array.html

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Danke, das hat mir geholfen. Ich hab's jetzt so gemacht:

      Formular:
      PHP-Code:
      <?php
      $query 
      =
      "SELECT * FROM artikeldaten WHERE status = '1' ORDER BY id ASC;";
      $result mysql_query ($query) or die (mysql_error());
        while (
      $row mysql_fetch_assoc ($result))
        {
          
      $artikel[] = $row;
        }
      $n count ($artikel);
      $form =
      '
        <table>
          <form action="projektgenerieren.php?projektnr=10" method="post">
            <tr>
              <th>
                Artikel-Nr.
              </th>
              <th>
                Menge
              </th>
              <th>
                Bezeichnung
              </th>
              <th>
                Lieferant
              </th>
            </tr>
      '
      ;
        for (
      $i 0$i $n$i++)
        {
          
      $form .=
          
      '
            <tr>
              <td>
                <input type="hidden" name="laufnummer" value='
      $i .' />
                <input type="text" name="id_'
      $i .'" value="'$artikel[$i]['id'] .'" readonly />
              </td>
              <td>
                <input type="text" name="menge_'
      $i .'" value="0" />
              </td>
              <td>
                <input type="text" name="bezeichnung_'
      $i .'" 
                 value="'
      $artikel[$i]['bezeichnung'] .'" readonly />
              </td>
              <td>
                <input type="text" name="lieferant_'
      $i .'" 
                 value="'
      $artikel[$i]['lieferant'] .'" readonly />
              </td>
            </tr>
          '
      ;
        }
      $form .=
      '
            <tr>
              <td colspan="4">
                <input type="submit" value="Erstellen" />
              </td>
            </tr>
          </form>
        </table>
      '
      ;
      echo 
      $form;
      ?>
      </body>
      </html>
      Skript zur Datenübernahme und zum Schreiben in die Datenbank:
      PHP-Code:
      <?php
      $zeilen 
      $_POST['laufnummer'] + 1;
      for (
      $i 0$i $zeilen$i++)
      {
        if(
      $_POST['menge_'$i] != 0)
        {
          
      $query =
          
      "
            INSERT INTO
              projektrelation
              (
                projektnr,
                artikelnr,
                menge
              )
            VALUES
              (
                '"
      $_GET['projektnr'] ."',
                '"
      $_POST['id_'$i] ."',
                '"
      $_POST['menge_'$i] ."'
              )
          "
      ;
          
      $result mysql_query ($query) or die (mysql_error());
        }
      }
      ?>
      Zuletzt geändert von sfischer; 05.08.2010, 21:13.

      Kommentar


      • #4
        Zitat von sfischer Beitrag anzeigen
        Danke, das hat mir geholfen. Ich hab's jetzt so gemacht:
        Naja, das ist aber nicht das was ich dir vermitteln wollte. Das mit den [] ist schon die bessere Variante. Deine hat ein paar Nachteile, auch wenn die in deinem Falle gerade nicht zu Tage treten.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Jetzt kapier ich das erst richtig

          Probier ich gleich mal aus!

          Kommentar


          • #6
            Vielleicht hab ich da was noch nicht ganz verstanden. Mein Formular sieht jetzt so aus:

            PHP-Code:
            <?php
            $query 
            =
            "
              SELECT
                *
              FROM
                artikeldaten
              WHERE
                status = '1'
              ORDER BY
                id ASC;
            "
            ;

            $result mysql_query ($query) or die (mysql_error());
              while (
            $row mysql_fetch_assoc ($result))
              {
                
            $artikel[] = $row;
              }

            $n count ($artikel);
            $form =
            '
              <table>
                <form action="projektgenerieren2.php?projektnr=10" method="post">
                  <tr>
                    <th>
                      Artikel-Nr.
                    </th>
                    <th>
                      Menge
                    </th>
                    <th>
                      Bezeichnung
                    </th>
                    <th>
                      Lieferant
                    </th>
                  </tr>
            '
            ;
              for (
            $i 0$i $n$i++)
              {
                
            $form .=
                
            '
                  <tr>
                    <td>
                      <input type="text" name="id[]" 
                       value="'
            $artikel[$i]['id'] .'" readonly />
                    </td>
                    <td>
                      <input type="text" name="menge[]" value="0" />
                    </td>
                    <td>
                      <input type="text" name="bezeichnung[]" 
                       value="'
            $artikel[$i]['bezeichnung'] .'" readonly />
                    </td>
                    <td>
                      <input type="text" name="lieferant[]" 
                       value="'
            $artikel[$i]['lieferant'] .'" readonly />
                    </td>
                  </tr>
                '
            ;
              }
            $form .=
            '
                  <tr>
                    <td colspan="4">
                      <input type="submit" value="Erstellen" />
                    </td>
                  </tr>
                </form>
              </table>
            '
            ;
            echo 
            $form;
            ?>
            Mein Problem ist jetzt, dass das daraus generierte Array so aussieht:
            Code:
            Array ( [id] => Array ( [0] => 26 [1] => 27 [2] => 28 [3] => 29 [4] => 30 [5] => 31 ) 
            [menge] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 
            [bezeichnung] => Array ( [0] => lalala1 [1] => bla [2] => laber [3] => 
            sülz [4] => schnauf [5] => keuch ) 
            [lieferant] => Array ( [0] => 2 [1] => 1 [2] => 1 [3] => 1 [4] => 6 [5] => 1 ) )
            und ich nicht weiß, wie ich jetzt mit der foreach Schleife wieder die Zusammengehörigkeit der einzelnen Elemente herstelle. Die foreach Schleife würde ja dann hier erst alle ids durchlaufen, dann alle mengen,dann alle lieferanten und dann alle bezeichnungen.
            Das will irgendwie nicht in meinen Schädel...

            Kommentar


            • #7
              Die Indizes sind ja dann immer gleich, also kannst du diesem Aufbau folgen:

              PHP-Code:
              $array1 = array('rot''grün''blau');
              $array2 = array('Rubin''Gras''Himmel');
              foreach (
              $array1 as $k => $element1) {
                  
              $element2 $array2[$k];
                  echo 
              $element2' ist '$element1"\n";

              Dennoch wäre es besser, gleich die ID zu haben, damit die Zuordnungen auf jeden Fall erhalten bleiben:

              PHP-Code:
              '
                    <tr>
                      <td>
                        <input type="text" name="id['
              $artikel[$i]['id'] .']" 
                         value="'
              $artikel[$i]['id'] .'" readonly />
                      </td>
                      <td>
                        <input type="text" name="menge['
              $artikel[$i]['id'] .']" value="0" />
                      </td>
                      <td>
                        <input type="text" name="bezeichnung['
              $artikel[$i]['id'] .']" 
                         value="'
              $artikel[$i]['bezeichnung'] .'" readonly />
                      </td>
                      <td>
                        <input type="text" name="lieferant['
              $artikel[$i]['id'] .']" 
                         value="'
              $artikel[$i]['lieferant'] .'" readonly />
                      </td>
                    </tr>
                  ' 
              Zuletzt geändert von AmicaNoctis; 05.08.2010, 23:34.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #8
                So

                PHP-Code:
                <?php
                print_r
                ($_POST);
                echo 
                '<br />';
                foreach(
                $_POST['id'] as $k => $value)
                {
                  
                $id $_POST['id'][$k];
                  
                $menge $_POST['menge'][$k];
                  
                $bezeichnung $_POST['bezeichnung'][$k];
                  
                $lieferant $_POST['lieferant'][$k];

                  echo 
                'Werte für '$k .':';
                  echo 
                '<br />';
                  echo 
                'Die id ist: ' $id '<br />';
                  echo 
                'Die Menge ist: ' $menge '<br />';
                  echo 
                'Die Bezeichnung ist: ' $bezeichnung '<br />';
                  echo 
                'Der Lieferant ist ist: ' $lieferant '<br />';
                  echo 
                '<br />';
                }

                ?>
                bekomme ich dieses Ergebnis:

                Code:
                Array ( [id] => Array ( [0] => 26 [1] => 27 [2] => 28 [3] => 29 [4] => 30 [5] => 31 ) 
                [menge] => Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 ) 
                [bezeichnung] => 
                Array ( [0] => lalala1 [1] => bla [2] => laber [3] => sülz [4] => schnauf [5] => keuch ) 
                [lieferant] => Array ( [0] => 2 [1] => 1 [2] => 1 [3] => 1 [4] => 6 [5] => 1 ) )
                Werte für 0:
                Die id ist: 26
                Die Menge ist: 1
                Die Bezeichnung ist: lalala1
                Der Lieferant ist ist: 2
                
                Werte für 1:
                Die id ist: 27
                Die Menge ist: 2
                Die Bezeichnung ist: bla
                Der Lieferant ist ist: 1
                
                Werte für 2:
                Die id ist: 28
                Die Menge ist: 3
                Die Bezeichnung ist: laber
                Der Lieferant ist ist: 1
                
                Werte für 3:
                Die id ist: 29
                Die Menge ist: 4
                Die Bezeichnung ist: sülz
                Der Lieferant ist ist: 1
                
                Werte für 4:
                Die id ist: 30
                Die Menge ist: 5
                Die Bezeichnung ist: schnauf
                Der Lieferant ist ist: 6
                
                Werte für 5:
                Die id ist: 31
                Die Menge ist: 6
                Die Bezeichnung ist: keuch
                Der Lieferant ist ist: 1
                So halbwegs kapier ich auch warum das so funktioniert. Ich glaub ich schlaf nochmal ne Nacht drüber und zieh mir das ganze morgen früh nochmal rein
                Vielen Dank für die Hilfe

                Kommentar

                Lädt...
                X