我需要有人来纠正我的错误,这是错误
Notice: Undefined index: login in C:'xampp'htdocs'bank'index.php on line 10
Notice: Undefined index: password in C:'xampp'htdocs'bank'index.php on line 10
Notice: A session had already been started - ignoring session_start() in C:'xampp'htdocs'bank'header.php on line 2
$result = mysql_query("SELECT * FROM customers WHERE loginid='$_POST[login]' AND accpassword='$_POST[password]'");
if(mysql_num_rows($result) == 1)
if(isset($_POST['password'],$_POST['login']))
{
//Your new, safe, PDO/mysqli query
}
至于会话,如果您没有不同的包含,只需删除重复的session_start()
,如果文件有时是独立的,有时是整个项目的一部分,请添加以下检查:
//PHP >= 5.4
if(session_status()==PHP_SESSION_NONE) session_start();
//PHP < 5.4
if(session_id()=='') session_start();
这将检查会话是否已启用,但尚未启动任何会话。
本答案中涵盖了有关更安全的数据库处理的信息,请务必检查该答案中的链接
Notice: Undefined index: login
意味着在您的数组中,没有以"login"作为索引的条目。因此,在您的情况下,这意味着 $_POST 不包含"登录"密钥。您必须验证这些索引是否存在。
isset($_POST['login'])
是一个很好的方法。
array_key_exists('login', $_POST)
是另一种方式。
会议通知
你有一个会话从某个地方开始,然后在C:'xampp'htdocs'bank'header.php
的第二行再次出现。如果 PHP>= 5.4.0,您应该这样做:
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
如果 PHP <5.4.0
:if(session_id() == '') {
session_start();
}
这可以在这里看到:检查PHP会话是否已启动。
未定义的索引和其他问题
但是,您的代码存在以下问题:
- 它受制于SQL注入。
-
mysql_*
不再安全了。您应该使用 PDO 或 MySQLi 来处理数据库。 - 您是否认真地将密码以纯文本形式存储在数据库中?您需要正确散列它们。
修复它(PHP>= 5.5):
$DB = new PDO(/* CORRECT PARAMETERS HERE */);
if (isset($_POST['login']) && isset($_POST['password'])) {
$STH = $DB->prepare("SELECT * FROM customers WHERE loginid = ?");
$STH->execute(array($_POST['login']));
$Result = $STH->fetch();
if(password_verify($_POST['password'], $Result['password'])) {
/* Do what you need to do */
}
}
对于 PHP <= 5.5,您需要添加一个库来使用 if(password_verify(...))
。查看password_compat库以获取更多信息,但基本上是这样的:
include "password_compat.php";
$DB = new PDO(/* CORRECT PARAMETERS HERE */);
if (isset($_POST['login']) && isset($_POST['password'])) {
$STH = $DB->prepare("SELECT * FROM customers WHERE loginid = ?");
$STH->execute(array($_POST['login']));
$Result = $STH->fetch();
if(password_verify($_POST['password'], $Result['password'])) {
/* Do what you need to do */
}
}
对于未定义,您需要检查变量是否像这样设置。
if (isset($_POST[login]) && isset($_POST[password])) {
// your code here
}
对于 A 会话已启动
您已经在header.php
以外的其他地方使用了session_start()
。 所以你需要从任何一个页面中删除它