Экран входа пользователя. Обновление PHP 5 до 7 - PullRequest
0 голосов
/ 04 мая 2020

У меня есть экран входа в систему, но возникла проблема, при которой при вводе правильного имени пользователя и пароля возвращается «Не введено имя пользователя или пароль».

До этого работал корректно при использовании PHP v5, так что, должно быть, мне чего-то не хватает, чтобы обновить код?

    //Start session
    session_start();

    $servername = "localhost";
    $username = "db_root";
    $password = "db_password";
    $dbname = "db_name";

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);

    //Validation error flag
    $errflag = false;

    //Function to sanitize values received from the form. Prevents SQL injection
    function clean($str) {
        // Strip whitespace (or other characters) from the beginning and end of string
        $str = @trim($str);
        //Check for quotes, and remove them
        if(get_magic_quotes_gpc()) {
            $str = stripslashes($str);
        }
        //Remove special characters
        return mysqli_real_escape_string($str);
    }

    //Sanitize the POST values
    $login = clean($_POST['login']);
    $password = clean($_POST['password']);

    //Input Validations
    if($login == '') {
        $errflag = true;
    }
    if($password == '') {
        $errflag = true;
    }

    //If there are input validations, redirect back to the login form
    if($errflag) {
        $_SESSION['ERRMSG'] = 'No username or password entered';
        session_write_close();
        mysqli_close($link);
        header("location: login.php");
        exit();
    }

?>

Есть предложения?

1 Ответ

1 голос
/ 04 мая 2020

Возможно, вы забыли сбросить $_SESSION['ERRMSG'] после отображения ошибки. Однако вы можете упростить процесс входа в систему следующим образом:

<?php 
//Start session
session_start();

$servername = "localhost";
$username = "db_root";
$password = "db_password";
$dbname = "db_name";

// Initiate a PDO connection and set your error mode to exception.
$conn=new pdo("mysql:host=$servername;dbname=$dbname;",$username,$password,array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

$login = $_POST['login'];
$password = $_POST['password'];

/*    You don't have to escape or sanitize user inputs if you use Prepared Statement plus sanitizing user password is highly discouraged.
Validation error flag
$errflag = false;

Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
    Strip whitespace (or other characters) from the beginning and end of string
    $str = @trim($str);
    Check for quotes, and remove them
    if(get_magic_quotes_gpc()) {
        $str = stripslashes($str);
    }
    Remove special characters
    return mysqli_real_escape_string($str);
}

Sanitize the POST values
$login = clean($_POST['login']);
$password = clean($_POST['password']);

Input Validations
if($login == '') {
    $errflag = true;
}
if($password == '') {
    $errflag = true;
}
*/

try{
    // Prepare your query and replace table and column names to the right values since you did not give us your SQL query.
    $login_stmt = $conn->prepare("select * from `users` where (`login`=? and `password`=?) limit 1");
    $login_stmt->execute([$login,$password]);

    if($result=$login_stmt->fetch()){
        // Successful login. Set necessary session and redirect to appropriate page.
        header("location:/profile.php");
    }else{
        $_SESSION['ERRMSG'] = 'Invalid Username and/or Password entered';
        header("location: login.php");
    }
}catch(Exception $e){
    $_SESSION['ERRMSG']=$e->getMessage();
    header("location: login.php");
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...