<?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的情况下实现此目的的更好方法是什么?
答案 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));
用户更新后。
但是你必须要考虑安全性,并发性,性能和其他问题,这些问题可以通过使用数据库来有效解决。