2009-08-26 5 views
0

Ich schreibe ein PHP-Skript, um Elemente in einen Warenkorb hinzuzufügen. Meine Warenkorb-Tabelle enthält Felder für die Benutzer-ID, Produkt-ID, Session-ID, Notizen und einige andere. Einige der Felder können leer sein. Beispiel:Prägnante Möglichkeit, Variablenpräsenz in MySQL zu überprüfen INSERT QUERY mit PHP

Wenn jemand nicht angemeldet ist, dann werde ich seine Sitzungs-ID in der Tabelle speichern, und wenn sie sich anmelden, fügen Sie ihre Benutzer-ID hinzu, so dass ich eine dauerhafte Möglichkeit habe, die Elemente in der Tabelle zu vergleichen Benutzer. Wenn dies der Fall ist, füge ich die Benutzer-ID hinzu. Wenn es um die INSERT-Abfrage kommt, kann ich etwas tun, wie folgt aus:

$ add_sql = "in sessionBasket INSERT (Benutzer-ID) VALUES ( ‚" isset ($ _ SESSION [ "Benutzer-ID"]) $ _SESSION [".? Benutzeridentifikation"] : "") ."'";

Es würde mir so viel Zeit sparen bei der Variablenprüfung und Verzweigung, weil Leute angemeldet sein könnten oder nicht, Artikel könnten Notizen haben oder nicht, so etwas.

Antwort

1

Huch! SQL Injection! Sie könnten Ihre gesamte Datenbank verlieren

Sie sollten vorbereitete Aussagen für Ihre SQL-Einfügung aussehen.

Sie benötigen die mysqli-Schnittstelle zu verwenden, aber es geht so:

$statement = $db_connection->prepare("insert into ... VALUES(?)"); 
$statement->bind_param("id", $sid); 
$statement->execute(); 

Diese SQL-Injection-Angriffe zu verhindern.

Auf ein absolutes Minimum sollten Sie mindestens die Zeichenfolge entkommen.

+0

Ich weiß, ich weiß - ich gab Ihnen nur die nackten Knochen, die mein Problem betreffen, heh. Ich mache JavaScript-Mustervergleiche und ersetze alle ungültigen Zeichen, wenn sie getippt werden, dann führe ich einen PHP-Regex aus, dann mache ich mysqli_real_escape_string und trimme jede Eingabe und wenn sie diese übergeben, füge ich nur einmal ein, was ich auch htmlspecialchars getan habe. Also, vertrau mir, wenn ich dir sage, dass keine Datenbankinjektion möglich ist :) – user97410

+0

aber eigentlich hast du meine Frage trotzdem beantwortet: ich werde einfach die Aufgabe als separaten Schritt erledigen. – user97410