我的php登录表单有什么问题?

时间:2013-08-15 04:08:59

标签: php mysql forms login

    <?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

2 个答案:

答案 0 :(得分:2)

您的代码存在很多问题:

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

  2. {@ 1}}扩展程序已弃用,不应使用。请参阅documentation中的警告。您应该使用其中一个MySQLiPDO扩展名。

  3. 无论何时访问数组,都必须确保索引/键存在。这是使用isset()函数完成的。这适用于普通数组和mysql$_POST等数组。如果您没有检查是否设置了索引,那么您将收到错误。

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

  5. 在SQL数据库中,很少选择表中的所有内容。您应该使用$_POST['pass']子句缩小搜索范围,例如WHERE。您应该阅读一些SQL tutorials来了解SQL的工作原理。

  6. 当您对SQL进行排序时,您可能还应该了解一些安全性(即约sanitizing and validating输入并使用prepared statements)。搜索“SQL安全性”或类似的东西,你应该找到很多阅读材料。

  7. SELECT * FROM account WHERE id = $i AND pass = '$d'重定向之前回复某些内容没有意义。重定向响应可能包含一个正文,但会被忽略;浏览器只是将浏览器重定向到另一个页面而不显示正文。

  8. 最后,您比较密码的方式是以明文形式存储密码(以纯文本格式)。如果有人获得了对您数据库的访问权限,他们就可以访问所有用户的凭据。有些人倾向于在许多不同的网站上使用相同的密码,这意味着也会破坏这些帐户。这很严重。您需要阅读securing passwords

  9. 祝你好运。

答案 1 :(得分:1)

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

我认为您希望使用mysql_fetch_assoc而不是mysql_fetch_rowmysql_fetch_assoc返回一行作为关联数组(使用字符串索引获取特定字段)。

此外,mysql_库已deprecated since PHP 5.5.0

最后,

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