繁体   English   中英

如何在会话数组中存储不同的变量

[英]How to store different variables in session array

我正在用PHP创建一个基本的聊天框。 基本上,我不想使用数据库连接来向用户发送消息。 取而代之的是,我喜欢存储用户在会话数组中发送的不同值。

例如,看一下这个:

<?php 
if (session_status() == PHP_SESSION_NONE) {
    session_start();
    $_SESSION['messages'] = array();  
}
if (isset($_POST['send'])){
    $pm = $_POST['message'];
    array_push($_SESSION['messages'], $pm); 
    $request_params = [
        'chat_id' => $id,
        'text' => implode(" ", $_SESSION['messages'])
    ];
    print_r($request_params);
}
?>
<div class="box-footer">
    <form action="" method="post">
        <div class="input-group">
            <input type="text" name="message" placeholder="Write your direct message" class="form-control">
            <span class="input-group-btn">
                <input name="send" type="submit" class="btn btn-danger btn-flat"/>
            </span>
        </div>
    </form>
</div>

如您所见,它基本上存储了用户在名为$pm的变量中键入的message ,并通过以下语句: 'text' => implode(" ", $_SESSION['messages'])它将简单地推送$pm 字符串值到$_SESSION['messages']

然后,我尝试将$id值(无需在此处包含id的代码,它只是用户的id)保存为chat_id$_SESSION['messages']作为text

现在为了测试这一点,我尝试了print_r($request_params); 但它仅显示以下内容:

Array ( [chat_id] => 108132368 [text] => )

如您所见,它不会返回会话变量$_SESSION['messages'])

那么为什么它不起作用? 如何在会话数组中存储不同的变量?

更新1:

    <?php 
session_start();
if (session_status() == PHP_SESSION_NONE) {
    $_SESSION['messages'] = array();  
}
if (isset($_POST['send'])){
    $pm = $_POST['message'];
    array_push($_SESSION['messages'], $pm); 
    $request_params = [
        'chat_id' => $id,
        'text' => implode(" ", $_SESSION['messages'])
    ];
    echo $_SESSION['messages'];
    print_r($request_params);}
?>
<div class="box-footer">
    <form action="" method="post">
        <div class="input-group">
            <input type="text" name="message" placeholder="Write your direct message" class="form-control">
            <span class="input-group-btn">
                <input name="send" type="submit" class="btn btn-danger btn-flat"/>
            </span>
        </div>
    </form>
</div>

我认为问题可能出在这里

if (session_status() == PHP_SESSION_NONE) {
    session_start();
    $_SESSION['messages'] = array();  
}

变量$_SESSION['messages']在每次加载页面时都会被覆盖,因此可能更改为

session_start();
if( empty( $_SESSION['messages'] ) ) $_SESSION['messages'] = array(); 

请按以下方式更改您的代码:

<?php

//check if a session has been defined earlier somewhere.
if (session_status() == PHP_SESSION_NONE)
    session_start();

if(!isset($_SESSION['messages']))
    $_SESSION['messages'] = array();

if (isset($_POST['send'])){
   // your code...
}

最初,您的问题是每次提交表单时都创建了一个新的数组(对不起,我之前误解了您的目的)。

但是,您不应该在session_status() == PHP_SESSION_NONE条件内声明$_SESSION['messages'] 您需要查看是否已经定义了$_SESSION['messages']数组,如果没有定义,请进行定义。 使用isset()可以做到这一点。

希望能帮助到你 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM