hueddengammler: checkbox Wertübergabe

hallo,

tut mir echt leid weil das Problem ja schon in dem Forum steht aber ganz ehrlich die dort beschriebenen Lösungen funzen nicht aber ich verstehe diese auch nicht wirklich.

ich möchte bestimmte Datensätze aus einer mysql Datenbank löschen.
Über ein Suchformular kann man sich bestimmte Datensätze anzeigen lassen. Jeder Datensatz ist mit einer Checkbox versehen, der die ID der Datensätze übergibt. Beim drücken des submit buttons sollen die ID an eine SQL Syntax übergeben werden, die dann die entsprechenden Datensätze löscht. Klappt auch soweit; ABER:
Es wird immer nur eine ID also ein Wert übergeben und zwar der als letztes angeklickte.
Wie kann ich mehrere Werte übergeben?

hier habt ihr ein bischen source code

echo "<table border=1 cellpadding=4>";
echo "<th align=center>Wochentag</th>";
echo "<th align=center>Datum</th>";
echo "<th align=center>Von</th>";
echo "<th align=center>Bis</th>";
echo "<th align=center>Thema</th>";
echo "<th align=center>Gebucht durch</th>";
echo "<th align=center>Löschen</th>";

/*Teil der ausgelesenen Daten anzeigen*/
$Buchungen = mysql_query($Buchungenabfrage, $link);
while ($row = mysql_fetch_row ($Buchungen)){

echo "<tr>";
 echo "<td>$row[0]</td><td>$row[1]</td>";

/*Button zum löschen mit Wertübergabe*/

echo "<td><form action='./auswerten.php' method='post'>";
echo "<input type='checkbox' name=id[] 'value='".$id."'></input>";
 echo "</td></tr>";

}

Auswerte script
aber er zeigt mir halt immer nur die id aus der lezten zeile hier an
<?
for($i=0;$i<10;$i++){
 echo "$i = $id[$i]";
}
?>

  1. Hi,

    while ($row = mysql_fetch_row ($Buchungen)){

    [...]

    echo "<td><form action='./auswerten.php' method='post'>";
    echo "<input type='checkbox' name=id[] 'value='".$id."'></input>";

    [...]

    }

    um den name-Attributwert fehlen die Anführungszeichen (zwingend vorgeschrieben wegen der []).
    input hat in HTML kein schließendes Tag, in XHTML würd ich auch eher zu  <input /> raten.
    Das schließende form-tag fehlt.

    Du verschachtelst also (unzulässigerweise) mit der Schleife so viele form-Elemente, wie Du Ergebniszeilen von Deiner Datenbank bekommst.

    Daß danach alles schiefgeht, ist ja wohl kein Wunder...

    cu,
    Andreas

    --
    Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
    http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/
  2. Es sollte
    echo "<input type='checkbox' name='id[$id]' />";
    heissen. Dann solltest Du zur Auswertung auf $_POST zugreifen:
    $ids = array_keys($_POST["id"])
    $ids enthält dann ein Feld mit den id-Werten der ausgewählten Checkboxen.

    MfG
    GK

    1. Es sollte
      echo "<input type='checkbox' name='id[$id]' />";
      heissen. Dann solltest Du zur Auswertung auf $_POST zugreifen:
      $ids = array_keys($_POST["id"])
      $ids enthält dann ein Feld mit den id-Werten der ausgewählten Checkboxen.

      MfG
      GK

      so wie es oben steht habe ich es gemacht jedoch kommt dann bei der auswertung für jede id die fehlermeldung......
      "Warning: First argument to array_keys() should be an array in /var/www/Projekt/Neueste/auswerten.php on line 3"

      trotzdem auf jedenfall danke

      1. Du mußt
        <input type='checkbox' name='id[$id]' />
        jeweils für jeden $id-Wert deiner Datensätze ausgeben. Im HTML Text steht dann z.B.
        <input type='checkbox' name='id[23]' />
        <input type='checkbox' name='id[74]' />
        <input type='checkbox' name='id[12]' />
        Schau dir mal den HTML Quelltext an, den Du beim Abrufen der Seite bekommst und prüfe, ob das so auch erzeugt wird. Natürlich müssen die Tags noch innerhalb der Form stehen. Wenn das alles nix hilft, laß die die Variable $_POST ausgeben. Dazu hier eine einfach Funktion, die zum Debuggen recht nützlich sein kann:

        function Display(&$var)
          {
            if (is_array($var))
            {
              $count = 0;
              echo "{";
              foreach($var as $key => $value)
              {
                if (0 < $count)
                  echo ", $key=>";
                else
                  echo "$key=>";
                Display($value);
                ++$count;
              }
              echo "}";
            }
            else if (is_integer($var))
            {
              echo $var;
            }
            else if (is_bool($var))
            {
              echo $var ? "true" : "false";
            }
            else if (null == $var)
            {
              echo "null";
            }
            else if (is_string($var))
            {
              echo "'$var'";
            }
            else if (is_object($var))
            {
              echo "{class=", get_class($var);
              $properties = get_object_vars($var);
              Display($properties);
              echo "}";
            }
            else
            {
              echo $var;
            }
          }

        Schreib dann einfach mal am Anfang
        Display($_POST);
        Dann sieht Du in der Ausgabe, was du an Formularwerten bekommen hast.

        Versuche es mal mit dem folgenden Script unter dem Namen test.php:

        <?php
          funktion Display
          .....

        if ("POST" == $_SERVER["REQUEST_METHOD"])
          {
            Display($_POST);
            $keys = array_keys($_POST["id"]);
            Display($keys);
          }
          else
          {
        ?>
          <html>
            <body>
              <form action="test.php" method="POST">
                <input type='checkbox' name='id[23]' />
                <input type='checkbox' name='id[74]' />
                <input type='checkbox' name='id[12]' />
                <input type='submit' value='submit'/>
              </form>
            </body>
          </html>
        <?php
          }
        ?>

        Wenn Du die letzten beiden Checkboxen auswählst und das Fomular abschickst, solltest Du folgende Ausgabe erhalten:
        {id=>{74=>'on', 12=>'on'}}{0=>74, 1=>12}

        Natürlich mußt Du noch die Funktion Display an den Anfang des Scripts kopieren, wie angedeutet.

        MfG
        GK

        1. Danke...... habe den Fehler gefunden. Der war ganz simpel
          und zwar habe ich eine while schleife in dieser stand "<form></form>"
          das heist er hat pro zeile immer ein formular geöffnet mit dem gleichen namen.....
          trotzdem danke!!!

          Du mußt
          <input type='checkbox' name='id[$id]' />
          jeweils für jeden $id-Wert deiner Datensätze ausgeben. Im HTML Text steht dann z.B.
          <input type='checkbox' name='id[23]' />
          <input type='checkbox' name='id[74]' />
          <input type='checkbox' name='id[12]' />
          Schau dir mal den HTML Quelltext an, den Du beim Abrufen der Seite bekommst und prüfe, ob das so auch erzeugt wird. Natürlich müssen die Tags noch innerhalb der Form stehen. Wenn das alles nix hilft, laß die die Variable $_POST ausgeben. Dazu hier eine einfach Funktion, die zum Debuggen recht nützlich sein kann:

          function Display(&$var)
            {
              if (is_array($var))
              {
                $count = 0;
                echo "{";
                foreach($var as $key => $value)
                {
                  if (0 < $count)
                    echo ", $key=>";
                  else
                    echo "$key=>";
                  Display($value);
                  ++$count;
                }
                echo "}";
              }
              else if (is_integer($var))
              {
                echo $var;
              }
              else if (is_bool($var))
              {
                echo $var ? "true" : "false";
              }
              else if (null == $var)
              {
                echo "null";
              }
              else if (is_string($var))
              {
                echo "'$var'";
              }
              else if (is_object($var))
              {
                echo "{class=", get_class($var);
                $properties = get_object_vars($var);
                Display($properties);
                echo "}";
              }
              else
              {
                echo $var;
              }
            }

          Schreib dann einfach mal am Anfang
          Display($_POST);
          Dann sieht Du in der Ausgabe, was du an Formularwerten bekommen hast.

          Versuche es mal mit dem folgenden Script unter dem Namen test.php:

          <?php
            funktion Display
            .....

          if ("POST" == $_SERVER["REQUEST_METHOD"])
            {
              Display($_POST);
              $keys = array_keys($_POST["id"]);
              Display($keys);
            }
            else
            {
          ?>
            <html>
              <body>
                <form action="test.php" method="POST">
                  <input type='checkbox' name='id[23]' />
                  <input type='checkbox' name='id[74]' />
                  <input type='checkbox' name='id[12]' />
                  <input type='submit' value='submit'/>
                </form>
              </body>
            </html>
          <?php
            }
          ?>

          Wenn Du die letzten beiden Checkboxen auswählst und das Fomular abschickst, solltest Du folgende Ausgabe erhalten:
          {id=>{74=>'on', 12=>'on'}}{0=>74, 1=>12}

          Natürlich mußt Du noch die Funktion Display an den Anfang des Scripts kopieren, wie angedeutet.

          MfG
          GK

          1. Hi,

            Danke...... habe den Fehler gefunden. Der war ganz simpel
            und zwar habe ich eine while schleife in dieser stand "<form></form>"
            das heist er hat pro zeile immer ein formular geöffnet mit dem gleichen namen.....
            trotzdem danke!!!

            Das hab ich Dir doch schon geschrieben...

            cu,
            Andreas

            --
            Der Optimist: Das Glas  ist halbvoll.  - Der Pessimist: Das Glas ist halbleer. - Der Ingenieur: Das Glas ist doppelt so groß wie nötig.
            http://mud-guard.de/? http://www.andreas-waechter.de/ http://www.helpers.de/