我正在尝试创建一个用户登录表单,它会发出警告,这是我的所有脚本
conncect.php
<?php
$con = mysql_connect("localhost" , "xxx" , "xxxxxx");
if(!$con)
{
die('Could Not Connect' . mysql_error());
}
else
{
echo "User Connect". "<br>";
}
mysql_select_db("xxxx" , $con)
or die('Error: could not connect' . mysql_error());
echo "Database connected" . "<br>";
function dbQuery($sql)
{
return mysql_query($sql) or die('Query Failed. ' . mysql_error());
}
function dbAffectedRows()
{
global $dbConn;
return mysql_affected_rows($dbConn);
}
function dbFetchArray($result, $resultType = MYSQL_NUM)
{
return mysql_fetch_array($result, $resultType);
}
function dbFetchAssoc($result)
{
return mysql_fetch_assoc($result);
}
function dbFetchRow($result)
{
return mysql_fetch_row($result);
}
function dbFreeResult($result)
{
return mysql_free_result($result);
}
function dbNumRows($result)
{
return mysql_num_rows($result);
}
function dbSelect($dbName)
{
return mysql_select_db($dbName);
}
?>
function.php
<?php
require_once 'connect.php';
$userName = $_POST['txtUserName'];
$password = $_POST['txtPassword'];
//$sql = mysql_query("SELECT user_id FROM user WHERE user_name = '$userName' AND user_password = '$password'") or die('error in query!' . mysql_error());
$sql = "SELECT user_id FROM user WHERE user_name = '$userName' AND user_password = '$password'";
echo $result = dbQuery($sql);
if(dbNumRows($result)==1){
$row = dbFatchAssoc($result);
echo '$row[user_id]';
}
?>
它在connect.php中发出警告,这是下面的
有人请帮助我,提前谢谢警告:mysql_num_rows()要求参数1为resource,boolean 在connect.php中给出
我添加整个警告表看看
(!)警告:mysql_num_rows()要求参数1为资源,布尔值在第48行的C:\ wamp \ www \ tb_ad \ connect.php中给出 调用堆栈
# Time Memory Function Location
1 0.0032 367408 {main}( ) ..\function.php:0
2 0.0130 385640 dbNumRows( ) ..\function.php:15
3 0.0130 385672 mysql_num_rows ( ) ..\connect.php:48
答案 0 :(得分:2)
这里遗漏了两件事; 1)参数消毒和2)错误检查。
如果不将您的应用转换为PDO(您 应该这样做),请尝试以下
$sql = sprintf("SELECT user_id FROM user WHERE user_name = '%s' AND user_password = '%s'",
mysql_real_escape_string($_POST['txtUserName']),
mysql_real_escape_string($_POST['txtPassword']));
$result = mysql_query($sql);
if ($result === false) {
throw new Exception(mysql_error());
}
您还应该检查
POST
txtUserName
txtPassword
和$_POST
项
对于开发,我还建议将它放在脚本的顶部(或者最好在php.ini
中设置它们)
ini_set('display_errors', 'On');
error_reporting(E_ALL);
此外,存储纯文本密码是教科书不好。我建议你做一些关于软件应用程序安全性的阅读。这是一个起点 - https://www.owasp.org/index.php/Category:OWASP_Top_Ten_Project
答案 1 :(得分:1)
如果查询的执行不成功,则此行echo $result = dbQuery($sql);
返回FALSE。
所以你应该添加如下内容:
if (!$result)
{
//handle the error
}