Datensatz aus MySQL-Datenbank löschen

Hallo Experten…

Ich hab da folgende Aufgabenstellung. Ich will mittels der ID einen Eintrag aus der Datenbank löschen. Jedoch will es nicht funktionieren.

Es kommt keine Fehlermeldung. Weder funktioniert es. Keine Ahnung was da los ist.

Seht ihr einen Fehler in dem Quellcode??

<?php include('dblogin.php');
$sql="SELECT bilderdb.Id AS Id, bilderdb.Name AS Name, bilderdb.Beschreibung AS Beschreibung, bilderdb.Pfad AS Pfad, bilderdb.Datum AS Datum, bilderdb.Kategorie AS Kategorie"; $sql.=" FROM bilderdb"; $result=mysql\_query($sql); $rows=mysql\_num\_rows($result); $cols=mysql\_num\_fields($result); echo " #"; for ($i=0;$i", htmlentities(mysql\_field\_name($result,$i)),""; } echo ""; for ($i=0;$i$z"; for ($k=0;$k$cell"; } echo ""; } echo ""; ?\> Welchen Eintrag wollen Sie löschen? Geben Sie bitte die id ein: <?php if ($knopf)
{ mysql\_query("DELETE FROM bilderdb WHERE Id='$nummer' LIMIT 1"); echo "Eintrag Nummer $nummer wurde erfolgreich gelöscht! Klicken Sie auf F5, um zu aktualisieren!"; } mysql\_close(); ?\> Grüße, Sebastian

Hi!

Hallo Experten…

… bin kein Experte …

mysql_query(„DELETE FROM bilderdb WHERE Id=’$nummer’ LIMIT
1“);

Ich vermute mal, bei „Id“ handelt es sich um ein nummerisches Feld. Versuch das SQL mal ohne die einfachen Anführungszeichen um $nummer.

Grüße
Heinrich

Hallo Heinrich.

mysql_query(„DELETE FROM bilderdb WHERE Id=’$nummer’ LIMIT
1“);

Ich vermute mal, bei „Id“ handelt es sich um ein nummerisches
Feld. Versuch das SQL mal ohne die einfachen Anführungszeichen
um $nummer.

Habe das SQL-Kommando jetzt umgeschrieben ohne die ‚‘ und hat immer noch nicht geklappt.

jedoch, wenn ich das kommando so umschreibe…

mysql_query(„DELETE FROM bilderdb WHERE Id=‚20‘ LIMIT
1“);
funktionierts.

jedoch brauch ich das ‚$nummer‘, denn dieser Wert kommt aus dem .
hab ich da was komplett falsch?

ich vermute er übergibt / übernimmt der wert aus dem input-feld nicht.

grüße,
Sebastian

ich vermute er übergibt / übernimmt der wert aus dem
input-feld nicht.

-,-
warum überprüfst du das nicht einfach, indem du mal deine $sql ausgibst?
echo $sql;
ist nicht wirklich schwer und würde dich in vermutungen bekräftigen…

Und vermutlich hast du recht - aber wer auch mit $nummer arbeitet, wenn
$_POST[‚nummer‘] besser wäre ist auch irgendwo selbst schuld.

damit öffnest du schnell mal Tür und Tor

Grüße
Munich

PS: im Zweifelsfall $_POST[nummer] nehmen (also ohne ') - aber nur dann, wenns nicht geht. Vielleicht kommst du noch drauf wann welche Version geht :stuck_out_tongue_winking_eye:

Hallo Munich.

PS: im Zweifelsfall $_POST[nummer] nehmen (also ohne ') - aber
nur dann, wenns nicht geht. Vielleicht kommst du noch drauf
wann welche Version geht :stuck_out_tongue_winking_eye:

das ohne ’ hat geklappt. so und jetzt noch wissen, warum mit ’ und ohne '. werde mich diesbezüglich nochmals melden.

Grüße und danke für eure hilfe.

Sebastian

hi,

probiers mal damit
„DELETE FROM bilderdb WHERE Id=’“.$_POST[‚nummer‘]."’ LIMIT 1"
bzw. bei einer älteren php-version
„DELETE FROM bilderdb WHERE Id=’“.$HTTP_POST_VARS[‚nummer‘]."’ LIMIT 1"

cu
harald
***********************

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

gut - für dein interesse sollst du belohnt werden.

das mit dem $nummer funktioniert nicht, weil auf den meisten servern die Sicherheitsrichtlinien oben und auf lokalen Testrechnern unten sind.

Wenn Du nur mit $nummer abfragen würdest könnten $_GET und $_POST Variableninhalte sich überlagern.

das ’ brauchst du deswegen nicht bzw darfst es nicht setzen, weil du die Variable in einem string aufrufst.
Wäre es ein test auf gültigkeit, dann solltest Du (um Fehler zu vermeiden und sauber zu arbeiten) aber wieder die ’ setzen.
Beispiel:

if ($_POST[‚test‘] == „wert“)
aber
echo „Die Variable hat den Inhalt: $_POST[test]“;
sauberer wäre im zweiten Beispiel aber:
echo "Die Variable hat den Inhalt: ".$_POST[‚test‘];

Hallo,

eine Lösung hast du ja schon, zu dem $nummer / $_POST[‚nummer‘] - Problem habe ich einmal etwas in FAQ:2419 geschrieben.

Ganz nebenbei:
mysql_query(„DELETE FROM bilderdb WHERE Id=’$POST[nummer]’ LIMIT 1“); ist auch nicht gut, wenn ein „böser Bube“ da als Nummer ’ OR 1# eingibt ist die Tabelle leer.
Besser, und bei weiteren Parametern „schöner“ lesbar:

$sql = sprintf("DELETE FROM bilderdb WHERE Id='%s' LIMIT 1",
 mysql\_real\_escape\_string($\_POST['nummer']));
mysql\_query($sql) or die("SQL Fehler:".mysql\_error()." - ".$sql);

Das or die(…) nur zu Debuggingzwecken, um ggfs. Fehler anzuzeigen, im realen Einsatz sollte da eine richtige Fehlerbehandlung hin.

Alexander