0

I'm making a login screen for my blog but when it has to validate the hash it fails. I have googled a lot watched here and asked a few class mates but it still fails. When you submit you get the alert

Wrong password or username!

How can I fix this?

this is my login script

<?php
include_once('resources/db.php');

$sql = "SELECT username, password FROM users WHERE username = :username";
$query = $db->prepare($sql);
$query->execute(array(":username" => $_POST['username']));
$user = $query->fetch(PDO::FETCH_ASSOC);


if ( isset( $_POST['submit'] )) {
    $username = $_POST['username'];
    $password = $_POST['password'];
    $hash_password = $user['password'];

    if ( password_verify($password, $hash_password)) {
        if ($query->rowCount() == 1){
            echo "chrisschotman is ingelogd";
        } else {
            echo "<script type=\"text/javascript\">alert('Wrong username!')</script>";
        }
    } else {
        echo "<script type=\"text/javascript\">alert('Wrong password or username!')</script>";
    }
}
?>

this is my login form

<form action="" method="post">
    <input type="text" placeholder="username" name="username"maxlength="24"><br>
    <input type="password" placeholder="password" name="password" minlength="8"
           maxlength="16"><br>
    <input type="submit" value="login" name="submit">
</form>

this is my registration script

<?php
include_once('resources/db.php');

// var_dump($_POST);
$query = $db->prepare('insert into users (`username`, `password`, `privileges`) values(?, ?, ?)');



$query =$db->prepare('select * from users');

$query->execute();

?>

//here is the registration form

<?php

if (isset($_POST)) {
    include_once('resources/db.php');

    $sql = "INSERT INTO users (`username`, `password`) VALUES (:username, :password)";
    $query = $db->prepare($sql);
    $query->execute(array(
        ':username' => $_POST['username'],
        ':password' => password_hash($_POST['password'], PASSWORD_DEFAULT)
    ));

    if ($query) {

        echo "Registered succefully";
    } else {

        echo "Occured and error";
    }
}

?>

database structure

database rows

C.Schotman
  • 13
  • 5

1 Answers1

0

Change the database row to varchar(255)

$sql = "SELECT username, password FROM users WHERE username = :username";
$query = $db->prepare($sql);
$query->execute(array(":username" => $_POST['username']));
$user = $query->fetch(PDO::FETCH_ASSOC);

And try this registration:

<?php

$db = new PDO('mysql:host=localhost;dbname=' . $db_name . ',' . $db_user . ',' . $db_pass);

if (isset($_POST)) {
    include_once('resources/db.php');

    $sql = "INSERT INTO users (`username`, `password`) VALUES (:username, :password)";
    $query = $db->prepare($sql);
    $query->execute(array(
            ':username' => $_POST['username'],
            ':password' => password_hash($_POST['password'], PASSWORD_DEFAULT)
    ));

    if ($query) {

        echo "Registered succefully";
    } else {

        echo "Occured and error";
    }
}
getl0st
  • 342
  • 1
  • 10