首页 > 解决方案 > $_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 的开头添加了,双引号并没有解决问题。

标签: phpauthenticationmysqli

解决方案


您尝试获取字符串的特定索引而不是结果/行数组:

$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) 是真的。

ideone.com 上的演示

如何解决这个问题?

您可以使用该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');
    }
}

推荐阅读