PHP - 存储,更新和读取数组的最佳方法?

时间:2017-10-30 04:55:15

标签: php jquery arrays ajax post

<?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].',';
}

?>

基本上我正在尝试建立一个网站,其中不同的用户可以点击框并输入信息,并且只要有人更改框的信息(例如文本或背景颜色),框就会“实时”更新。表单填写后,该信息将被发送到服务器。表单通过jQuery Posting使用'setBoxI'键发送。客户端使用'getBoxI'键,通过jQuery Posting到这个php文件,每隔X秒更新一次页面。

问题是即使你使用setBoxI键更新数组,下次使用getBoxI时,数组也会回到显示的默认值(“box1”,“w”,“pink”)而不是值用户输入的内容。

显然,这不是存储此类数据的最佳方式。我相信这是因为每次调用这个php文件时,它会打开一个新的文件副本,该文件包含输入的默认数组,而不是用户通过setBoxI键创建的数组。

在仅使用nginx,jquery和php的情况下实现此目的的更好方法是什么?

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

似乎您必须在请求之间的某处存储您的盒子数据。可能的approches正在使用数据库,文件,一些缓存引擎,网络存储等。

最简单的方法可能是将序列化数据存储到文件中。像这样阅读:

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

在您的代码和商店的开头,如下所示:

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

用户更新后。

但是你必须要考虑安全性,并发性,性能和其他问题,这些问题可以通过使用数据库来有效解决。