Thomas Luethi: Fehler in DELETE

Beitrag lesen

Hallo,

"DELETE * FROM users WHERE user = $_POST['user']";

Der Stern (bei DELETE * ) ist ueberfluessig.
Und die einfachen Anfuehrungszeichen in $_POST['user'] sind falsch,
weil um alles noch doppelte Anfuehrungszeichen sind, siehe P.S.

Zudem ist es gefaehrlich, einen String von der "boesen Gegenseite"
(naemlich vom Benutzer) ungeprueft in die Datenbank-Abfrage
einzubauen.
Und falls die Spalte "user" vom Typ String ist, muss es in der SQL-Query
(einfache) Anfuehrungszeichen um den String haben.

Ich wuerde es so machen (ungetestet!):

$usergeprueft=mysql_escape_string($_POST['user']);

/* Wenn es sich um einen Integerwert handeln soll, noch folgendes: */
$usergeprueft=intval($usergeprueft);

/* Query zusammenbauen und in eigene Variable stecken,
dann kann man sie im Misserfolgsfall auch einfacher anzeigen lassen: */

$query="DELETE FROM users WHERE user = '$usergeprueft'";

$result = mysql_query($query)
   or die("Loeschen fehlgeschlagen.<br>Query:$query<br>MySQL-Fehlermeldung" . mysql_error());

Gruesse,

Thomas

P.S.
Assoziative Arrays und doppelte Anfuehrungszeichen: Siehe
http://www.php.net/manual/en/language.types.string.php#AEN3553
Korrekt: echo "Blabla $foo[bar] Blabla";
Korrekt: echo "Blabla {$foo['bar']} Blabla";
Falsch: echo "Blabla $foo['bar'] Blabla";