Zwack: Problem mit forms und array

Hallo!

Als Newbie scheitere ich bei einem Denkansatz mehrere Texteingabefelder in mehreren Spalten einer Tabelle mit (logisch) mehreren Zeilen paralell zu verarbeiten.

Innerhalb der Form in der Tabelle definiere ich die Eingabefelder wie folgt:
<?php
//Funktion innerhalb des forms

$int_ID=$reihe_tabelle['id'];
print '<input name="frm_gb['.$int_ID.']" type="text" size="10" maxlength="10">';

$int_ID2=$reihe_tabelle['id'];
print '<input name="frm_gb2['.$int_ID2.']" type="text" size="15" maxlength="15">';
?>

Die Verarbeitung für eine der beiden Spalten funktioniert so:

<?php
// Funktion nach absenden des Forms

if(isset($_POST['frm_gb']))
{
    foreach($_POST['frm_gb'] as $int_EintragID  => $arr_Actions)
    {
$sql= "UPDATE tabelle SET feld1='$arr_Actions' WHERE id ='$int_EintragID'";
    }
}
?>

Beide Spalten nacheinander zu verarbeiten, also in diesem Fall auch noch eine nachfolgende Abfrage ala
if(isset($_POST['frm_gb2']))
{
...
}
zu setzen geht ja schon nur jetzt bekomme ich es aber nicht hin, dass beide Spalten nach Absenden des Forms innerhalb EINER Schleife verarbeitet werden, was besonders wichtig ist, weil ich diese Funktion nicht nur für sql-Update-Kommandos sondern auch für Insert-Anweisung verwenden möchte. Arrays sind für mich da immer noch ein Rätsel...
Ist der Ansatz im Formular schon falsch, oder muss die Verarbeitung anders erfolgen?

  1. Hello,

    man kann auch gleich mehrdimensionale Arrays benutzen

    print '<input name="frm_gb[$zeile][$spalte]" type="text" size="10" maxlength="10">';

    Und vergiss nicht, das SQL-Statement gegen SQL-Injection abzusichern
    http://de.wikipedia.org/wiki/SQL-Injection

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hallo!

      Tut mir leid, aber ich werde nicht schlau daraus, vor allem, wie ich das nach Absenden des Formulars verarbeiten soll.

      Hello,

      man kann auch gleich mehrdimensionale Arrays benutzen

      print '<input name="frm_gb[$zeile][$spalte]" type="text" size="10" maxlength="10">';

      Und vergiss nicht, das SQL-Statement gegen SQL-Injection abzusichern
      http://de.wikipedia.org/wiki/SQL-Injection

      Liebe Grüße aus dem schönen Oberharz

      Tom vom Berg

      1. Hello,

        Hallo!

        Tut mir leid, aber ich werde nicht schlau daraus, vor allem, wie ich das nach Absenden des Formulars verarbeiten soll.

        Hast Du es denn wenigstens schon mal probiert?

        <?php   ### grid.php ###

        $form = '<form method="post" enctype="multipart/form-data" action="'.$_SERVER['SCRIPT_NAME']."">\r\n";

        for ($zeile = 1; $zeile <= 10 ; $zeile++)
          {
             $form .= "<p>\r\n";
             for ($spalte = 1; $spalte <=5; $spalte++)
             {
                 $form .= "<input name="frm_gb[$zeile][$spalte]" type="text" size="10" maxlength="10">\r\n";
             }
             $form .=  "</p>\r\n";
          }

        $form .= '<input type="submit" name="btn[insert]" value="hinzufügen">'."\r\n";
          $form .= '<input type="submit" name="btn[update]" value="ändern">'."\r\n";
          $form .= "</form>\r\n";

        if (isset($_POST['btn']))
          {
              echo "<pre>\r\n";
              echo htmlspecialchars(print_r($_POST,1));
              echo "</pre>\r\n";
              echo '<a href ="'.$_SERVER['SCRIPT_NAME'].">Zum Formular</a>\r\n";
          }
          else
          {
              echo $form;
          }

        ?>

        Von hier aus solltest Du aber alleine weiter kommen.
        Anstelle des print_r() kannst Du die Daten dann verarbeiten.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de