我需要一个人来解决我的错误,这是错误
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)
答案 0 :(得分: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();
这会检查会话是否已启用,但都没有启动。
this answer中介绍了有关更安全的数据库处理的信息,请务必查看该答案中的链接
答案 1 :(得分:0)
你有一个会话从某个地方开始,然后又在C:\xampp\htdocs\bank\header.php
的第二行开始。如果 PHP&gt; = 5.4.0 :
if (session_status() == PHP_SESSION_NONE) {
session_start();
}
如果 PHP&lt; 5.4.0 强>:
if(session_id() == '') {
session_start();
}
这可以在这里看到:Check if PHP session has already started。
但是,您的代码存在以下问题:
mysql_*
不再安全。您应该使用PDO或MySQLi进行数据库处理。修复它( PHP&gt; = 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&lt; = 5.5 ,您需要添加一个库以使用if(password_verify(...))
。查看password_compat library了解更多信息,但基本上是这样的:
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 */
}
}
答案 2 :(得分:0)
Notice: Undefined index: login
表示在您的数组中,没有以“login”作为索引的条目。所以在你的情况下,这意味着$ _POST不包含“登录”键。
您必须验证这些索引是否存在。
isset($_POST['login'])
是一个很好的方法。
array_key_exists('login', $_POST)
是另一种方式。
答案 3 :(得分:-1)
对于未定义,您需要检查变量是否设置为
if (isset($_POST[login]) && isset($_POST[password])) {
// your code here
}
会话已经开始
您已在session_start()
以外的其他位置使用header.php
。所以你需要从页面的任何一个中删除它