我是PHP新手,需要以下代码的帮助。当我输入错误的用户ID而不是给出消息"用户ID不存在"时,它显示"密码/ID不匹配。请指导我错在哪里。
<?php
session_start();
$id = $_POST['userid'];
$pwd = $_POST['paswd'];
$con = mysqli_connect("localhost", "????", "????", "??????");
if ($con) {
$result = mysqli_query($con, "SELECT * FROM users WHERE userid=$id");
if ($result) {
$row = mysql_fetch_array($result);
if ($row["userid"] == $id && $row["paswd"] == $pwd) {
echo "Welcome! You are a authenticate user";
if ($id == $pwd)
//my default login id and password are same
{
header("Location: changepwd.html");
} else {
header("Location: dataentry.html");
}
} else {
echo "ID/Password Mismatch";
}
} else {
echo "User does not Exist !!!";
}
} else {
echo "Connection failed - ".mysqli_error()." -- ".mysqli_errno();
}
?>
你遇到的主要问题是你在mysqli
和mysql
函数之间混淆了。这两个库彼此不兼容;您只能使用其中一个。
换句话说,以下行是错误的:
$row=mysql_fetch_array($result);
需要更改为使用mysqli_
。
当我在这里,暂时跑题时,我还要指出你犯的其他一些错误:
您不会转义 SQL 输入。只需将恶意值发布到
$_POST['userid']
即可轻松破解您的代码。必须使用正确的转义或参数绑定。(由于您使用的是mysqli
,我推荐后者;这是一种更好的技术)。您的密码检查很差 - 您似乎没有进行任何类型的哈希处理,所以我想您的密码以纯文本形式存储在数据库中。如果是这种情况,那么您的数据库将非常容易受到攻击。应始终对密码进行哈希处理,切勿将实际密码值存储在数据库中。
我已经跑题了,所以我不会进一步解释这些观点; 如果您需要有关其中任何一点的帮助,我建议您单独提出问题(或在此处搜索;我相信也有很多现有的建议可用)。
else
{
echo "ID/Password Mismatch";
}
与 if($row["userid"]==$id && $row["paswd"]==$pwd) {
所以既然你给了错误的ID。它呼应:ID/Password Mismatch
此外,if ($result) {
的else
永远不会显示
$result = mysqli_query($con, "SELECT * FROM users WHERE userid=$id");
您需要一些额外的检查:
选择 * 返回 1 行(不是 0,也不是更多)
您需要保护 HTML 表单输入的数据(例如,有人可以输入 1 or 1
以返回所有行
<?php
session_start();
$con = mysqli_connect("localhost", "????", "????", "??????");
$id = mysqli_real_escape_string($_POST['userid']);
$pwd = mysqli_real_escape_string($_POST['paswd']);
if ($con) {
// don't even do the query if data are incomplete
if (empty($id) || empty($pwd)
$result = false;
else
{
// optionnal : if userid is supposed to be a number
// $id = (int)$id;
$result = mysqli_query($con, "SELECT * FROM users WHERE userid='$id'");
}
if (mysqli_num_rows($result) != 1)
$result = false;
if ($result) {
$row = mysqli_fetch_assoc($result);
if ($row["userid"] == $id && $row["paswd"] == $pwd) {
echo "Welcome! You are a authenticate user";
if ($id == $pwd)
//my default login id and password are same
{
header("Location: changepwd.html");
} else {
header("Location: dataentry.html");
}
} else {
echo "ID/Password Mismatch";
}
} else {
echo "User does not Exist, or incomplete input";
}
} else {
echo "Connection failed - " . mysqli_error() . " -- " . mysqli_errno();
}
?>
在检查$result是否为空时尝试使用 isset() 方法。
这是符合的
if ($result) {.......}
用
if (isset($result)) { .......}
$result 始终为真,因为 mysqli_query() 仅在查询失败时才返回 false。例如,您可以使用 empty() 检查$result是否有实际内容。
You can use this sql compare password as well with userid
$sql="从用户中选择 *,其中用户ID='".$id."和password='".$pwd.";