2017-04-25 1 views
0

Ich habe versucht, die folgende Abfrage, aber immer das gewünschte Ergebnis laufen:

mysqli_query($conn, "UPDATE 'member_db' SET 'Fine_Amt'=('Fine_Amt' +'$fine') WHERE 'Member_id' = '$mem_id'"); 

wo $ feine weitergeleitet wird in der URL von einer anderen Seite und $ mem_id ist der Primärschlüssel member_db.

Für die obige Abfrage wird der Wert im Feld ‚Fine_Amt‘ gespeichert zu werden, ist 0

Wenn ich jedoch mit einem konstanten Wert ‚$ fein‘ entfernen (etwa 100)

mysqli_query($conn, "UPDATE member_db SET 'Fine_Amt'=('Fine_Amt' + 100) WHERE 'Member_id' = '$mem_id'"); 

Der Abfrage funktioniert gut.

+0

Sie wahrscheinlich eine SQL-Injection-Schwachstelle in diesem Code. – halfer

+0

Was würden Sie vorschlagen? –

+0

Sie müssen eine Technik namens _parameter binding_ verwenden. Suchen Sie danach, oder es gibt ein [Beispiel im Handbuch] (https://secure.php.net/manual/en/mysqli-stmt.bind-param.php). Wenn Sie derzeit Werte aus '$ _GET' oder' $ _POST' übernehmen, ohne sie zu bereinigen, können Sie einem Angreifer erlauben, eigene SQL-Anweisungen in Ihrer Datenbank auszuführen, was Ihre Sicherheit oder die Privatsphäre Ihrer Benutzer gefährdet. – halfer

Antwort

2

entfernen die unnötigen Zitate

mysqli_query(
    $conn, 
    "UPDATE member_db SET Fine_Amt=(Fine_Amt + " . $fine . ") WHERE Member_id = " . $mem_id 
); 
+0

funktioniert jetzt, danke :) –

+0

übrigens, ich habe auch den $ Feinwert korrigiert, den ich in der URL bekommen habe, was nicht korrekt war –

+0

Ich würde im Allgemeinen jede Antwort auf diese Art von Frage erwarten explizite Anmerkung zu den Sicherheitsrisiken, wenn keine Parameterbindung verwendet wird. Dies sollte eigentlich die erste Beobachtung sein, sonst wird das OP weiterhin unsicheren Code schreiben und veröffentlichen. – halfer

0

Versuchen Sie, die Variablen wie folgt verketten:

mysqli_query($conn, "UPDATE 'member_db' SET 'Fine_Amt'=('Fine_Amt' +'" . $fine . "') WHERE 'Member_id' = '" . $mem_id . "'"); 
+0

leider funktioniert nicht :( –

+0

Ich würde im Allgemeinen erwarten alle Antworten auf diese Art von Frage, um eine explizite Notiz über die Sicherheitsrisiken nicht Parameterbindung zu verwenden. Dies sollte die erste Beobachtung sein, wirklich, sonst wird das OP weiter schreibe und veröffentliche unsicheren Code – halfer

Verwandte Themen