Delete Anweisung funktioniert nicht.

blackrunner

Grünschnabel
PHP:
Hallo hier ist wieder der Grünschnabel.
Ich versuche gerade eine Delete Anweisung zu schreiben die mir aus dem Checkbox die gewählt ID löscht. leider klappt das nicht "Deleted Successfully" kommt zurück, aber aus dem Datenbank wird nicht gelöscht.  vielleicht könnte Ihr hier mir Helfen.  


// PHP
<tr>
<td align="center" bgcolor="#FFFFFF"><input name="checkbox" type="checkbox" id="checkbox[]" value="<?PHP echo $rows['obj_artID']. $rows['obj_art']; ?>"></td>
<td bgcolor="#FFFFFF"><?PHP echo $rows['obj_artID']; ?></td>
<td bgcolor="#FFFFFF"><?PHP echo $rows['obj_art']; ?></td>

</tr>

// Delete data hir
$sql="DELETE FROM tbl_object_art WHERE obj_artID='id'";
$result=mysql_query($sql);

// if successfully deleted
if($result){
echo "Deleted Successfully";
 
Zuletzt bearbeitet:
Bitte formatiere deine Codes mit [code=php] ... [/code].

Dann zu deinem Anliegen:
Natürlich ist die Abfrage erfolgreich, weil du ja nach obj_artID='id' suchst, welches nicht existiert - somit wird nix geändert, aber die Abfrage wird ausgeführt und ist auch erfolgreich. (Bzw. sie scheitert nicht, darum gehts hier...)

Vielleicht solltest du das ändern?

Bei deiner Tabelle fällt mir noch auf, dass du mit id="checkbox[]" arbeitest. Hier solltest du name verwenden, es sei denn du löscht per Ajax. Dann lass es wie es ist.
Wie du mit Checkboxen+Arrays umgehst, kannst du am besten einfach mal googlen. Du musst natürlich auch etwas auslesen...
 
Je nach dem was du für ein Formular verwendest, führe mal ein
PHP:
var_dump($_POST);
//oder
var_dump($_GET);
aus. Da findest du deine Daten und kannst entsprechend mit umgehen.
 
@nchristoph
Das kommt glaub nicht drauf an. Sein SQL sieht so aus
PHP:
$sql="DELETE FROM tbl_object_art WHERE obj_artID='id'";

Ergo nimmt er die Daten bei denen obj_art den String 'id' haben. Ich denke dort liegt wirklich ein Problem...
 
Hi,
das problem habe ich gelöst.. Meine Lösung sieht so aus :

PHP:
if(isset($_POST['delete']))
	{
		 $delete_id = $_POST['chkDel'];
		 //$obj_artID = count($delete_id );
		
			
				$sql = "DELETE FROM `tbl_object_art` WHERE obj_artID='$delete_id'";
				$delete = mysql_query($sql);
			
	
// if successfully deleted
echo "Deleted Erfolgreich durchgef&uuml;hrt";
echo "<BR>";
echo "<BR>";
echo "<a href='delete.php'>Zur&uuml;ck</a>";
}

?>


<?php
// close connection
mysql_close();
?>
 
Ist a) mutig, weil du ausgibst das gelöscht wurde ohne zu prüfen und b) gefährlich weil du ekin mysql_escape_string() um deine $delete_id verwendest
 
Yaslaw hat Recht, da musste nochmal ran.
PHP:
<?php
if(isset($_POST['delete']))
{
         $delete_id = mysql_real_escape_string($_POST['chkDel']);
         //$obj_artID = count($delete_id );
         $sql = "DELETE FROM `tbl_object_art` WHERE obj_artID='$delete_id'";
         $delete = mysql_query($sql);
          
         // if successfully deleted
         if($delete && mysql_affect_rows() === 1)
         {
                echo "Eintrag erfolgreich gel&ouml;scht.";
                echo "<BR><BR>";
                echo "<a href='delete.php'>Zur&uuml;ck</a>";
          } else {
                echo "Fehler. L&ouml;schversuch fehlgeschlagen.";
                echo "<BR><BR>";
                echo "<a href='delete.php'>Zur&uuml;ck</a>";
          }
}

// close connection
mysql_close();
?>
 
Zuletzt bearbeitet:
sry Lime, doch das ist ja eben unvollständig
PHP:
         $delete = mysql_query($sql);
          
         // if successfully deleted
         if($delete){

php-Doku hat gesagt.:
Nur für SELECT, EXPLAIN, SHOW oder DESCRIBE Anweisungen liefert mysql_query() eine Ressourcen-Kennung oder FALSE, falls die Anfrage nicht korrekt ausgeführt wurde. Für alle anderen SQL Anweisungen ist der Rückgabewert von mysql_query() im Erfolgsfall TRUE, im Fehlerfall FALSE. Ein Rückgabewert ungleich FALSE bedeutet, dass die Anfrage gültig war und vom Server ausgeführt werden konnte. Das alleine sagt jedoch überhaupt nichts über die Anzahl veränderter oder gelieferter Datensätze aus. Es ist durchaus möglich, dass eine Anfrage erfolgreich war, ohne einen einzigen Datensatz zur verändern oder zu liefern.

Darum sollte es so aussehen
PHP:
         $delete = mysql_query($sql);
          
         // if successfully deleted
         if($delete && mysql_affect_rows() === 1){
 
Zurück