我如何更正此错误注意:会话已经启动并且未定义索引

时间:2013-10-03 11:53:10

标签: php

我需要一个人来解决我的错误,这是错误

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)

4 个答案:

答案 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

未定义的索引和其他问题

但是,您的代码存在以下问题:

  • SQL injection
  • 约束
  • mysql_*不再安全。您应该使用PDO或MySQLi进行数据库处理。
  • 认真地将密码作为纯文本存储在数据库中吗?您需要properly hash them

修复它( 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。所以你需要从页面的任何一个中删除它