用于网站多个变量的PHP计数器

时间:2012-03-26 17:24:12

标签: php file-io survey

我正在设置一个服务器,它接受一个带有一些变量的URL,我将使用$ _GET语句来获取。这些变量将增加存储在服务器上的计数器。我打算将这些文件写入文件,然后将其打开/写入类似http://www.developingwebs.net/phpclass/hitcounter.php,但这仅显示一个变量。我更改了代码以反映多个变量,但我不完全确定如何将多个变量写入文件。我正在使用它:

$counters = ("counter.txt");
$increment = file($counters);
/* Bunch of if else ladders checking the $_GET statements and
   incrementing $increments[] accordingly */
for($i; $i < 16; $i++)          //write variables to file
    fputs($fp, $increment[$i]);

其中$ fp指向我正在使用的文本文件,$ increment []保存变量等等。这会有用吗?这可以与多个人同时访问此URL一起使用吗?无论有多少人访问该页面,它都需要准确计算所有变量。

示例:在线提交的调查有4个问题。每个响应都有4个选项,因此总共存储了16个变量。人们将随机地并且可能同时向服务器提交他们的回复。即使有多个人同时提交,我也需要解析他们的回复并相应地更新计数器。

感谢您的帮助,希望我提供足够的细节,但如果不是只是提问。

编辑:网址正在从Android设备发送到服务器我不知道是否会改变任何内容但只是想清楚。 Android设备正在提交调查回复。

3 个答案:

答案 0 :(得分:2)

根据Graham的评论,您最好让数据库服务器处理响应,并将总计作为报告系统的一部分而不是表单提交过程的一部分。

这是一个以元类型代码为例的示例。首先,您的HTML表单:

<form method="GET"> <!-- though I recommend POST instead -->
 <input type="checkbox" name="ch[1]"> Checkbox 1
 <input type="checkbox" name="ch[2]"> Checkbox 2
 <input type="checkbox" name="ch[3]"> Checkbox 3
</form>

然后,接收表单的PHP:

<?php

  $qfmt = "INSERT INTO answers (question, answer) VALUES ('%s, '%s')";

  foreach ($ch as $key => $value) {
    if ($value == 'Yes') {
      $query = sprintf($qfmt, $key, $value);
      mysql_query($query);
    }
  }

  print "<p>Thanks!</p>\n";

?>

最后,要收集总数:

SELECT COUNT(*) FROM answers WHERE question = '1';
SELECT COUNT(*) FROM answers WHERE question = '2';
SELECT COUNT(*) FROM answers WHERE question = '3';

您可以对此进行调整以处理其他表单输入,并且可能存储一个长期存在的会话cookie,以便您检测是否使用相同的浏览器多次填写表单。

答案 1 :(得分:1)

这可能会有效,假设您已经有一个具有正确数量的换行符的现有文件可以让您开始。但我不相信它会很好地保持数据完整性,因为它可能会导致竞争条件。为了防止竞争条件,理论上你会打开文件,flock它,然后写入文件。尝试读取flocked文件的其他脚本实例将不得不等待。更好的方法可能是使用数据库。

答案 2 :(得分:1)

您可以使用http_build_query函数,使用字符串分隔符char来存储$ _GET数组,如“||”。

$data = http_build_query($_GET)."||";
$fp = fopen("counter.txt", "w");
fputs ($fp, $data);
fclose ($fp);

要阅读存储的信息,可以执行此操作

$fp = fopen("counter.txt", "r");
$contents = fread($fp, filesize("counter.txt"));
fclose($fp);

$array=explode("||",$contents);

foreach($array as $var){
   parse_str($var, $data);

   //-$data contains youre stored values.
}