Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO登录验证_Php_Mysql_Pdo_Prepared Statement_Bcrypt - Fatal编程技术网

Php PDO登录验证

Php PDO登录验证,php,mysql,pdo,prepared-statement,bcrypt,Php,Mysql,Pdo,Prepared Statement,Bcrypt,我正在尝试创建用户登录验证脚本。我有两页,其中一页叫做checklogin.php,代码如下: <?php session_start(); $host="localhost"; // Host name $username="root"; // Mysql username $password="testdbpass"; // Mysql password $db_name="test"; // Database name $table = "users"; // Connect

我正在尝试创建用户登录验证脚本。我有两页,其中一页叫做checklogin.php,代码如下:

<?php 
session_start();

$host="localhost"; // Host name
$username="root"; // Mysql username
$password="testdbpass"; // Mysql password
$db_name="test"; // Database name
$table = "users";

// Connect to server via PHP Data Object
$db = new PDO("mysql:host=localhost;dbname=test;", $username, $password);

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


if(isset($_POST['username']) && !empty($_POST['username']) 
AND
isset($_POST['password']) && !empty($_POST['password']))

$pass = crypt($password . $row['salt']);
$statement->bindParam(':username', $username);
$query = ("SELECT * FROM $table WHERE username = :username");
$statement = $db->prepare($query);
$output = 'Login Error';

if ($statement->execute() && $row = $statement->fetch())

{
    if ($row['password'] === $pass)

        {
        if ( $row['activated'] !== 0 ) {
        $output = 'Not activiated wait for Administrator Approval';
        $_SESSION['username'] = $username;
        }
        $output = 'Logged In';
        }
    }

    echo $output;

   $db = null;
   ?>
您使用$db->prepare()两次,但只应使用一次,如下所示:

$query = "SELECT * FROM $table WHERE username = :username";
$statement = $db->prepare($query);
并确保您没有忘记这种情况下的花括号:

if(isset($_POST['username']) && !empty($_POST['username']) 
AND
isset($_POST['password']) && !empty($_POST['password']))
您使用$db->prepare()两次,但只应使用一次,如下所示:

$query = "SELECT * FROM $table WHERE username = :username";
$statement = $db->prepare($query);
并确保您没有忘记这种情况下的花括号:

if(isset($_POST['username']) && !empty($_POST['username']) 
AND
isset($_POST['password']) && !empty($_POST['password']))

你能告诉我们第23行是什么,这样我们就不必倒数了吗?:)如果在代码段功能中给我们提供行号,肯定会有帮助!我在上面发布的代码中没有发现解析错误。第23行显示:$statement->bindParam(':username',$username);刚刚编辑了帖子@raypaseur只是一个注释,但是当你使用empty()时,你不需要在相同的条件下也检查isset(),因为empty()也会这样做。你能告诉我们第23行是什么,这样我们就不必倒数行了吗?:)如果在代码段功能中给我们提供行号,肯定会有帮助!我在上面发布的代码中没有发现解析错误。第23行显示:$statement->bindParam(':username',$username);刚刚编辑了post@raypaseur只是一个注释,但是当您使用empty()时,您不需要在与empty()相同的条件下也检查isset()。