<?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
最佳答案
你的代码有很多问题:
您不应使用
@
运算符。它用于抑制错误、警告、通知等。当您收到错误、警告或通知时,您永远不应该忽略它们;相反,您应该弄清楚为什么会收到它们,然后进行修复。打压他们就像造飞机一样无视每一个安全检查员。这可不是什么好事。mysql
扩展已被弃用,不应再使用。请参阅 documentation 中的警告.您应该改用 MySQLi 之一或 PDO扩展。无论何时访问数组,都必须确保索引/键存在。这是使用
isset()
完成的功能。这适用于普通数组和$_POST
、$_GET
等数组。如果您不检查索引是否已设置,则会出现错误。你不应该假设一个
$_POST
或$_GET
索引只是因为设置了另一个索引。也就是说,仅仅因为设置了$_POST["btnLog"]
,并不意味着$_POST['uId']
和$_POST[' pass']
也已设置。这是一个很常见的错误,即使对于经验丰富的开发人员也是如此(很容易被忽视),但这不是借口。在 SQL 数据库中,您很少选择表中的所有内容。您应该使用
WHERE
子句来缩小搜索范围,例如SELECT * FROM account WHERE id = $i AND pass = '$d'
。你应该读一些SQL tutorials了解 SQL 的工作原理。当您对 SQL 进行排序时,您可能还应该了解一些安全知识(即关于 sanitizing and validating 输入和使用 prepared statements )。搜索“SQL 安全性”或类似的内容,您应该会找到很多阅读 Material 。
在
header('Location: ...')
重定向之前回显某些内容没有意义。重定向响应可能包含正文,但它会被忽略;浏览器只是将浏览器重定向到另一个页面而不显示正文。最后,您比较密码的方式表明您以明文(明文)形式存储密码。如果有人获得了对您数据库的访问权限,他们将可以访问您所有用户的凭据。有些人倾向于对许多不同的网站使用相同的密码,这意味着您也会泄露这些帐户。这是相当严重的。您需要阅读 securing passwords .
祝你好运。
关于php - 我的 php 登录表单有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18246175/