0
    <?php 


    $connector = @mysql_connect("localhost","root","usbw"); // open sql connection
mysql_select_db("dnhsdb",$connector);

    $i = @$_POST['uId']; 
    $d = @$_POST['pass']; 

        if (isset($_POST["btnLog"]))
    {
     $resultID = mysql_query("SELECT * FROM ACCOUNT", $connector);
    $row = mysql_fetch_row($resultID);
    if($i == $row['username'] && $d == $row['pass'])
{
echo "Welcome Userid " . $row['username'] . "!";
 header('Location: form18dnhs.php');
}
else
echo "Wrong Id/Password";

    }

错误信息说:

Undefined index: username in C:\Users\Chad\Desktop\MAIN_php_project\USBWebserver v8_en\root\DNHS\login.php on line 21
Wrong Id/Password
4

2 回答 2

2

您的代码有很多问题:

  1. 您不应该使用@运算符。它用于抑制错误、警告、通知等。当您收到错误、警告或通知时,您永远不应忽视它们;相反,您应该弄清楚为什么要得到它们,然后修复它。压制他们就像制造一架飞机,却忽略了每一个安全检查员。这不是一件好事。

  2. mysql扩展已被弃用,不应使用。请参阅文档中的警告。您应该改用MySQLiPDO扩展之一。

  3. 每当您访问数组时,都必须确保索引/键存在。这是使用isset()函数完成的。这适用于普通数组和$_POST,$_GET等数组。如果您不检查是否设置了索引,则会出现错误。

  4. 你不应该仅仅因为设置了另一个索引就假设设置了一个$_POST或索引。$_GET换句话说,仅仅因为$_POST["btnLog"]被设置,并不意味着也$_POST['uId']$_POST['pass']设置。这是一个很常见的错误,即使对于有经验的开发人员也是如此(很容易被忽视),但这不是借口。

  5. 在 SQL 数据库中,您很少选择表中的所有内容。您应该使用该WHERE子句来缩小搜索范围,例如SELECT * FROM account WHERE id = $i AND pass = '$d'. 您应该阅读一些SQL 教程以了解 SQL 的工作原理。

  6. 当您对 SQL 进行排序时,您可能还应该学习一些关于安全性的知识(即关于清理和验证输入以及使用准备好的 语句)。搜索“SQL 安全”或类似的内容,您应该会找到很多阅读材料。

  7. 在重定向之前回显某些内容header('Location: ...')没有意义。重定向响应可能包含正文,但会被忽略;浏览器只是将浏览器重定向到另一个页面而不显示正文。

  8. 最后,您比较密码的方式似乎是您以明文形式存储密码(作为明文)。如果有人可以访问您的数据库,他们将可以访问您所有用户的凭据。有些人倾向于对许多不同的网站使用相同的密码,这意味着也将破坏这些帐户。这是相当严重的。您需要阅读有关保护密码的内容。

祝你好运。

于 2013-08-15T05:02:13.313 回答
1

“未定义的索引:用户名”表示您的变量中没有username索引。$row

我想你想使用mysql_fetch_assocnot mysql_fetch_rowmysql_fetch_assoc返回一行作为关联数组(您使用字符串索引来获取特定字段)。

此外,该mysql_自 PHP 5.5.0 起已被弃用

最后,

不要以纯文本形式存储密码!!!

于 2013-08-15T04:11:42.653 回答