Kai: dynamisches löschen einer reihe ????

Hallo Zusammen hab da ein Problem !!

hab gerade auss meiner datenbank eine gwisse id gelöscht it folgendem befehl:

$sql =" DELETE FROM gallery WHERE id= 63 ";

hat auch funktioniert möchte nun aber das ganze etwas dynamischer halten das der kunde der die id nicht kennt in einem backend
einzelne reihen einer tabelle löschen kann anhand der id.

also das nach dem abruf aus der datenbank gleichzeitig ein löschen knopf generiert wird mit der variable meiner id oder so.....

vieleicht nicht gut erklärt aber
vieleicht versteht jamand was ich meine

thx Kai

  1. Hi,

    wenn du die Daten ausgeben lässt (mittels PHP schätzungsweise) - sicher in einer Art Schleife - dann schreibst du einfach bevor die Daten des Datensatzes (Zeile oder Reihe) ausgegeben werden einfach die HTML-Tags für ein typisches HTML-Formular mit _action_ und z.b. einem versteckten <input type="hidden"> (rate mal, was davon der _value_ sein wird) Formularfeld und einem <input type="submit">-Button.

    So gibt es dann für jede ausgegebene Reihe/Zeile/Datensatz ein Formular was zum Löschen des entsprechenden Datensatzes anhand der mitgegebenen ID führen wird.

    Ciao. Frank

    1. Hi Frank,

      wenn du die Daten ausgeben lässt (mittels PHP schätzungsweise)

      ja mach ich und zwar so:
      <body bgcolor="#ffffff" text="#100000">
      <table width="80%"border="1" cellpadding="0" cellspacing="0">

      <?

      $sql = "select titel, bilder, beschreibung,id from gallery ORDER BY id desc";
          $rs = mysql_query($sql);
           while($arr = mysql_fetch_array($rs)) {
           echo"<tr>
                 <td colspan='6' width='100%'>"."$arr[titel]"."</td>
                 </tr>
                 <tr>
                 <td colspan='6' width='100%'><img src='img/px.gif' width='1' height='10'></td>
                 </tr>
                 <tr>
                 <td width='25%'><img src='test/"."$arr[bilder]"."' width='150'></td>
                 <td width='10'><img src='img/px.gif' width='10' height='1'></td>
                 <td width='75%' valign='top'>"."$arr[beschreibung]"."</td>
                 <td width='10'><img src='img/px.gif' width='10' height='1'></td>
                 <td width='75%' valign='top'>"."$arr[id]"."</td>
                 <td>

      </td>
                 <td width='10'><img src='img/px.gif' width='100' height='1'></td>
                </tr>
                <tr>
                 <td colspan='6' width='100%'><img src='img/px.gif' width='1' height='10'></td>
                 </tr>";
             }
        ?>
        </table>

      wo soll ich denn den formular tag einbauen ??

      1. hi nochmal,

        vor <tr> - also vor der Zeile kommt das <form action.. method..> hin,
        dahinter gleich das <input type="hidden" name="id" value="$arr[id]">, in der letzten Spalte dann der <input type="submit"> und nach dem </tr> das schliessende </form>-Tag.

        ... ich bin kein PHP-Fachmann, also wenn da ein Syntax-Fehler drin ist bei $arr .. sorry ;-)

        als Action solltest du evt. die gleiche PHP-Seite wieder aufrufen und bevor du das "Select from" machst das "Delete" durchführen ... dass solltest du u.U. auch über einen GET-Parameter in der Form-Action steuern.

        Gruß, Frank

        1. Hallo Frank,

          vor <tr> - also vor der Zeile kommt das <form action.. method..> hin,

          nein, das ist falsch - an dieser Stelle darf kein form-Element stehen. Das <form> muss entweder außen um <table> rum, oder in ein <td> rein.

          Grüße aus Nürnberg
          Tobias

          --
          Selfcode: sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
          1. Hi,

            für dich zum Mitmeißeln, denn falsch ist es nicht (nur nicht vollständig in valides HTML gehüllt).

            vor <tr> - also vor der Zeile kommt das <form action.. method..> hin,

            damit behalte ich auch weiterhin Recht ...

            #schleife anfang
            <tr>
              <td>
                <form>
                  <table>
                    <tr>
                      <td>Wert</td>
                      <td>Wert</td>
                      <td>Wert</td>
                      <td>Wert</td>
                      <td><input type="submit"></td>
                    </tr>
                  </table>
                </form>
              </td>
            </tr>
            #schleife ende

            Frank

            1. hi nochmal,

              meine schleife sieht jetzt so aus :

              <?

              $sql = "select titel, bilder, beschreibung,id from gallery ORDER BY id desc";
                  $rs = mysql_query($sql);
                   while($arr = mysql_fetch_array($rs)) {
                   echo"

              <tr>
                         <td colspan='6' width='100%'>"."$arr[titel]"."</td>
                         </tr>
                         <tr>
                         <td colspan='6' width='100%'><img src='img/px.gif' width='1' height='10'></td>
                         </tr>
                         <tr>
                         <td width='25%'><img src='test/"."$arr[bilder]"."' width='150'></td>
                         <td width='10'><img src='img/px.gif' width='10' height='1'></td>
                         <td width='75%' valign='top'>"."$arr[beschreibung]"."</td>
                         <td width='10'><img src='img/px.gif' width='10' height='1'></td>
                         <td width='75%' valign='top'>
                         <form enctype='multipart/form-data' action='losch.php' method='post'>

              <input type='hidden' name='id' value='"."$arr[id]"."'><br>
                         <input type='submit' value='loschen'>
                         </td>
                         <td>

              </td>
                         <td width='10'><img src='img/px.gif' width='100' height='1'></td>
                        </tr>
                        <tr>
                         <td colspan='6' width='100%'><img src='img/px.gif' width='1' height='10'></td>
                         </tr>";
                     }
                ?>

              aber was schreib ich in meinen action befehl: ???

              <?php

              include "../../includes/connect.php";

              if (isset($Submit)) {
                 $sql =" DELETE FROM gallery WHERE name='id' ";
                 $res = mysql_query($sql);
                 if ($res) {
                  echo "Newsbox geleert, bitte neuen eintragen<br><br>Bitte News-Daten <a href='eintrag_infobox_db.php' target='frameco'> <u>hier</u> </a>aktualisieren";
                 }
                 else {
                  echo "Konnte die News- page nicht aktualisieren  :-(  !!<br><br><a href='../eingeloggt.php' target='frameco'>zurück zum Admin-Bereich</a>";
                 }
                }
                else {
                ?>

              ;-(

              please help !!!!

        2. hi nochmal,

          meine schleife sieht jetzt so aus :

          <?

          $sql = "select titel, bilder, beschreibung,id from gallery ORDER BY id desc";
              $rs = mysql_query($sql);
               while($arr = mysql_fetch_array($rs)) {
               echo"

          <tr>
                     <td colspan='6' width='100%'>"."$arr[titel]"."</td>
                     </tr>
                     <tr>
                     <td colspan='6' width='100%'><img src='img/px.gif' width='1' height='10'></td>
                     </tr>
                     <tr>
                     <td width='25%'><img src='test/"."$arr[bilder]"."' width='150'></td>
                     <td width='10'><img src='img/px.gif' width='10' height='1'></td>
                     <td width='75%' valign='top'>"."$arr[beschreibung]"."</td>
                     <td width='10'><img src='img/px.gif' width='10' height='1'></td>
                     <td width='75%' valign='top'>
                     <form enctype='multipart/form-data' action='losch.php' method='post'>

          <input type='hidden' name='id' value='"."$arr[id]"."'><br>
                     <input type='submit' value='loschen'>
                     </td>
                     <td>

          </td>
                     <td width='10'><img src='img/px.gif' width='100' height='1'></td>
                    </tr>
                    <tr>
                     <td colspan='6' width='100%'><img src='img/px.gif' width='1' height='10'></td>
                     </tr>";
                 }
            ?>

          aber was schreib ich in meinen action befehl: ???

          <?php

          include "../../includes/connect.php";

          if (isset($Submit)) {
             $sql =" DELETE FROM gallery WHERE name='id' ";
             $res = mysql_query($sql);
             if ($res) {
              echo "Newsbox geleert, bitte neuen eintragen<br><br>Bitte News-Daten <a href='eintrag_infobox_db.php' target='frameco'> <u>hier</u> </a>aktualisieren";
             }
             else {
              echo "Konnte die News- page nicht aktualisieren  :-(  !!<br><br><a href='../eingeloggt.php' target='frameco'>zurück zum Admin-Bereich</a>";
             }
            }
            else {
            ?>

          ;-(

          please help !!!!

  2. Hello,

    wichtig ist, dass Du dir nicht ein Scheunentor öffnest.

    Habe da mal einen Denkansatz zum Thema fertig gemacht:

    <?php

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

    #  Hier wird die Datenbankverbindung hergestellt.
     #  $con erhält das Verbindungshandle

    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&ouml;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);
      print_r($_POST);
      echo "</pre>";

    ?>

    Es ist sinnvoll, Löschaktionen nur durch authentifizierte Benutzer durchführen zu lassen. Die zugänglichen Datensätze werden in der Session mit ID eingetragen und beim Löschpost nur dann gelsöscht, wenn sie in dieser Liste drinstehen. Damit ist ausgeschlossen, dass jemand ohne Session oder jemand mit Session aber mangelnden Tabellenrechten Datensätze Löschen kann. Man kann ja in den Datensatz eine Ownerkennung eintragen, die man dann beim Select für den Löschvorschlag abfragt.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    [ Computer-Camp für PHP-Anwender in den Sommerferien. Programmieren,
      Sport, Fun, Fete. Teilnehmermindestalter Gruppe 1: 14 Jahre
      Mindestalter Gruppe 2+3 18 Jahre, Info bei mir ]
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen