PDO execute funktioniert nicht?
hey ich wollte ein register Formular entwickeln. Ich kann abfragen ob der Nutzername schon vergeben ist und es funktioniert. Wenn ich jedoch dann den Nutzer in die Datenbank eintragen will funktioniert der execute nicht mehr.
Im Bild könnt ihr dann meinen Code sehen. Bei fragen bin ich offen hoffe auf gute Hilfe. Habe es schon 3 mal neu gemacht weil ich dachte der Fehler liegt irgendwie beim programmierten
1 Antwort
Hi,
Ein paar allgemeine Dinge, auf die Sie achten sollten, wenn Sie Probleme mit einem Execute-Befehl haben:
- Überprüfen Sie, ob Sie eine Verbindung zur Datenbank hergestellt haben und ob Sie die korrekten Anmeldeinformationen angegeben haben.
- Stellen Sie sicher, dass die Tabellennamen und die Spaltennamen korrekt sind und dass Sie die richtigen SQL-Anweisungen verwenden.
- Verwenden Sie Prepared Statements, um SQL-Injektionsangriffe zu vermeiden.
- Überprüfen Sie, ob Sie alle benötigten Parameter an das Execute-Befehlsobjekt übergeben haben.
Es sieht so aus, als ob es ein paar Tippfehler im Code gibt. Hier ist eine korrigierte Version:
if (isset($_POST['submit'])) {
$username = htmlspecialchars($_POST['username']);
$password = htmlspecialchars($_POST['password']);
$stat = $pdo->prepare("SELECT * FROM users WHERE username = :username");
$stat->bindParam(":username", $username);
$stat->execute();
$result = $stat->fetch();
if ($result) {
$hash = password_hash($password, PASSWORD_DEFAULT);
$test = $pdo->prepare("INSERT INTO users (username, pass) VALUES (:username, :pass)");
$test->bindParam(":username", $username);
$test->bindParam(":pass", $hash);
$test->execute();
$res = $test->fetch();
if ($res) {
echo "<script>alert('Nutzer wurde registriert');</script>";
} else {
echo "<script>alert('Nutzer wurde nicht registriert');</script>";
}
} else {
echo "Bitte nutze einen anderen Nutzername";
}
}
- Die Klammern in den Zeilen 1 und 3 wurden korrigiert.
- Die Anführungszeichen in den Zeilen 2 und 3 wurden korrigiert.
- Die Leerzeichen in der Zeile 5 wurden korrigiert.
- Die Groß- und Kleinschreibung in der Zeile 6 wurde korrigiert.
- Das Binden der Parameter in den Zeilen 8 und 14 wurde korrigiert.
- Die Zeile 16 wurde korrigiert, um das Passwort korrekt zu hashen.
- Die Bedingung in der Zeile 20 wurde korrigiert.
- Die Bedingungen in den Zeilen 24 und 27 wurden korrigiert.
- Die Anführungszeichen in den Zeilen 25 und 28 wurden korrigiert.
Wenn ich nach deinem Code gehe, würde der User in die Datenbank eingetragen werden wenn der Nutzername schon existiert. Wenn das nicht passieren soll, verneint man die if-Abfrage, das heißt man macht ein '!' davor. Somit wird der Nutzer nur in die Datenbank eingetragen wenn der Nutzername noch nicht existiert
Alles klar. Der Code ist zwar gleich geblieben, du hast nur unnötige leerzeichen hinzugefügt. Und bei der result abfrage die Verneinung entfernt. Somit wird ein user erstellt wenn der nutzername schon existiert. Aber trz danke