checkbox + Delete Statement

Liegt an den ' bzw. "

Die Zeile muss so aussehen
mysql_query('DELETE FROM user WHERE ID = \\''.$_POST['delete'].'\\'');

//oder
mysql_query("DELETE FROM user WHERE ID = '{$_POST['delete']}'");

Aber eigentlich brauchst du bei nem ID Feld keine ' ' um den Wert, da er in der Regel ein numerischer ist.
 
Zuletzt bearbeitet:
HI,

Mein Source-Code sieht jetzt folgendermassen aus, aber er funktioniert noch immer nicht. Ich bekomme zwar kein Pharse Error mehr, aber wenn ich auf denn Submit button klicke um ein Datensatz zu löschen, macht er gar nichts.
Voran kann das liegen ....

PHP:
<?
  ini_set('display_errors', '0');
  include "conn.php";


  $result = mysql_query("SELECT * FROM user");

  if(is_numeric($_POST['delete'])) {

   if ($_POST['delete'] == TRUE) {
    mysql_query('DELETE FROM user WHERE ID = "'.$_POST['delete'].'"');
    printf ("Datensätze gelöscht: %d\n", mysql_affected_rows());
    }
  }
  while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {

       printf ("<table border=\"1\">

                       <tr><form action=delete.php method=post>

                           <td>ID:</td>
                           <td>Firma: </td>
                           <td>Titel: </td>
                           <td>Vorname: </td>
                           <td>Nachname: </td>
                           <td>Email: </td>
                           <td>Tel: </td>
                           <td>Fax: </td>
                           <td>Strasse: </td>
                           <td>Ort: </td>
                           <td>Plz: </td>
                           <td>PIN: </td>

                           </tr>

                       <tr><td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td> %s</td>
                           <td><input type=checkbox name=delete value='".$_POST['ID']."'></td>


                       </tr></table> " ,


                              $row["ID"],
                              $row[1],
                              $row[2],
                              $row[3],
                              $row[4],
                              $row[5],
                              $row[6],
                              $row[7],
                              $row[8],
                              $row[9],
                              $row[10],
                              $row[11]);
    }

  mysql_free_result($result);

  echo "<input type=submit name=submit value=loeschen>";

  echo "</form>";
?>

Nur wenn ich ini_set('display_errors', '1'); setze, dann sagt er das die Variablen delete und ID nicht definiert sind.

Notice: Undefined index: delete in d:\sbx\merti\delete.php on line 8

Notice: Undefined index: ID in d:\sbx\merti\delete.php on line 48


Code:
Die Zeile  8 ist:   if(is_numeric($_POST['delete'])) {
Die Zeile 48 ist: <input type=checkbox name=delete value='".$_POST['ID']."'>

Bitte um Hilfe,

Danke,

Merti
 
Das sind nur notices....

Nur frage ich mich ob du dein IF-Konstrukt nachvollziehen kannst.... ich nicht
PHP:
if(is_numeric($_POST['delete'])) {

   if ($_POST['delete'] == TRUE) {

Wenn dann umgekehrt oder das == TRUE Statement weglassen.... Wenn es numerisch ist, wird auch ein Wert drinstehen und somit ist es zwangsweise TRUE (ausser es wäre eine 0 drin, nur mySQL vergibt beispielsweise per auto_increment keine 0).

Ansonsten bau mal print_r($_POST); nach dem if it is_numeric ein.
Dann siehst du a) ober er nach dem absenden überhaupt ins IF reinläuft und b) welche Werte für welche Daten stehen.
Wenn er nicht reinläuft setze das print_r vor das IF, damit du siehst welche Werte nach dem Senden ankommen und warum ergo deine Bedingung falsch ist.
Und Poste nich immer den ganzen Code sondern wenn dann nur die Teile bei denen es Änderungen gibt...
 
hi,

wenn ich das print_r($_POST); nach dem IF is_numeric reinschreibe, dann wird gar nichts angezeigt, wenn ich es vor dem IF is_numeric schreibe dann wird:

Array ( [submit] => loeschen )

ausgegeben ...
 
Ich krieg irgendwie den ganzen Aufbau von dem Script nicht auf die Reihe. Sehe ich da was falsch, oder woher holt er sich eigentlich die ID des Users?

Er durchläuft doch eine Schleife, in welcher jeder Benutzer angezeigt wird. Neben jedem User wird eine Checkbox ausgegeben welche die ID über eine POST VAR bekommt. Naja das kann ja noch irgendwie hinhauen :rolleyes:.

So aber nun zu dem Delete Statement. Wenn er die Checkbox angeklickt hat, dann kann er doch wenn es mehrere User sind zum löschen, mit foreach() jeweils den einzelnen User aus der Datenbank löschen.

Und er muss überprüfen ob der Submit geklickt worden ist, und dann überprüfen welche Checkboxen geklickt worden sind. Demnach das Statement aufbauen, und raus mit den Leuten.

Für Verbesserungsvorschläge bin ich immer offen :-)

Gruß Mirko
 
weder noch, wie auch aus dem Post ersichtlich (sowohl was er getippt hat als auch die Ausgabe). Denn er gab print_r($_POST) ein.

Wie man sieht übergibt er jedenfalls nichts mit delete... ist auch alles etwas unsauber im HTML-Code.

Zum einen gibst du für jeden User einen Datensatz aus.
Für jeden Datensatz erzeugst du eine Tabelle. Das Form bezieht sich jedoch nur auf eine Tabellenzeile, wird aber nie geschlossen.
Sauber wäre, wenn du das form ausserhalb der Schleife ausgibst, also vor den jeweiligen Tables (und auch nur 1x) und 2.. es nach allen Datenstäzen schliesst.
Da man nun aber mehrere Einträge löschen kann, müssen auch mherere Deleteboxen übergeben werden. Daher ändere den Namen der checkbox auf delete[], dass ein Array übergeben wird und mach mal " bzw ' rein:
So mal grob was ich meine
echo "<form....";
//hier die schleife
while...
{
<input type='checkbox' name='delete[]' value='".$_POST['ID']."'>
}
echo "</form>;

Dies alles, was aber auch nötig ist, zieht nach sich, das das if geänert werden muss. Ausserdem muss dann $_POST['delete'] durchlaufen werden:

PHP:
if( $_POST['submit'] == "delete" ) //Wenn das Formular gesedet wurde
{
  //SQL-Statement bauen
  mysql_query("DELETE FROM user WHERE ID IN (".implode(", ".$_POST['delete'].")");
    printf ("Datensätze gelöscht: %d\n", mysql_affected_rows()); 
 }
//usw

Das Implode bewirkt, dass alle Elemente zu einem String durch komma getrennt zusammengefasst werden und das Statement dann später so aussehen würde
DELETE FROM user WHERE ID IN (1,2,3...)
 
Also zuerst mal eine Frage => warum bekomme ich immer die, komischen NOTICE , für was ist das?

und

Bei mir kommt wenn ich das imopde() einbaue, so ein Fehler:

Code:
Warning: implode(): Bad arguments. in d:\sbx\merti\delete.php on line 10

So sieht der Code jetzt aus:

PHP:
  if( $_POST['submit'] == "delete" )
{
            $delId = implode(",", $_POST['delete']);
            $query = "DELETE FROM user WHERE ID IN (" . $delId . ")";
            printf ("Datensätze gelöscht: %d\n", mysql_affected_rows());
}

echo "<form action=delete.php method=post>";

  while ($row = mysql_fetch_array($result, MYSQL_BOTH)) {

         

.
.
.
.
<input type=checkbox name=delete[] value='".$row['ID']."'>

danke für die Mühe,

lg,

Merti
 
Zurück