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
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
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‘];
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.