Der folgende Code deklariert lediglich eine String-Variable, die eine MySQL-Abfrage enthält:
$sql = "INSERT INTO users (username, password, email)
VALUES ('".$_POST["username"]."','".$_POST["password"]."','".$_POST["email"]."')";
Die Abfrage wird nicht ausgeführt. Dazu müssen Sie einige Funktionen verwenden, aber lassen Sie mich zuerst etwas anderes erklären.
VERTRAUE NIEMALS BENUTZEREINGABEN :Sie sollten niemals Benutzereingaben anhängen (z. B. Formulareingaben von $_GET
oder $_POST
) direkt zu deiner Anfrage. Jemand kann die Eingabe vorsichtig so manipulieren, dass sie Ihrer Datenbank großen Schaden zufügen kann. Das nennt man SQL-Injection. Mehr darüber können Sie hier
nachlesen
Um Ihr Skript vor einem solchen Angriff zu schützen, müssen Sie es Verwenden Sie vorbereitete Anweisungen. Mehr zu vorbereiteten Statements hier
Fügen Sie vorbereitete Anweisungen wie folgt in Ihren Code ein:
$sql = "INSERT INTO users (username, password, email)
VALUES (?,?,?)";
Beachten Sie, wie das ?
werden als Platzhalter für die Werte verwendet. Als nächstes sollten Sie die Anweisung mit mysqli_prepare
vorbereiten :
$stmt = $mysqli->prepare($sql);
Beginnen Sie dann mit der Bindung der Eingabevariablen an die vorbereitete Anweisung:
$stmt->bind_param("sss", $_POST['username'], $_POST['email'], $_POST['password']);
Und führen Sie schließlich die vorbereiteten Anweisungen aus. (Hier findet das eigentliche Einfügen statt)
$stmt->execute();
HINWEIS Obwohl dies nicht Teil der Frage ist, rate ich Ihnen dringend, Passwörter niemals im Klartext zu speichern. Stattdessen sollten Sie password_hash
verwenden um einen Hash des Passworts zu speichern