0

我需要有人来纠正我的错误,这是错误

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

4 回答 4

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();

这将检查会话是否已启用,但尚未启动。

此答案中涵盖了有关更安全的数据库处理的信息,请务必检查该答案中的链接

于 2013-10-03T12:04:37.530 回答
0

会议通知

你有一个从某个地方开始的会话,然后在C:\xampp\htdocs\bank\header.php's 第二行。如果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 */
    }
  }
于 2013-10-03T11:56:36.023 回答
0

Notice: Undefined index: login意味着在您的数组中,没有以“登录”作为索引的条目。因此,在您的情况下,这意味着 $_POST 不包含“登录”密钥。您必须验证这些索引是否存在。

isset($_POST['login'])是一个很好的方法。

array_key_exists('login', $_POST)是另一种方式。

于 2013-10-03T11:59:18.120 回答
-1

对于未定义,您需要检查变量是否设置为这样

if (isset($_POST[login]) && isset($_POST[password])) {
    // your code here

}

对于一个会话已经开始

您已经在session_start()其他地方使用过 then header.php。所以你需要从任何一个页面中删除它

于 2013-10-03T11:55:16.057 回答