0

我是 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();
    }
?>
4

6 回答 6

2

您遇到的主要问题是您在mysqliandmysql函数之间混淆了。这两个库互不兼容;您只能使用其中一种。

换句话说,以下行是错误的:

$row=mysql_fetch_array($result);

它需要更改才能使用mysqli_

当我在这里时,暂时偏离主题,我还要指出您正在犯的其他一些错误:

  1. 你没有逃避你的 SQL 输入。只需将恶意值发布到$_POST['userid']. 您必须使用正确的转义或参数绑定。(由于您使用的是mysqli,我推荐后者;这是一种更好的技术)。

  2. 您的密码检查很差-您似乎没有进行任何散列,所以我猜您的密码以纯文本形式存储在数据库中。如果是这种情况,那么您的数据库非常容易受到攻击。您应该始终对您的密码进行哈希处理,并且永远不要将实际密码值存储在数据库中。

我已经跑题了,所以我不会进一步解释这些观点;如果您在这些方面需要帮助,我建议您提出单独的问题(或在此处搜索;我相信也有很多现有的建议可用)。

于 2013-10-30T13:03:00.923 回答
0
else 
{
echo "ID/Password Mismatch"; 
}

与 if($row["userid"]==$id && $row["paswd"]==$pwd) {

所以既然你给了一个错误的ID。它呼应ID/Password Mismatch 了:从那以后else就再也没有出现过if ($result) {

 $result = mysqli_query($con, "SELECT * FROM users WHERE userid=$id");
于 2013-10-30T13:06:21.200 回答
0

在检查$result是否为空时尝试使用 isset() 方法。

那是一致的

     if ($result) {.......}

利用

     if (isset($result)) { .......}
于 2013-10-30T13:37:04.933 回答
0

您需要一些额外的检查:

选择 * 返回 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();
}
?>
于 2013-10-30T13:07:59.827 回答
-1
You can use this sql compare password as well with userid

$sql= "SELECT * FROM users WHERE userid='".$id.", and password='".$pwd."'";

于 2013-10-30T13:07:16.290 回答
-1

$result 始终为 true,因为 mysqli_query() 仅在查询失败时返回 false。例如,您可以检查 $result 是否具有 empty() 的实际内容。

于 2013-10-30T13:02:52.480 回答