如何在会话数组

时间:2017-12-23 14:00:57

标签: php arrays session

我正在用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>

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

然后我尝试将$id值(不需要在此处包含id代码,它只是用户的ID)保存为chat_id,将$_SESSION['messages']保存为{{1 }}。

现在为了测试这个,我尝试了text,但它只显示了这个:

print_r($request_params);

正如您所看到的,它不会返回Array ( [chat_id] => 108132368 [text] => ) 的会话变量。

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

更新1:

$_SESSION['messages'])

2 个答案:

答案 0 :(得分:1)

我认为问题可能就在这里

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

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

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

答案 1 :(得分:1)

请更改您的代码,如下所示:

<?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['messages']条件中声明session_status() == PHP_SESSION_NONE。您需要查看是否已定义$_SESSION['messages']数组,如果没有,请定义该数组。使用isset()来执行此操作。

希望有所帮助:)