【发布时间】:2020-07-15 03:01:41
【问题描述】:
我已经建立了一个登录系统,并且保持登录没有问题。用户ID和用户名都存储为会话变量(并存储在数据库的表中),我可以访问它们以供使用在页面本身的html内就好了。
我有一个包含多个选择题的表格。我在表格中输入的任何答案都正确存储在数据库中,没有问题。但是当我尝试将用户名或 id 放入表中时,它不起作用。
用户名显示在 html 中的survey.php(上面有表单的页面)上,如下所示:
<h2><?php
echo $_SESSION['userName'];
?></h2>
在我提交表单之前,用户名已正确显示。提交表单后,相同的页面重新加载并且用户名仍然正确显示。我没有被注销。 $_SESSION['userName'] 未被重置且不为空。
下面的代码按原样完美运行,但如果我替换
$locationMC = $_POST['locationMC'];
与
$locationMC = $_SESSION['userName']; # (the commented out line in the code below)
它会将我重定向到 /survey.php?error=emptyfields,因此当我尝试使用会话变量时没有设置 $locationMC。
用户表和测试表在同一个数据库中。 UserID 设置为主键,但 userName 未编入索引。
有些东西告诉我我在这里遗漏了一些超级基本的东西——我对此真的很陌生——但是在谷歌上搜索了几个小时后,我无法弄清楚问题出在哪里。感谢您的帮助!
<?php
if (isset($_POST['submit'])) {
require 'dbh.inc.php';
$locationMC = $_POST['locationMC'];
# $locationMC = $_SESSION['userName'];
$genderMC = $_POST['genderMC'];
$religionMC = $_POST['religionMC'];
if (empty($locationMC)) {
header("Location: ../survey.php?error=emptyfields");
exit();
}
else {
$sql = "INSERT INTO testingtable (locationMC, genderMC, religionMC) VALUES (?, ?, ?)";
$stmt = mysqli_stmt_init($conn);
if (!mysqli_stmt_prepare($stmt, $sql)) {
header("Location: ../survey.php?error=sqlerror");
exit();
} else {
mysqli_stmt_bind_param($stmt, "sss", $locationMC, $genderMC, $religionMC);
mysqli_stmt_execute($stmt);
header("Location: ../survey.php");
exit();
}
}
mysqli_stmt_close($stmt);
mysqli_close($conn);
}
else {
header("Location: ../survey.php");
exit();
}
下面是 dbh.inc.php。它与注册和登录时使用的文件相同。
<?php
$servername = "localhost";
$dBUsername = "root";
$dBPassword = "";
$dBName = "testingdb";
$conn = mysqli_connect($servername, $dBUsername, $dBPassword, $dBName);
if (!$conn) {
die("Connection failed: ".mysqli_connect_error());
}
【问题讨论】:
-
你是否将 session_start() 添加到 PHP 文件的顶部?
-
你怎么知道不是空的。你试过 print_r($_SESSION);
-
@Ainz-sama 是的。
-
@smartdroid 在页面本身上,我做了 print_r($_SESSION);在运行上述脚本之前和之后,它总是有正确的信息(数组([userId] => 42 [userName] => bob33))。在脚本中,我做了 $genderMC = print_r($_SESSION);它添加到数据库中的只有 1。
-
如果会话已经启动,则不应添加
session_start();,否则您将在每次重新加载时重置会话,这将导致会话用户名在重新加载时为空
标签: php