DillingerKnight Geschrieben 22. August 2021 Geschrieben 22. August 2021 <?php session_start(); //ini_set( 'default_charset', "" ); error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE); error_reporting(E_ALL); $sqlhost = "localhost"; $sqluser = "root"; $sqlpass = ""; $dbname = "user_data"; try{ $pdo = new PDO('mysql:host=localhost; dbname=user_data', $sqluser, $sqlpass); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); echo "Connected Successfully"; } catch(PDOException $e){ echo "Connection failed: " . $e->getMessage(); } //$mDatabase = mysqli_connect($sqlhost, $sqluser, $sqlpass, $dbname) or die ("DB-system no available"); ?> <!DOCTYPE html> <html> <head> <title>Registrierung</title> </head> <body> <?php $showFormular = true; //Variable ob das Registrierungsformular anezeigt werden soll if(isset($_GET['register'])) { $error = false; $eMail = $_POST['eMail']; $password = $_POST['password']; $password2 = $_POST['password2']; $nickname = $_POST['nickname']; $name = $_POST['name']; $age = $_POST['age']; $sex = $_POST['sex']; if(!filter_var($eMail, FILTER_VALIDATE_EMAIL)) { echo 'Bitte eine gültige E-Mail-Adresse eingeben<br>'; $error = true; } if(strlen($password) == 0) { echo 'Bitte ein Passwort angeben<br>'; $error = true; } if($password != $password2) { echo 'Die Passwörter müssen übereinstimmen<br>'; $error = true; } //Überprüfe, dass die E-Mail-Adresse noch nicht registriert wurde if(!$error) { $statement = $pdo->prepare("SELECT * FROM users WHERE eMail = :eMail"); $result = $statement->execute(array('eMail' => $eMail)); $user = $statement->fetch(); if($user !== false) { echo 'Diese E-Mail-Adresse ist bereits vergeben<br>'; $error = true; } } //Keine Fehler, wir können den Nutzer registrieren if(!$error) { $pw_hash = password_hash($password, PASSWORD_DEFAULT); /* $stmt = $pdo->prepare("INSERT INTO users (nickname, eMail, password, name, age, sex) VALUES (?, ?, ?, ?, ?, ?)"); $stmt->bind_param("ssssss", $nickname, $eMail, $pw_hash, $name, $age, $sex); $stmt->execute();*/ $statement = $pdo->prepare("INSERT INTO user_data.users('nickname', 'eMail', 'password', 'name', 'age', 'sex') VALUES (?, ?, ?, ?, ?, ?)"); $statement->bind_param("ssssis", $nickname, $eMail, $pw_hash, $name, $age, $sex); $result = $statement->execute( array('nickname' => $nickname, 'eMail' => $eMail, 'password' => $passwort_hash, 'name' => $name, 'age' => $age, 'sex' => $sex, )); if($result) { echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>'; $showFormular = false; } else { echo 'Beim Abspeichern ist leider ein Fehler aufgetreten'; } } } if($showFormular) { ?> <h1> Registrierung </h1> <form action="?register=1" method="post"> E-Mail:<br> <input type="eMail" size="40" maxlength="250" name="eMail"><br><br> Dein Passwort:<br> <input type="password" size="40" maxlength="250" name="password"><br><br> Passwort wiederholen:<br> <input type="password" size="40" maxlength="250" name="password2"><br><br> Dein Nickname:<br> <input type="nickname" size="40" maxlength="250" name="nickname"><br><br> Dein Name:<br> <input type="name" size="40" maxlength="250" name="name"><br><br> Dein Alter:<br> <input type="age" size="40" maxlength="120" name="age"><br><br> Dein Geschlecht:<br> <input type="sex" size="40" maxlength="250" name="sex"><br><br> <input type="submit" value="Abschicken"> </form> <?php } //Ende von if($showFormular) ?> </body> </html> Hallo zusammen, ich versuche hier eine Registrierung zu erstellen bekomme aber immer wieder folgenden Fehler: Zitat Fatal error: Uncaught Error: Call to undefined method PDOStatement::bind_param() in D:\Software\XAMPP\htdocs\VierGewinnt\registry.php:76 Stack trace: #0 {main} thrown in D:\Software\XAMPP\htdocs\VierGewinnt\registry.php on line 76 Und ich kann ihn einfach nicht lösen. Könnte mir hier jemand eventuell weiter helfen. Ich bin nicht besonders gut in PHP und verstehe auch das meiste kaum. Muss das aber fertig bekommen. Ich wäre euch echt dankbar. Zitieren
Whiz-zarD Geschrieben 22. August 2021 Geschrieben 22. August 2021 Die Methode heißt bindParam() und nicht bind_param() und du musst jeden Parameter einzeln binden. https://www.php.net/manual/en/pdostatement.bindparam.php bind_param() stammt aus der mysqli Bibliothek und nicht aus PDO. https://www.php.net/manual/de/mysqli-stmt.bind-param.php DillingerKnight reagierte darauf 1 Zitieren
DillingerKnight Geschrieben 22. August 2021 Autor Geschrieben 22. August 2021 vor 23 Minuten schrieb Whiz-zarD: Die Methode heißt bindParam() und nicht bind_param() und du musst jeden Parameter einzeln binden. https://www.php.net/manual/en/pdostatement.bindparam.php bind_param() stammt aus der mysqli Bibliothek und nicht aus PDO. https://www.php.net/manual/de/mysqli-stmt.bind-param.php Klasse ich danke dir. Der Fehler ist verschwunden aber jetzt stehe ich vor dem nächsten Fehler. Ist hier auch etwas falsch?: $result = $statement->execute( array('nickname' => $nickname, 'eMail' => $eMail, 'password' => $pw_hash, 'name' => $name, 'age' => $age, 'sex' => $sex, )); if($result) { echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>'; $showFormular = false; } else { echo 'Beim Abspeichern ist leider ein Fehler aufgetreten'; } Denn jetzt sehe ich folgenden Fehler bezogen auf diese Zeilen: Zitat Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in D:\Software\XAMPP\htdocs\VierGewinnt\registry.php:84 Stack trace: #0 D:\Software\XAMPP\htdocs\VierGewinnt\registry.php(84): PDOStatement->execute(Array) #1 {main} thrown in D:\Software\XAMPP\htdocs\VierGewinnt\registry.php on line 84 Zitieren
Whiz-zarD Geschrieben 22. August 2021 Geschrieben 22. August 2021 Wenn du beim prepare()-Aufruf mit Fragezeichen arbeitest, dann dürften die Parameter nicht benannt werden, wie du es jetzt getan hast. Wenn man die Parameter mit Namen ansprechen möchte, muss der Code wie folgt aussehen: $statement = $pdo->prepare("INSERT INTO user_data.users('nickname', 'eMail', 'password', 'name', 'age', 'sex') VALUES (:nickname, :eMail, :password, :name, :age, :sex)"); $result = $statement->execute( array( 'nickname' => $nickname, 'eMail' => $eMail, 'password' => $pw_hash, 'name' => $name, 'age' => $age, 'sex' => $sex ) ); Mit den Fragezeichen so: $statement = $pdo->prepare("INSERT INTO user_data.users('nickname', 'eMail', 'password', 'name', 'age', 'sex') VALUES (?, ?, ?, ?, ?, ?)"); $result = $statement->execute(array($nickname, $eMail, $pw_hash, $name, $age, $sex)); Steht doch alles in der Dokumentation. DillingerKnight, thereisnospace und Mrs reagierten darauf 2 1 Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.