Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.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
PHP7.4注意:尝试访问中bool类型值的数组偏移量_Php_Pdo_Prepared Statement - Fatal编程技术网

PHP7.4注意:尝试访问中bool类型值的数组偏移量

PHP7.4注意:尝试访问中bool类型值的数组偏移量,php,pdo,prepared-statement,Php,Pdo,Prepared Statement,我有一个简单的登录表单,使用PDO编写的语句,在PHP7.3下运行良好,但在7.4下我发现这有一个问题 我简单使用的代码是: if(isset($_POST['btn_login'])){ $useremail = $_POST['txt_email']; $password = $_POST['txt_password']; $select= $pdo->prepare("select * from tbl_user where useremail='$use

我有一个简单的登录表单,使用PDO编写的语句,在PHP7.3下运行良好,但在7.4下我发现这有一个问题

我简单使用的代码是:

if(isset($_POST['btn_login'])){

    $useremail = $_POST['txt_email'];
    $password = $_POST['txt_password'];

    $select= $pdo->prepare("select * from tbl_user where useremail='$useremail' AND password='$password'");

    $select->execute();

    $row=$select->fetch(PDO::FETCH_ASSOC);

    if($row['useremail']==$useremail AND $row['password']==$password){

        echo $success='Login Successful';

        header('refresh:1;dashboard.php');
    }else{

        echo 'Login Failed';
    }

使用PDO和prepared语句PHP7.4的正确解决方案是什么?

因为您的查询没有结果。它返回FALSE,您尝试以数组形式访问FALSE

所以,测试行中是否填充了数据
(参见更新的if语句)

顺便说一句,头后做回显

if($row && $row['useremail']==$useremail && $row['password']==$password){
    header('refresh:1;dashboard.php');
    echo $success='Login Successful';
} else{
    echo 'Login Failed';
}
提示:使用预先准备好的语句 警告
切勿以纯文本形式保存密码。使用。

谢谢你给马库斯的小费。不幸的是,即使我在查询中输入了正确的数据,它也会返回登录失败。prepared语句在查询中设置了正确的值,因为如果我使用``print\u r($select);打印($row);`$select是正确的,但尽管数据正确,$行不返回任何内容,并且在表中查询检查密码和用户名。因此,我认为电子邮件或密码中的任何地方都会出现拼写错误。当这些不匹配时,数据库将找不到任何内容。您应该使用prepared语句的原因是,它们阻止SQL注入。好的,所以数据库info@email.com作为useremail,单词password作为密码(是的,我知道安全性方面的问题。我只是想在担心md5ing之前让语句和查询正常工作,等等。转储时,$行只返回bool(false)尽管选择是正确的…永远不要以明文或使用MD5/SHA1存储密码!只存储使用PHP创建的密码哈希,然后您可以使用它进行验证。看看这篇文章:了解更多关于我意识到安全问题的信息我只是想让语句和查询正常工作,因为我担心使用MD5上的问题是,你永远不应该使用带有密码的MD5。当你考虑如何正确使用它时,你会意识到你需要删除所有这些代码并编写一个新的。安全第一!当你离开安全最后只意味着你的工作量的两倍。
$select = $pdo->prepare("SELECT * FROM tbl_user WHERE useremail=? AND password=?");
$select->execute([$useremail, $password]);