Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.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错误-登录脚本_Php_Sql_Login - Fatal编程技术网

PHP错误-登录脚本

PHP错误-登录脚本,php,sql,login,Php,Sql,Login,我正在创建一个新的登录脚本/成员目录 我从零开始创建它,没有任何框架,对此问题的建议也将不胜感激 情况: // Look up the username and password in the database $query = "SELECT admin_id, username FROM admin WHERE adminname = '$admin_user' AND password = SHA1('$admin_pass')"; $data = mysqli_query

我正在创建一个新的登录脚本/成员目录

我从零开始创建它,没有任何框架,对此问题的建议也将不胜感激

情况:

// Look up the username and password in the database
    $query = "SELECT admin_id, username FROM admin WHERE adminname = '$admin_user' AND password = SHA1('$admin_pass')";
    $data = mysqli_query($dbc, $query);

    if (mysqli_num_rows($data) == 1) {
这段代码一直给我一个错误,特别是最后一行:

Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /home8/craighoo/public_html/employees/security/dir_admin.php  on line 20
回显查询时,我得到:

SELECT admin_id, adminname FROM admin WHERE adminname = 'admin' AND password = SHA1('password')
编辑: 谢谢大家。问题出在我的数据库列名和我所引用的列名上。

考虑到失败时返回false,并且$data是一个布尔值,在这里,我假设在执行SQL查询期间发生了错误

您可以尝试使用查找此错误的原因:

$data = mysqli_query($dbc, $query);
if ($data !== false) {
    // Do whatever you want with $data
    if (mysqli_num_rows($data) == 1) {
        // 
    }
} else {
    echo mysqli_error($dbc);
    die;
}
注意:在开发脚本时,像我在这里做的那样,回显错误消息并死亡是可以的;但你不应该在生产中这样做

相反,在生产中,您应该:

将错误记录到一个文件中 向用户显示一条好消息 考虑到失败时返回false,并且$data是一个布尔值,在这里,我假设在执行SQL查询期间发生了一个错误

您可以尝试使用查找此错误的原因:

$data = mysqli_query($dbc, $query);
if ($data !== false) {
    // Do whatever you want with $data
    if (mysqli_num_rows($data) == 1) {
        // 
    }
} else {
    echo mysqli_error($dbc);
    die;
}
注意:在开发脚本时,像我在这里做的那样,回显错误消息并死亡是可以的;但你不应该在生产中这样做

相反,在生产中,您应该:

将错误记录到一个文件中 向用户显示一条好消息
您的查询执行失败。当这种情况发生时,mysqli\u查询返回错误的布尔值,并且当传递给mysqli\u num\u行时,您会得到此错误


在执行之前打印查询并检查其正确性。

您的查询执行失败。当这种情况发生时,mysqli\u查询返回错误的布尔值,并且当传递给mysqli\u num\u行时,您会得到此错误


在执行之前打印查询并检查其正确性。

您是否尝试过通过phpmyadmin或控制台手动运行相同的查询?您得到了什么结果?

您是否尝试过通过phpmyadmin或控制台手动运行相同的查询?您得到的结果是什么?

当您有一个关键查询时,最好向其中添加一个骰子,如下所示:

mysqli_query($dbc, $query) or die('Critical error on line #'. __LINE__ .' when attempting to login ...<br>'. mysql_error());

当您有一个关键查询时,最好向其中添加一个骰子,如下所示:

mysqli_query($dbc, $query) or die('Critical error on line #'. __LINE__ .' when attempting to login ...<br>'. mysql_error());

谢谢,我更新了原来的问题,现在正在查看我的SQL。修复了它。谢谢提醒,有时候我忘记了调试的基本规则。谢谢,我更新了原始问题,现在正在查看我的SQL。修复了它。谢谢提醒,有时我忘记了调试的基本规则。谢谢,我更新了原始问题,现在正在查看我的SQL。很高兴看到你修复了你的问题:-谢谢,我更新了原始问题,现在正在查看我的SQL。很高兴看到你修复了你的问题:-我假设你正在使用PHP会话,如果你不应该的话!确保在成功登录后运行session_regenate_id,以防止已知的漏洞。我建议您使用PHP的SHA函数,而不是在数据库中运行SHA哈希,尤其是当数据库服务器位于另一个框中时,因为您是以明文形式将其密码从web服务器发送到数据库,即使它在您的网络中,它仍然是一个漏洞。旁注:您可能希望查看准备好的语句以避免SQL注入攻击。谢谢TravisO!今后我会记住这件事。到时候我可能需要更多的帮助。我假设你正在使用PHP会话,如果不是的话,你应该这样做!确保在成功登录后运行session_regenate_id,以防止已知的漏洞。我建议您使用PHP的SHA函数,而不是在数据库中运行SHA哈希,尤其是当数据库服务器位于另一个框中时,因为您是以明文形式将其密码从web服务器发送到数据库,即使它在您的网络中,它仍然是一个漏洞。旁注:您可能希望查看准备好的语句以避免SQL注入攻击。谢谢TravisO!今后我会记住这件事。到时候我可能需要更多的帮助。