Форма входа в PHP не работает, что я могу сделать, чтобы это исправить?

0

У меня есть два сценария php:
config.php:

<?php
define('DB_SERVER', 'localhost:3306');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'password');
define('DB_DATABASE', 'mind3');
$db = mysqli_connect(DB_SERVER,DB_USERNAME,DB_PASSWORD,DB_DATABASE);
?>

и index.php, который содержит сценарий входа и форму:

    <?php
require_once 'config.php';
$username=$password='';
$username_err=$password_err='';
if($_SERVER["REQUEST_METHOD"] == "POST"){

    if(empty(trim($_POST["username"]))){
    $username_err = 'Please enter an username!';
    } else{
    $password = trim($_POST['username']);  
    }

    if(empty(trim($_POST["password"]))){
    $pasword_err = "Please enter a password!";
    } else{
    $password = trim($_POST['password']);
    }

    if(empty($username_err) && empty($password_err)){
    $sql = "SELECT username,password FROM members WHERE username = ?";

    if($stmt = mysqli_prepare($link, $sql)){
        mysqli_stmt_bind_param($stmt, "s", $param_username);
        $param_username = $username;
        if(mysqli_stmt_execute($stmt)){
        mysqli_stmt_store_result($stmt);
        if(mysqli_stmt_num_rows($stmt) == 1){
            if(password_verify($password, $hashed_password)){
            session_start();
            $_SESSION['username'] = $username;
            header("location: welcome.php");

            } else{
            $username_err = 'Username/password is wrong!';
        }
        } else{
        echo "Oops! Something went wrong. Please try again later.";
        }
    }
    mysqli_stmt_close($stmt);
    } 
    mysqli_close($link);
} 
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <div class="wrapper">
    <h2>Log in</h2>
    <form action="<?php echo htmlspecialchars ($_SERVER["PHP_SELF"]); ?>" method="post">
        <div class="form-group <?php echo(!empty($username_err)) ? 'has-error' : ''; ?>">
            <input type="text" name="username" class="form-control" placeholder="Username">
            <span class="help-block"><?php echo $username_err; ?></span>
        </div>
        <div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
            <input type="password" name="password" class="form-control">
            <span class="help-block"><?php echo $password_err; ?></span>
        </div>
        <div class="form-group">
            <input type="submit" class="btn btn-primary" value="Login">
        </div>
    </form>
    </div>
</body>
</html>

Проблема в том, что всякий раз, когда я ввожу учетные данные, которые у меня есть в моей базе данных, он не перенаправляет меня на welcome.php, и он также не говорит мне, что пароль или имя пользователя неверны. Но когда я не вводю имя пользователя или пароль Я получаю "пожалуйста, введите имя пользователя" или "введите пароль".

Я не понимаю, что не так.

  • 0
    На этом этапе добавьте запятую вместо = username_err, password_err = «»;
  • 0
    mysqli_prepare($link, $sql)) вас есть неопределенная переменная $link . Я предполагаю, что вы имели в виду mysqli_prepare($db, $sql))
Теги:
database
login

3 ответа

0
Лучший ответ

Вы не правильно задаете значение $ username.

Изменить:

$password = trim($_POST['username']); 

Для того, чтобы:

$username = trim($_POST['username']);

$ hashed_password должен иметь значение, поскольку оно необходимо в password_verify(). Используемые методы mysqli bind_result и fetch для получения необходимого значения.

После:

if(mysqli_stmt_num_rows($stmt) == 1){

Добавлять:

$hashed_password = "";
$username2 = "";

mysqli_stmt_bind_result($stmt, $username2, $hashed_password);
mysqli_stmt_fetch($stmt);

Добавлен exit(); после переадресации заголовка (..), так что после вызова перенаправления другие коды не будут выполняться.

Обновленный код:

<?php
require_once 'config.php';
$username = $password = '';
$username_err = $password_err = '';
if ($_SERVER["REQUEST_METHOD"] == "POST") {

    if (empty(trim($_POST["username"]))){
        $username_err = 'Please enter an username!';
    }
    else {
        $username = trim($_POST['username']);
    }

    if (empty(trim($_POST["password"]))){
        $pasword_err = "Please enter a password!";
    }
    else {
        $password = trim($_POST['password']);
    }

    if (empty($username_err) && empty($password_err)) {
        $sql = "SELECT username,password FROM members WHERE username = ?";

        if ($stmt = mysqli_prepare($link, $sql)) {
            mysqli_stmt_bind_param($stmt, "s", $param_username);
            $param_username = $username;
            if (mysqli_stmt_execute($stmt)){
                mysqli_stmt_store_result($stmt);
                if (mysqli_stmt_num_rows($stmt) == 1){
                    $hashed_password = "";
                    $username2 = "";

                    mysqli_stmt_bind_result($stmt, $username2, $hashed_password);
                    mysqli_stmt_fetch($stmt);
                    if (password_verify($password, $hashed_password)){

                        $_SESSION['username'] = $username;
                        mysqli_stmt_close($stmt);
                        mysqli_close($link);
                        header("location: welcome.php"); exit();

                    }
                    else{
                        $username_err = 'Username/password is wrong!';
                    }
                }
                else {
                    echo "Oops! Something went wrong. Please try again later.";
                }
            }
            mysqli_stmt_close($stmt);
        }
        mysqli_close($link);
    }
}
?>
1

Вы устанавливаете имя $password переменной $password вместо переменной $username.

if(empty(trim($_POST["username"]))){
  $username_err = 'Please enter an username!';
} else{
  $password = trim($_POST['username']);  
}

Просто замените $password = на $username =...

0

Вы получили сообщение об ошибке со своим кодом во втором фрагменте в строке 10. Вот фрагмент с исправлением, пожалуйста, проверьте комментарии к коду для получения дополнительной информации.

    <?php
    require_once 'config.php';
    $username=$password='';
    $username_err=$password_err='';
    if($_SERVER["REQUEST_METHOD"] == "POST"){

    if(empty(trim($_POST["username"]))){
    $username_err = 'Please enter an username!';
    } else{
    //you got error here (was $password)
    $username = trim($_POST['username']);  
    }

    if(empty(trim($_POST["password"]))){
    $pasword_err = "Please enter a password!";
    } else{
    $password = trim($_POST['password']);
    }

    if(empty($username_err) && empty($password_err)){
    $sql = "SELECT username,password FROM members WHERE username = ?";

    if($stmt = mysqli_prepare($link, $sql)){
        mysqli_stmt_bind_param($stmt, "s", $param_username);
        $param_username = $username;
        if(mysqli_stmt_execute($stmt)){
        mysqli_stmt_store_result($stmt);
        if(mysqli_stmt_num_rows($stmt) == 1){
            if(password_verify($password, $hashed_password)){
            session_start();
            $_SESSION['username'] = $username;
            header("location: welcome.php");

            } else{
            $username_err = 'Username/password is wrong!';
        }
        } else{
        echo "Oops! Something went wrong. Please try again later.";
        }
    }
    mysqli_stmt_close($stmt);
    } 
    mysqli_close($link);
} 
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <div class="wrapper">
    <h2>Log in</h2>
    <form action="<?php echo htmlspecialchars ($_SERVER["PHP_SELF"]); ?>" method="post">
        <div class="form-group <?php echo(!empty($username_err)) ? 'has-error' : ''; ?>">
            <input type="text" name="username" class="form-control" placeholder="Username">
            <span class="help-block"><?php echo $username_err; ?></span>
        </div>
        <div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
            <input type="password" name="password" class="form-control">
            <span class="help-block"><?php echo $password_err; ?></span>
        </div>
        <div class="form-group">
            <input type="submit" class="btn btn-primary" value="Login">
        </div>
    </form>
    </div>
</body>
</html>

Ещё вопросы

Сообщество Overcoder
Наверх
Меню