0

I want to add an Registration to my website but i always get this error message:

Fatal error: Uncaught Error: Call to a member function execute() on bool in C:\xampp\htdocs\webseite\user.class.php:74 Stack trace: #0 C:\xampp\htdocs\webseite\register.php(15): user->register() #1 {main} thrown in C:\xampp\htdocs\webseite\user.class.php on line 74

Here is my register function:

public function register(){
    $con = new mysqli("localhost", "xxxxx", "password", "xxxxx");
    $error = false;
    $firstname = $_POST['firstname'];
    $lastname = $_POST['lastname'];
    $email = $_POST['email'];
    $passwort = $_POST['passwort'];
    $passwort2 = $_POST['passwort2'];

    if(!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo 'Bitte eine gültige E-Mail-Adresse eingeben<br>';
        $error = true;
    }     
    if(strlen($passwort) == 0) {
        echo 'Bitte ein Passwort angeben<br>';
        $error = true;
    }
    if($passwort != $passwort2) {
        echo 'Die Passwörter müssen übereinstimmen<br>';
        $error = true;
    }

    echo $email;
    if(!$error) { 
        $statement = $con->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;
        }    
    }

    if(!$error) {    
        $passwort_hash = password_hash($passwort, PASSWORD_DEFAULT);

        $statement = $con->prepare("INSERT INTO users (email, passwort, firstname, lastname) VALUES (:email, :passwort, :firstname, :lastanme)");
        $result = $statement->execute(array('email' => $email, 'passwort' => $passwort_hash));

        if($result) {        
            echo 'Du wurdest erfolgreich registriert. <a href="login.php">Zum Login</a>';
        } else {
            echo 'Beim Abspeichern ist leider ein Fehler aufgetreten<br>';
        }
    } 
}
Bob Limbach
  • 29
  • 1
  • 3
  • `$con->prepare()` failed for some reason and therefore returned `false`; so you're now attempting to do `false->execute()` ... – CD001 Oct 18 '19 at 09:51

1 Answers1

4

mysqli does not support named parameters, you need question marks.

You also need to bind the parameters before you execute, you cannot send an array with values like in PDO.

So you need something like (for your first sql query):

$statement = $con->prepare("SELECT * FROM users WHERE email = ?");
$statement->bind_param("s", $email);
$result = $statement->execute();
jeroen
  • 91,079
  • 21
  • 114
  • 132