<?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
答案 0 :(得分:2)
您的代码存在很多问题:
您不应使用@
运算符。它用于抑制错误,警告,通知等。当你收到错误,警告或通知时,你永远不应该忽略它们;相反,你应该找出你为什么得到它们然后修复它。抑制它们就像建造一架飞机而忽视每一位安全检查员。这不是一件好事。
{@ 1}}扩展程序已弃用,不应使用。请参阅documentation中的警告。您应该使用其中一个MySQLi或PDO扩展名。
无论何时访问数组,都必须确保索引/键存在。这是使用isset()
函数完成的。这适用于普通数组和mysql
,$_POST
等数组。如果您没有检查是否设置了索引,那么您将收到错误。
您永远不应该假设设置$_GET
或$_POST
索引只是因为设置了另一个索引。换句话说,仅仅因为设置了$_GET
,并不意味着也设置了$_POST["btnLog"]
和$_POST['uId']
。这是一个非常常见的错误,即使对于有经验的开发人员来说也是如此(很容易被忽视),但这不是一个借口。
在SQL数据库中,很少选择表中的所有内容。您应该使用$_POST['pass']
子句缩小搜索范围,例如WHERE
。您应该阅读一些SQL tutorials来了解SQL的工作原理。
当您对SQL进行排序时,您可能还应该了解一些安全性(即约sanitizing and validating输入并使用prepared statements)。搜索“SQL安全性”或类似的东西,你应该找到很多阅读材料。
在SELECT * FROM account WHERE id = $i AND pass = '$d'
重定向之前回复某些内容没有意义。重定向响应可能包含一个正文,但会被忽略;浏览器只是将浏览器重定向到另一个页面而不显示正文。
最后,您比较密码的方式是以明文形式存储密码(以纯文本格式)。如果有人获得了对您数据库的访问权限,他们就可以访问所有用户的凭据。有些人倾向于在许多不同的网站上使用相同的密码,这意味着你也会破坏这些帐户。这很严重。您需要阅读securing passwords。
答案 1 :(得分:1)
“未定义的索引:用户名”表示username
变量中没有$row
索引。
我认为您希望使用mysql_fetch_assoc
而不是mysql_fetch_row
。 mysql_fetch_assoc
返回一行作为关联数组(使用字符串索引获取特定字段)。
此外,mysql_
库已deprecated since PHP 5.5.0。
最后,