我一直在使用 PHP 和 MySQLi 功能登录系统,但是我遇到了一个我认为无法识别会话的错误,我无法弄清楚它为什么会发生的原因。
编辑:更新了代码。
的login.php
<?php
session_start();
require 'db/connect.php';
If (Isset($_POST['Login'])) {
$EM = mysqli_real_escape_string($db, $_POST['email']); //Assign directly no need to create the $EM. You can put the whole into your query also
$PW = mysqli_real_escape_string($db, $_POST['password']);
$result = $db->query("select * from users where Email='$EM' AND password='$PW'");
$row = $result->fetch_array(MYSQLI_BOTH);
$_SESSION["UserID"] = $row['UserID'];
header('location: Account.php');
exit;
}
?>
Account.php
<?php
require 'db/connect.php';
session_start();
if (isset($_SESSION["UserID"])) {
include 'header.php'; //It contains output so move after session_start();
echo 'Successfully logged in';
} else {
header('location: Login.php');
exit;
}
?>
答案 0 :(得分:1)
在调用session_start();之前有输出。这应该导致&#34;标题已经发送&#34; -fatal error。
删除account.php中的空行(关闭并打开php无论如何都没有意义,在此片段中)
include 'header.php';
?>
<?php
session_start();
header.php中是否有某种输出?
你有任何错误消息吗?您可以通过在代码顶部添加以下内容来显示错误:
ini_set('display_errors', 1);
error_reporting(-1);
在知道heder.php的作用后编辑:你的account.php应该像这样开始
<?php
session_start();
require 'db/connect.php';
include 'header.php';
答案 1 :(得分:0)
修改强>
基于OP评论。
以下是精美文件。不要在session_start()
或header()
函数之前放置任何内容,在这些函数之前缓冲区中应该没有任何输出。
session_start();
require 'db/connect.php';
if (Isset($_POST['Login'])) {
$EM = mysqli_real_escape_string($db, $_POST['email']); //Assign directly no need to create the $EM. You can put the whole into your query also
$PW = mysqli_real_escape_string($db, $_POST['password']);
$result = $db->query("select * from users where Email='$EM' AND password='$PW'");
$row = $result->fetch_array(MYSQLI_BOTH);
$_SESSION["UserID"] = $row['UserID'];
header('location: Account.php');
exit;
}
Account.php
session_start();
require 'db/connect.php';
if (isset($_SESSION["UserID"])) {
include 'header.php'; //It contains output so move after session_start();
echo 'Successfully logged in';
} else {
header('location: Login.php');
exit;
}