php - $_SESSION 变量在设置时总是打印'S'而不是预期的变量
问题描述
<?php
if($_POST)
{
include 'config.php';
$referencenumber=$_POST['reference_number'];
$fullname=$_POST['full_name'];
$sRef=mysqli_real_escape_string($conn,$referencenumber);
$sName=mysqli_real_escape_string($conn,$fullname);
$query="SELECT * From customers where reference_number='$sRef' and
full_name='$sName'";
$result=mysqli_query($conn,$query);
if(mysqli_num_rows($result)==1)
{
session_start();
$_SESSION['id'] = $query['id'];
$_SESSION['refnumber'] = $query['reference_number'];
header('location:index.php');
}
}
?>
上面的代码是我在 login.php 页面上写的。成功登录后,用户到达 index.php 页面。
var lz_data = {overwrite:true,111:'<?php
print_r($_SESSION['refnumber'])?>',
然后我尝试在此处打印下一页上的参考号,这将设置一个与 $_SESSION['refnumber'] 中的值匹配的值,但由于某种原因,此代码的输出在打印时似乎总是“S” ,只是字母 S。当我尝试打印 $_SESSION['id'] 时,我也会得到相同的输出。有任何想法吗?
编辑: session_start(); 在 index.php 的开头添加了,双引号并没有解决问题。
解决方案
您尝试获取字符串的特定索引而不是结果/行数组:
$query="SELECT * From customers where reference_number='$sRef' and full_name='$sName'";
$_SESSION['id'] = $query['id']; // $query is a string not an array.
$_SESSION['refnumber'] = $query['reference_number']; // $query is a string not an array.
为什么你在会话中只得到“S”?
您可以像数组一样在 PHP 上使用字符串值。所以你可以用$query[0]
得到“S”和$query[1]
得到“E”等等。在你的情况下$query['id']
是一样的,$query[0]
因为var_dump('id' == 0)
是真的。
如何解决这个问题?
您可以使用该mysqli_result::fetch_array
方法从以下位置获取列作为索引的行$result
:
//get the $row from $result with fetch_array.
$row = $result->fetch_array(MYSQLI_ASSOC);
//now you can use the row array to set the values to the session.
$_SESSION['id'] = $row['id'];
$_SESSION['refnumber'] = $row['reference_number'];
因此,您的代码如下所示:
<?php
if($_POST) {
include 'config.php';
$referencenumber = $_POST['reference_number'];
$fullname = $_POST['full_name'];
$sRef = mysqli_real_escape_string($conn, $referencenumber);
$sName = mysqli_real_escape_string($conn, $fullname);
$query = "SELECT * From customers where reference_number='$sRef' and full_name='$sName'";
$result=mysqli_query($conn, $query);
if(mysqli_num_rows($result) == 1) {
//get the $row from $result with fetch_array.
$row = $result->fetch_array(MYSQLI_ASSOC);
session_start();
$_SESSION['id'] = $row['id'];
$_SESSION['refnumber'] = $row['reference_number'];
header('location:index.php');
}
}
推荐阅读
- javascript - 如何计算某个单词在 JavaScript 中充满文本的 div 中出现的次数?
- python - 如何从 Python 中的测试数据进行插值?2组输入
- amazon-cognito - 如何将 AWS Cognito 本机用户链接到联合用户
- java - 为什么在执行 Java Stream 终端操作时对象没有被垃圾收集?
- python - Keras 自定义数据生成器通过多输入和多输出提供维度错误(功能性 api 模型)
- php - 数组、数组和对象
- macos - macOS Big Sur - 安装所选更新时出错
- javascript - 满足按钮单击条件以在javascript中显示消息
- powershell - 分隔输入到字符串中的值
- typescript - Angular TS 构造函数使网页消失