Search code examples
phpsqluser-registration

$stmt -> execute() returning false


I've tried debuggind this issue for almost 4 hours with no luck. No error messages, $stmt -> execute() gives false for whatever reason that I do not know of.

register.php

<?php

session_start();

if( isset($_SESSION['id'])){
  header("Location: index.php");
}

require 'database.php';

$message = '';

if(!empty($_POST['user']) && !empty($_POST['password'])):

    $pass = $_POST['password'];
    $user = $_POST['user'];

    $sql = "Insert into user (username, password) values (:user, :password)";
    $stmt = $conn->prepare($sql);

    $stmt->bindValue(':user', $_POST['user']);
    $stmt->bindValue(':password', password_hash($_POST['password'], PASSWORD_BCRYPT));

    //var_dump($_POST['password']);
    //var_dump($_POST['user']);

    if($stmt -> execute()):
      $message = 'Successfully created new user';
    else:
      $message = 'Sorry there must have been an issue creating your account';
    endif;


endif;

?>

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>Register Below</title>
  </head>
  <body>

    <?php if(!empty($message)): ?>
      <p><?= $message ?></p>
    <?php endif; ?>

    <h1>Register</h1>
    <form class="" action="register.php" method="post">

      <input type="text" placeholder="Username" name="user" id="user">
      <input type="password" placeholder="and password" name="password" id="password">
      <input type="password" placeholder="confirm password" name="confirm_password">

      <button type="submit" name="button">Register</button>
    </form>
    <a href="./index.php">home</a>
  </body>
</html>

database.php

<?php

  $server = 'localhost';
  $username ='master';
  $password ='master';
  $database = 'quiz';

    try{
        $conn = new PDO("mysql:host=$server;dbname=$database;" , $username, $password);
    } catch(PDOException $e){
        die ("Connection failed" . $e->getMessage());
    }

?>

I know I am ignoring the confirm password, but I want to make sure I can insert into the database first.


Solution

  • Solution: my password length was 15 in my database... hashed password >> 15 characters. Changed the length to 255 and it's all good. Hopefully this will be useful for someone else.