Löschen eines Datensatzes

Chucky-GFX

Mitglied
Löschen eines Datensatzes aus der Datenbank....

PHP:
 echo "<td><a href=details.php?action=del><img src=del.jpg alt=Löschen></a><td>";
 				if($action==del)
 				{
 		    		mysql_query("DELETE FROM test WHERE (vorname = $vorname AND nachname = $nachname)");
 				}
 			echo "</tr>";

was ist hier falsch er löscht einfach nicht ;(
wenn ihr weitere informationen braucht bitte posten !
 
Versuch mal das:
PHP:
echo "<td><a href=details.php?action=del><img src=del.jpg alt=Löschen></a><td>";
if($action=="del")
{
  mysql_query("DELETE FROM test WHERE (vorname = $vorname AND nachname = $nachname)");
}
echo "</tr>";

redlama
 
Schonmal was von register_globals=off gehört?

Ich denke
PHP:
if($_GET['action'] == "del") ...
Sollte das Problem schnellstmöglich aus der Welt schaffen. ;)
 
Da ist noch einiges mehr falsch.

1.) Statt $action sollte $_GET['action'] verwendet werden. Dieses Schema ist auch auf alle anderen via GET übertragenen Variablen anzuwenden. $_POST in Analogie zu via POST übertragenen Daten.

2.) Durch klicken auf den Link wird nur die Variable "action" übertragen. In der WHERE-Bedingung des SQL-Statements werden allerdins noch der Vorname und der Nachname benötigt.

3.) Da Vor- und Nachname Strings sind, müssen diese im SQL-Statement auch in einfache Anführungszeichen eingefasst werden.

4.) In der If-Abfrage muss "del" ebenfalls in Anführungszeichen eingefasst werden, da es auch eine Zeichenkette ist.

5.) Die Verwendung von [phpf]mysql_error[/phpf] ist ratsam, um ggf. herauszufinden, was MySQL am SQL-Statement stört.

Sven
 
es schaut nun so aus...funktioniert jedoch immer noch nicht

PHP:
			echo "<tr class=even>";
			echo "<td><a href=details.php?action=del><img src=del.jpg alt=Löschen></a><td>";
    		if($_GET['action'] == "del")
				{
					mysql_query("DELETE FROM test WHERE (vorname = '".$vorname."%' AND nachname = '".$nachname."%')");
				}
			echo "</tr>";
 
also die ganze datei schaut so aus

Code:
<html>
<head>
</head>
<body>
<?php
include 'index.php';
$vorname 	= $_GET['vorname'];
$nachname	= $_GET['nachname'];
 
            include 'db.php';

    		mysql_query("USE telefon;");
 
            $zeile = mysql_fetch_object(mysql_query("SELECT * FROM test WHERE (vorname LIKE '".$vorname."%' AND nachname LIKE '".$nachname."%') ORDER BY nachname"));

			

			echo "<table>";
			echo "<tr class=even>";
				echo "<td>Vorname :</td>";
				echo "<td>$zeile->vorname</td>";
			echo "</tr>";
			echo "<tr class=odd>";
				echo "<td>Nachname :</td>";
				echo "<td>$zeile->nachname</td>";
			echo "</tr>";
			echo "<tr class=even>";
				echo "<td>Telefon :</td>";
				echo "<td>$zeile->tel</td>";
			echo "</tr>";
			echo "<tr class=odd>";
				echo "<td>Fax :</td>";
				echo "<td>$zeile->fax</td>";
			echo "</tr>";
			echo "<tr class=even>";
				echo "<td>Mobil :</td>";
				echo "<td>$zeile->mobil</td>";
			echo "<tr class=odd>";
				echo "<td>Raum :</td>";
				echo "<td>$zeile->raum</td>";
			echo "</tr>";
			echo "<tr class=odd>";
				echo "<td>Firma :</td>";
				echo "<td>$zeile->firma</td>";
			echo "</tr>";
			echo "<tr class=odd>";
				echo "<td>Abteilung :</td>";
				echo "<td>$zeile->abteilung</td>";
			echo "</tr>";
			echo "<tr class=even>";
			echo "<td><a href=details.php?action=del><img src=del.jpg alt=Löschen></a><td>";
    		if($_GET['action'] == "del")
				{
					mysql_query("DELETE FROM test WHERE (vorname = '".$vorname."%' AND nachname = '".$nachname."%')");
				}
			echo "</tr>";
			echo "</table>";
			mysql_close ($verbindung);
			
?>
</body>
</html>

und das funktioniert bis dahin auch alles total super ...nur gelöscht wird halt nicht
 
Anhand des Codes ist zu erkennen, dass Vor- und Nachname definitiv nicht übergeben werden. Es reicht nicht, die Variablen zu Beginn des Scriptes abzufragen, man muss sie auch übergeben

Was mir noch aufgefallen ist:
- Was sollen eigentlich die Prozentzeichen im SQL-Statement bewirken?
- Um SQL-Injections vorzubeugen, solltest du zusätzlich [phpf]mysql_escape_string[/phpf] verwenden.

Sven
 
Zurück