Member 14045589 Ответов: 1

Пожалуйста, помогите.....простая форма входа проблема не войти в систему


В настоящее время у меня возникла проблема с моей страницей входа в систему. Он правильно ищет мою базу данных и находит имя пользователя, но не пароль. У меня есть пароль, установленный в phpmyadmin, но он говорит, что пароль неверен и не позволяет продолжить процесс входа в систему. Что я упускаю?? Я включил в него login.php, config.php (без конфиденциальной информации для входа в систему). Любая помощь будет оценена по достоинству.

Config.php
<?php
/* Database credentials. Assuming you are running MySQL
server with default setting (user 'root' with no password) */
define('DB_SERVER', 'localhost');
define('DB_USERNAME', '');
define('DB_PASSWORD', '');
define('DB_NAME', 'users');

 
/* Attempt to connect to MySQL database */
$link = mysqli_connect(DB_SERVER, DB_USERNAME, DB_PASSWORD, DB_NAME);
 
// Check connection
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}
?>


Что я уже пробовал:

Login.php
<?php

session_start();
 
if(isset($_SESSION["loggedin"]) && $_SESSION["loggedin"] === true){
    header("location: welcome.php");
    exit;
}

require_once "config.php";
 
$username = $password = "";
$username_err = $password_err = "";
 
if($_SERVER["REQUEST_METHOD"] == "POST"){
 
    if(empty(trim($_POST["username"]))){
        $username_err = "Please enter username.";
    } else{
        $username = trim($_POST["username"]);
    }
    
    if(empty(trim($_POST["password"]))){
        $password_err = "Please enter your password.";
    } else{
        $password = trim($_POST["password"]);
    }
    
    if(empty($username_err) && empty($password_err)){
        // Prepare a select statement
        $sql = "SELECT id, username, password FROM users 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){                    
               
                    mysqli_stmt_bind_result($stmt, $id, $username, $password);
                    if(mysqli_stmt_fetch($stmt)){
                        if(password_verify($password)){
                          
                            session_start();
                            
                         
                            $_SESSION["loggedin"] = true;
                            $_SESSION["id"] = $id;
                            $_SESSION["username"] = $username;                            
                            
                           
                            header("location: welcome.php");
                        } else{
                            
                            $password_err = "The password you entered was not valid.";
                        }
                    }
                } else{
                    
                    $username_err = "No account found with that username.";
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }
        }
        
    
        mysqli_stmt_close($stmt);
    }
    
   
    mysqli_close($link);
}
?>
 
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Login</title>
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.css">
    <style type="text/css">
        body{ font: 14px sans-serif; }
        .wrapper{ width: 350px; padding: 20px; }
    </style>
</head>
<body>
    <div class="wrapper">
        <h2>Login</h2>
        <p>Please fill in your credentials to login.</p>
        <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
            <div class="form-group <?php echo (!empty($username_err)) ? 'has-error' : ''; ?>">
                <label>Username</label>
                <input type="text" name="username" class="form-control" value="<?php echo $username; ?>">
                <span class="help-block"><?php echo $username_err; ?></span>
            </div>    
            <div class="form-group <?php echo (!empty($password_err)) ? 'has-error' : ''; ?>">
                <label>Password</label>
                <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>
            <p>Don't have an account? <a href="register.php">Sign up now</a>.</p>
        </form>
    </div>    
</body>
</html>

ZurdoDev

1. Не публикуйте весь свой код. Сузить круг поиска проблемы. Не ждите, что мы будем копаться в нем.
2. я копался в нем. Если то, что вы говорите, верно, то ваша проблема заключается в password_verify($password), но вы не показываете код для password_verify, поэтому мы не можем помочь.

1 Ответов

Рейтинг:
2

Xynosural.net

Простой и короткий ответ, если вы правильно сделали таблицу базы данных.

$query = mysqli_query("SELECT * FROM users WHERE username = _SAFE_USERNAME_POST_ AND password = _SAFE_PASSWORD_POST_");
if (mysqli_num_rows($query) > 0)
{
//Yeay :)
}
else
{
//Neay :(
}

или
$query = mysqli_query("SELECT password, id FROM users WHERE username = _SAFE_USERNAME_POST_");
if (mysqli_num_rows($query) > 0)
{
$result = mysqli_fetch_array($query);
if (_SAFE_PASSWORD_POST_ == $result['password'])
{
//yeay
}
else
{
//wrong password
}
}
else
{
//no user
}

_SAFE_USERNAME_POST и _SAFE_PASSWORD_POST будут переменными всякий раз, когда вы закончите все начальные проверки и зачистку/кодирование.


ps. проверьте свой код и перепишите его, там много ненужных вещей, а также почему в середине скрипта есть session_start.