simple网站在php5.3上运行良好,但在升级我的php版本后,会话上出现错误。但是为了登录我的网站管理页面,我一直在使用以下代码。
login.php
<?php
session_start();
$msg = "";
include 'connection/conn.php';
if(isset($_POST['submit']))
{
$email = $conn-> real_escape_string($_POST['email']);
$password = $conn-> real_escape_string($_POST['password']);
$error="Check Your Inputs";
$sql = $conn-> query("SELECT id ,passwor FROM users WHERE email='$email'");
if ($sql->num_rows > 0) {
$data = $sql ->fetch_array();
if (password_verify($password, $data['passwor']))
{
$_SESSION['logedinemail'] = $email;
header("Location: Dash");
exit();
}
else
{
$msg ="Please Check Your Inputs";
}
}
}
?>
和我的仪表板
<?php
session_start();
if ($_SESSION['logedinemail']==true) {
}
else
{
header("Location: index.php");
}
?>
但最近我将php版本升级到了7.2,出现了以下错误PHP注意:未定义的索引:在/home/xx/yy/zz/Dash.PHP第3行登录电子邮件感谢
如果您没有登录,或者在数据库中找不到您的用户,或者密码不正确,那么您就没有在会话数组中创建索引"logedinmail"。
当您执行$_SESSION['logedinemail'] == true
时,PHP会尝试比较值,但$_SESSION中的索引没有创建,并且您会看到您正在查看的错误。
在login.php中使用$_SESSION['logedinemail'] = false
全局初始化这个超级全局(在执行if(isset($_POST['submit']))
之前(,或者检查它是否设置为(在仪表板中(:
if (isset($_SESSION['logedinemail']) && $_SESSION['logedinemail'] === true) { ... }
此外,最好始终将类型secure与===
而不是==
进行比较。