【问题标题】:Need to correct my mysqli query需要更正我的 mysqli 查询
【发布时间】:2013-12-08 21:11:34
【问题描述】:

我在 PHP 中使用 mysqli 并尝试从数据库中获取数据以登录系统。当我使用 phpmyadmin 执行查询时,我得到了完美的结果。但是当我尝试从 php 脚本中获取它时,我遇到了问题。我的php脚本在下面

if(isset($login)){


$email = @$db->real_escape_string(htmlentities($_POST['loginid']));
$username = @$db->real_escape_string(htmlentities($_POST['loginid']));
$pass1 = @$db->real_escape_string(htmlentities($_POST['loginpass']));

$blah = new Encryption();
$pass = $blah->encode($pass1);


    if($db->query("SELECT `uid` FROM `users` WHERE BINARY `uname` = '$username' AND `pass` = '$pass'")){
    $errors[] = 'Logged in by username';
    }
    else if($db->query("SELECT `uid` FROM `users` WHERE `email` = '$username' AND `pass` = '$pass'")){
    $errors[] = 'Logged in by email';
    }   

}

现在问题是我的用户名是“abc”,电子邮件是“abc@abc.com”,密码是“qazwsx”加密。第二个用户名是'xyz',电子邮件是'xyz@xyz.com',密码是'abcdef',但它没有检查uname并同时通过或电子邮件并同时通过。如果我输入 '1' 或任何带有 'qazwsx' 密码的东西,它会告诉我你是 'logged in by username' 意味着它只检查密码。

为了查看结果,我使用了这些代码,

if($errors){
        echo '<ul>';
            foreach ($errors as $error){
            echo '<li>'.$error.'</li>';
            }
        echo '</ul>';
} 

else if ($loginform){
    echo $loginform;
    }

我不知道该怎么办。请帮帮我。

【问题讨论】:

    标签: php mysql database login mysqli


    【解决方案1】:

    找到 0 行不是错误。查询什么也找不到,仍然返回成功。

    您要在查询返回后检查并确保结果至少包含一行。

    $result = $db->query("SELECT....");
    if ($result and $result->num_rows) {
        # query found a matching user
    }
    

    【讨论】:

    • 你能建议我使用什么代码吗?你能编辑我的代码吗?
    • 谢谢,它适用于用户名,但我仍然无法使用电子邮件 ID 登录。 :'(
    • 如果您对两者都做了同样的事情,那么您将遇到一个完全不同的问题。你的数据库中的值是什么样的,你在查询中使用的值在你转义后是什么样的?
    • 哦,我想我应该问...您是否打算将用户名和电子邮件都来自$_POST['loginid']
    • 是的,email n 用户名都来自 loginid。但现在,它使用电子邮件... :D 感谢您帮助我... ;)
    猜你喜欢
    • 2017-12-21
    • 2021-07-22
    • 2013-03-14
    • 1970-01-01
    • 2011-02-22
    • 2010-12-28
    • 1970-01-01
    • 2019-03-02
    • 1970-01-01
    相关资源
    最近更新 更多