【问题标题】:How to store different variables in session array如何在会话数组中存储不同的变量
【发布时间】:2017-12-23 14:00:57
【问题描述】:

我正在用 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' =&gt; 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>

【问题讨论】:

  • 它工作正常并提供输出Array ( [chat_id] =&gt; 1 [text] =&gt; ss )

标签: php arrays session


【解决方案1】:

我认为问题可能出在这里

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

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

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

【讨论】:

    【解决方案2】:

    请更改您的代码如下:

    <?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() 来做到这一点。

    希望对你有帮助:)

    【讨论】:

    • 能否请您添加更新后的代码,以便我们查看问题所在?
    • 当然,结帐更新1
    • 您好,您可以删除更新后的代码,没有必要。
    • 如果添加此代码后仍有问题,请关闭浏览器并重新打开。 (或者调用 session_destroy(); 在脚本结束时加载页面,然后删除该行,然后再次加载页面。)
    • 我发了一个新问题,请查看here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2020-03-12
    • 2013-03-02
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多