lulu: Datensätz per checkbox markieren und löschen

Hallo Leute,

ich hab mir schon einige Beispiele angeschaut, aber irgendwie funktionierts net.
Vielleicht kann mir ja jemand von euch helfen, ich verzweifle.
Also, ich hab ein Formular, womit ich Personen in meine DB eintrage.
Nach dem submitten sind alle Personen auf der Seite in einer Tabelle sichtbar. Bei jedem hinzufügen einer Person wird die Tabelle aktualiesiert.
Die Tabelle enthält checkboxen.
Was muss ich machen, damit markierte Felder gelöscht werden. Sie sollen aus der DB und aus der Tabelle verschwinden.

Wie geht das??????????

Liebe Grüsse lulu

  1. Hallo,

    Die Tabelle enthält checkboxen.
    Was muss ich machen, damit markierte Felder gelöscht werden. Sie sollen aus der DB und aus der Tabelle verschwinden.

    http://www.dclp-faq.de/q/q-formular-checkbox.html

    http://www.mysql.com/doc/de/DELETE.html

    Gruesse,

    Thomas

  2. Hallo!

    Die Tabelle enthält checkboxen.
    Was muss ich machen, damit markierte Felder gelöscht werden. Sie sollen aus der DB und aus der Tabelle verschwinden.

    Alle Checkboxeb bekommen den selben Namen. Ins Value kommt die ID der Person aus der Datenbank.

    <input type="checkox" name="delete[]" value="5"> Lisa Meyer
    <input type="checkox" name="delete[]" value="12"> Werner Otto
    <input type="checkox" name="delete[]" value="15"> Andreas Schmidt

    Im Script steht Dir das Array $_POST["delete"] mit allen ausgewählten Checkboxen zur Verfügung.

    Ja, der Rest ist nur noch Programmierarbeit.

    MfG, André Laugks

    --
    L-Andre @ gmx.de
    1. funktioniert nicht, wat maach ich falsch?

      Der Code:

      <?php
          if(strlen($delete)>1){
          $db=mysql_connect("localhost","root","")
        or die("<b>Connection to the server failed!</b>");
       mysql_select_db("syscon")
        or die("Connection to the database failed!</b>");

      foreach ($_POST['person'] as $person.id => $id)
      {
        if (0 < strlen($where)) {
          $where .= " OR (id=$id)";}
        else                      {
          $where = "(id=$person.id);
                                 }

      $queryl = "DELETE FROM person, reviewer WHERE $where";
        mysql_query($queryl)
        or die("<b>Query l failed!</br>");
        } }
       ?>

      Irgenwie komm ich nicht weiter

      1. Hello Lulu,

        <?php
           $con = mysql_connect("localhost","root","")
             or die("<b>Connection to the server failed!</b>");
           $db = mysql_select_db("syscon")
             or die("Connection to the database failed!</b>");

        if (($_POST["btn"]["delete"]) and count($_SESSION["idlist"]) > 0))
           {
             if (count($_POST['person']['delete']) > 0)
             {
               foreach($_POST['person']['delete'] as $id)
               {
                 ## prüfen, ob die Löschanforderungen gerechtfertigt sind
                 if(!is_numeric($id) or !in_array($id, $_SESSION["idlist"]))
                 {
                   ## Fehlerbehandlung wegen Fake
                   ## exit;
                 }
               }

        ## CSV-Liste aufbauen
               $idlist = implode(",",$_POST['person']['delete']);

        $query = "DELETE FROM person, reviewer WHERE ID in $idlist";
               $res = mysql_query($query);

        if ($res > 0)
               {
                 echo "$res Datensätze wurden gelöscht<br>";
               }

        }
           }

        ?>

        Und nun die Listendefinition in HTML:

        ...
        <input type="checkbox" name="[person][delete]" value="<?= $id ?>">
        ...
        <input type="submit" name="[btn][delete]" value="Löschen">

        Schleife drum und ab dafür...
        So ist alles schön sortiert.

        Ich hoffe, ich habe nix vergessen.

        Das Listen.script darf natürlich nicht vergessen, die $_SESSION["idlist"] zu füllen.

        Liebe Grüße

        Tom

        1. Hello Lulu,

          Sind natürlich wieder Fehler drin...
          »

          $query = "DELETE FROM person, reviewer WHERE ID in $idlist";
                 $res = mysql_query($query);

          Sollte besser heißen:

          $query = "DELETE FROM person, reviewer WHERE ID in ($idlist)";
             $res = mysql_query($query,$con);

          Und danach könnte man gleich wieder die List-Funktion benutzen, die die Datensätze erneut einliest aus der DB und in einer Tabelle anzeigt. Und nicht vergessen, die ausgelieferten Sätze in $_SESSION["idlist"] (array() einzutragen.

          Grüße

          Tom

          1. Hello zusammen,

            habe noch mal die Fehler rausgepult aus dem Script. Hier für alle, die es interessiert:

            Kontrollausgaben habe ich erst einmal drin gelassen.

            <?php

            #  include("defConst1.inc.php");
            #  include("funcLib.inc.php");

            #-- hier die Connection herstellen und DB auswählen---------------
              $con = mysql_connect(         );
              $db = mysql_select_db(         );

            Table TEST    # Nur als Beispiel

            ID_TEST       bigint   autoincrement  primary key

            VARC          varc(20)

            ZAHL          int (10)

            #-----------------------------------------------------------------

            session_start();

            #-------------------------------------------------------------------------

            function show_list($res)
            {

            $_SESSION["idlist"] = array();

            echo "<table border="1">\n";

            while ($rec = mysql_fetch_assoc($res))
              {
                echo "<tr>\n";

            echo "<td><input type="checkbox"\n".
                     "           name="person[delete][]"\n".
                     "           value="".$rec["ID_TEST"].""></td>\n";
                $_SESSION["idlist"][] = $rec["ID_TEST"];

            $rec = array_map("htmlentities", $rec);

            foreach($rec as $key => $val)
                {
                  echo "<td>$val</td>\n";
                }

            echo "</tr>\n";
              }

            echo "</table>\n";

            }

            #-------------------------------------------------------------------------
            function show_btn()
            {
              echo "<br /><input type="submit" name="btn[delete]" value="markierte Löschen" /><br />\n";
            }

            #=========================================================================
            #  Hauptprogramm
            #=========================================================================

            echo "<pre>";
              print_r($_POST);
              echo "</pre>";

            if (($_POST["btn"]["delete"]) and (count($_SESSION["idlist"]) > 0))
               {
                 if (count($_POST['person']['delete']) > 0)
                 {
                   foreach($_POST['person']['delete'] as $id)
                   {
                     ## prüfen, ob die Löschanforderungen gerechtfertigt sind
                     if(!is_numeric($id) or !in_array($id, $_SESSION["idlist"]))
                     {
                       ## Fehlerbehandlung wegen Fake
                       ## exit;
                     }
                   }

            ## CSV-Liste aufbauen
                   $idlist = implode(",",$_POST['person']['delete']);

            $query = "DELETE FROM TEST WHERE ID_TEST in ($idlist)";

            #########################################
                   echo "ID-Liste: ($idlist)<br />";
                   echo "MySQL: ".mysql_error()."<br />";

            $res = mysql_query($query);

            echo mysql_affected_rows($con)." Datensätze wurden gelöscht<br>";

            }
               }

            ## Daten anzeigen

            $query = "Select ID_TEST, VARC, ZAHL from TEST";
              $res = mysql_query($query,$con);

            echo "<form action="".$_SERVER["PHP_SELF"].""\n".
                   "      method="POST"\n".
                   "      enctype="multipart/form-data">\n";

            echo "<input type="hidden" name="hid">\n";

            if ($res)
              {
                show_list($res);
                show_btn();
              }

            echo "</form>\n";

            echo "Session-Nr: ".session_id()."<br />";
              echo "<pre>";
              print_r($_SESSION);
              echo "</pre>";

            ?>

            Viel Spaß beim Weiterentwickeln.

            Grüße

            Tom

  3. Hello Lulu,

    Also, ich hab ein Formular, womit ich Personen in meine DB eintrage.
    Nach dem submitten sind alle Personen auf der Seite in einer Tabelle sichtbar. Bei jedem hinzufügen einer Person wird die Tabelle aktualiesiert.
    Die Tabelle enthält checkboxen.
    Was muss ich machen, damit markierte Felder gelöscht werden. Sie sollen aus der DB und aus der Tabelle verschwinden.

    Da habe ich ja eben glatt was ähnliches angestoßen. [pref:t=62995&m=356624]

    Ich würde das auf keinen Fall ohne ausgeklügelten Session-Mechanismus machen. Es können nur die Datensätze gelöscht werden, die auch an den Client übermittelt wurden. Dazu muss in der Session eine Liste hinterlegt werden. Also nicht einfach die IDs aus dem Formular 1:1 an das Delete-Query weitergeben.

    Beim Aufruf der Liste werden die IDs in die Session eingetragen und beim nächsten Aufruf mit Delete-Anforderung wird erst geschaut, ob sie da auch drinstehen.

    Und dann kann man

    delete from Table where ID in $liste and Userrights <= $userrights;

    benutzen. $liste ist ein CSV-String, den man ja wunderbar aus einem Array erzeugen kann. Er sollte numerisch aufsteigend sortiert sein, das steigert die Performance des Querys ungemein.

    Grüße

    Tom

    1. Hallo Tom,

      sag ma, hast du ein kleines Beispiel oder so.
      Ich krieg das überhaupt nicht hin.
      Ich weiss nicht weiter.

      Gruss lulu

  4. .... ist zu klein für uns beide, Fremder  *nervös am Holster fingernd*

    Huhu lulu

    es sei Dir natürlich unbenommen den schönen Namen lulu als Nick zu wählen.
    Wenn Du allerdings vorhast öfter hier zu posten würde ich es begrüssen
    wenn Du Dir etwas überlegst damit man uns unterscheiden kann.
    Z.B. Lulu mit grossem "L".

    Ansonsten können wir das auch gerne um zwölf Uhr mittags auf der staubigen Hauptstrasse regeln ... ;-)

    Viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hallo!

      .... ist zu klein für uns beide, Fremder  *nervös am Holster fingernd*

      Huhu lulu

      es sei Dir natürlich unbenommen den schönen Namen lulu als Nick zu wählen.

      Ich habe mir schon Sorgen gemacht, daß diese Frage von Dir kommt. Ich kenne es ja von mir. Da macht man schon lange, aber man kann immer noch nicht alles..

      MfG, André Laugks

      --
      L-Andre @ gmx.de