2017-10-30 6 views
0
<?php 

$boxes = array 
(
    array("box1","w","pink"), 
    array("box2",".", "aqua") 
); 

if(isset($_POST['getBoxI'])) { 
    $ind = $_POST['getBoxI']; 
    echo $boxes[$ind][0].','.$boxes[$ind][1].','.$boxes[$ind][2].','; 
} 

if(isset($_POST['setBoxI'])) { 
    $ind = $_POST['setBoxI']; 
    $fill = $_POST['setBoxFill']; 
    $col = $_POST['setBoxCol']; 
    $boxes[$ind][1] = $fill; 
    $boxes[$ind][2] = $col; 
    echo $boxes[$ind][0].','.$boxes[$ind][1].','.$boxes[$ind][2].','; 
} 

?> 

基本的には、異なるユーザーがボックスをクリックして情報を入力できるサイトを構築しようとしています。ボックスはテキストや背景色などのボックスの情報を変更するたびにリアルタイムで更新されます。その情報は、フォームが満たされたときにサーバーに送信されます。フォームは、「setBoxI」キーを使用してjQuery Postingを介して送信されます。クライアントは、「getBoxI」キーを使用して、このPHPファイルへのjQuery PostingによってX秒ごとにページを更新します。PHP - 配列の格納、更新、および読み込みに最適な方法は?

問題は、次にsetBoxIキーを使用して配列を更新しても、getBoxIを使用すると、配列は、表示されているデフォルト値( "box1"、 "w"、 "pink")に戻ります。ユーザーが入力した値。

これは明らかに、この種のデータを保存する最良の方法ではありません。このphpファイルが呼び出されるたびに、ユーザーがsetBoxIキーを使用して作成した配列ではなく、デフォルトの配列が入力されたファイルの新しいコピーが開かれるためだと思います。

nginx、jquery、およびphpを使用しているときにこれを達成するにはどうすればよいでしょうか?

答えて

1

もう1つの設計選択肢は、jQuery AJAXを使用することです。キーを押すたびに、マウスクリックやタイマーイベントが発生すると、データがサーバーに非同期で送信されるように、これをコード化することができます。

サーバーにデータを送信でき、サーバーはすべてのユーザーから結合されたデータを返すことができます。

非常に簡単な例では、ボタンをクリックしたときに、HTMLコントロールにサーバーからファイルを読み込んでいる:

<!DOCTYPE html> 
<html> 
<head> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
<script> 
$(document).ready(function(){ 
    $("button").click(function(){ 
     $.ajax({url: "demo_test.txt", success: function(result){ 
      $("#div1").html(result); 
     }}); 
    }); 
}); 
</script> 
</head> 
<body> 

<div id="div1"><h2>Let jQuery AJAX Change This Text</h2></div> 

<button>Get External Content</button> 

</body> 
</html> 
0

あなたがどこかに要求間のあなたのボックスのデータを保存しなければならないようです。データベース、ファイル、いくつかのキャッシュエンジン、ネットワークストレージなどを使用している可能性があります。

おそらく最も簡単な方法は、シリアル化されたデータをファイルに保存することです。あなたのコードの先頭に

$boxes = json_decode(file_get_contents('boxes')); 

と、次のように格納します:このようにそれらを読んで、ユーザーはそれらを更新した後

file_put_contents('boxes', json_encode($boxes)); 

しかし、データベースを使用することで効果的に解決できるセキュリティ、同時実行性、パフォーマンスなどの問題に気を配ります。

関連する問題