【发布时间】:2021-09-11 15:20:51
【问题描述】:
我正在编写一个代码来连接到 mysql 并检索登录信息。我使用 connect.php 来保存我在 login.php 中使用 require_once 获得的敏感数据:
<?php
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
?>
<?php
$checkMail= $_POST["email"];
$checkPwd= $_POST["password"];
$registration_status='Active';
require_once ('connect.php');
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed, please retry later: " . $conn->connect_error);
}
$sql = "SELECT email, password, registration_type, registration_status, emailupdate FROM registration where email='".$checkMail."'";
$result = $conn->query($sql);
if ($result->num_rows == 1) {
while($row = $result->fetch_assoc()) {
if ($row['registration_status'] == "Deactive") {
session_start();
$_SESSION['error'] = "<b>This user name is deactivated. <br> Please create a new account.</b><span>";
header("Location: http://www.xxxxxxx//registration.php"); /* Redirect browser */
}
elseif (password_verify($checkPwd, $row['password'])) {
?>
通过上面的方法,db 连接正常,但是没有执行 header 命令。如果我在 login.php 中删除 require_once 并直接添加 connect.php 的内容,那么就有
$checkMail= $_POST["email"];
$checkPwd= $_POST["password"];
$registration_status='Active';
$servername = "xxx";
$username = "xxx";
$password = "xxx";
$dbname = "xxx";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed, please retry later: " . $conn->connect_error);
}
$sql = "SELECT email, password, registration_type, registration_status, emailupdate FROM registration where email='".$checkMail."'";
$result = $conn->query($sql);
if ($result->num_rows == 1) {
while($row = $result->fetch_assoc()) {
if ($row['registration_status'] == "Deactive") {
session_start();
$_SESSION['error'] = "<b>This user name is deactivated. <br> Please create a new account.</b><span>";
header("Location: http://www.xxxxxxx/registration.php"); /* Redirect browser */
header 命令处理正确,重定向成功。
header 和 require_once 不兼容?还是我错过了什么?
感谢您的支持
【问题讨论】:
-
当然,它们是兼容的。您还尝试过什么来解决问题?此外,请注意您的 SQL 查询对于 SQL 注入是广泛开放的。最好看看准备好的语句
-
$dbname = "xxx"; ?> <?php $checkMa为什么要有结束标签和开始标签?如果那里有空格,它就是输出,你就有麻烦了:记住,header() 必须在发送任何实际输出之前调用,无论是通过普通的 HTML 标记、文件中的空行还是从 PHP。(来自manual) -
“还是我错过了其他东西?” - 听起来您可能错过了以一种对开发来说合理的方式配置 PHP 错误报告。否则,您会收到一条错误消息,告诉您发生了什么,并明确在哪里创建了第一个输出。
-
我不会关闭并重新打开标签。这些是 2 个不同的脚本:connect.php 包含第一个脚本,而 login 包含第二个脚本。第一个脚本是通过 require_once 命令调用的。无论如何,我会按照 Nico Haase 在第一个答案中的建议查看代码。
-
另外,在设置标题后使用
exit会有所帮助,只是为了强制停止脚本在那里
标签: php require-once