13

我是 PHP 新手,在会话方面更是初学者。我有我的 index.php 页面,用户可以在其中注册和登录。表单发布到 validate.php 和 loginvalidate.php 页面,分别用于注册和登录。

加载 index.php 时出现以下错误:

1) 注意:未定义索引:已注册 2) 注意:未定义索引:未使用

我尝试以多种方式修改我的文本,但我从来没有解决错误。

索引.php

    <?php
            if ($_SESSION['registered'] != NULL){
                echo $_SESSION['registered'];                   
            }
            if ($_SESSION['badlogin'] != NULL){
                echo $_SESSION['badlogin'];
            }
            if ($_SESSION['neverused'] != NULL) {
                echo $_SESSION['neverused'];                    
            }
    ?>

Validate.php(提交注册表后)

    if (mysqli_num_rows($result) > 0) {  //IF THERE IS A PASSWORD FOR THAT EMAIL IN DATABASE
    $_SESSION['registered'] = "Email is already registered.";
    mysqli_close($db_handle);
    header('Location: index.php');
    exit();
}

Loginvalidate.php(提交登录表单后)

if ($numrows!=0)  //IF THERE IS A PASSWORD FOR THAT EMAIL IN THE DATABASE
{
  if ($row['password'] == $password) {  //IF THE PASSWORD MATCHES USER INPUT
      header('Location: homepage.php');
      echo "lol";
      exit();
  }
  else{
    $_SESSION['badlogin'] = "Email/password combination not valid.";
    mysqli_close($db_handle);
    header('Location: index.php');
    exit();
  } 
}
else {  //THERE IS NO PASSWORD FOR THAT EMAIL, SO THAT EMAIL IS NOT REGISTERED
    $_SESSION['neverused'] = "Email is not registered.";
    mysqli_close($db_handle);
    header('Location: index.php');
    exit();
}

好的,所以我的脚本做了它打算做的事情。我唯一无法解决的是这些会话错误。您是否看到任何滥用会话的情况?当然,我已经在我的所有 .php 文件中启动了会话。

另外,请注意,我知道没有针对黑客的保护。这仅适用于不包含任何重要数据的未来原型。

4

2 回答 2

21

这些错误的原因是您试图读取一个不存在的数组键。isset()函数在那里,因此您可以对此进行测试。对于每个元素,如下所示的内容将是一种享受;不需要 null 检查,因为您永远不会将 null 分配给元素:

// check that the 'registered' key exists
if (isset($_SESSION['registered'])) {

    // it does; output the message
    echo $_SESSION['registered'];

    // remove the key so we don't keep outputting the message
    unset($_SESSION['registered']);
}

您也可以在循环中使用它:

$keys = array('registered', 'badlogin', 'neverused');

//iterate over the keys to test
foreach($keys as $key) {

    // test if $key exists in the $_SESSION global array
    if (isset($_SESSION[$key])) {

        // it does; output the value
        echo $_SESSION[$key];

        // remove the key so we don't keep outputting the message
        unset($_SESSION[$key]);
    }
}
于 2013-09-11T02:39:29.060 回答
4

如果您遇到未定义的索引错误,您可以尝试确保在尝试比较值之前设置您的索引。在此处查看 isset 函数的文档:http: //php.net/manual/en/function.isset.php

if (isset($_SESSION['registered']))
  if ($_SESSION['registered'] != NULL){
      echo $_SESSION['registered'];                   
  }
}
if (isset($_SESSION['badlogin']))
  if ($_SESSION['badlogin'] != NULL){
      echo $_SESSION['badlogin'];
  }
}
if (isset($_SESSION['neverused']))
  if ($_SESSION['neverused'] != NULL) {
      echo $_SESSION['neverused'];                    
  }
}
于 2013-09-11T02:30:39.133 回答