簡體   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