2017-12-23 14 views
0

私はPHPで基本的なチャットボックスを作っています。基本的には、ユーザーにメッセージを送信するためにデータベース接続を使用したくありません。その代わりに、私はユーザーがセッション配列に送る異なる値を格納するのが好きです。それ意志簡単なプッシュ文字列'text' => implode(" ", $_SESSION['messages']):あなたは、それは基本的にユーザーが$pmという変数にし、この文で入力されたmessageを保存見ることができるようにセッション変数に異なる変数を格納する方法

<?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> 

:この時AA見てみましょうたとえば

$pm$_SESSION['messages']を入力します。

それから私はtextとしてchat_id$_SESSION['messages']として(ここでは、IDのコードを含める必要、それはユーザーのだけのIDではありません)$id値を保存しよう。

は今これをテストするために私がprint_r($request_params);を試みたが、それだけでこれだけを示しています。あなたはそれが$_SESSION['messages'])でセッション変数を返しません見ることができるように

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

を。

なぜそれが機能しないのですか?セッション配列に異なる変数を格納するにはどうすればよいですか?

UPDATE 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> 
+0

:)それが役に立てば幸いと出力に '配列([chat_id] => 1 [テキスト] => SS)' – Artier

答えて

1

私はこの問題はここにあるかもしれないと思う

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

変数$_SESSION['messages']ので、おそらく

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

を与える、私はそれを試してみましたが、まだ空の値に – roureuaevane

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_status() == PHP_SESSION_NONEの条件内で$_SESSION['messages']を宣言しないでください。配列$_SESSION['messages']が既に定義されているかどうかを確認し、定義されていない場合はそれを定義する必要があります。これを行うにはisset()を使用してください。

は、その作業罰金

+0

を与え、私はそれを試してみましたが、まだ空の値を与えます – roureuaevane

+0

あなたは何が間違っているかを見ることができるように更新されたコードを追加してください。 –

+0

確かに、チェックアウト**更新1 **。 – roureuaevane

関連する問題