Счетчик PHP для нескольких переменных для сайта - PullRequest
1 голос
/ 26 марта 2012

Я хочу настроить сервер, который принимает 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 переменных.Люди будут отправлять свои ответы на сервер случайным образом и, возможно, одновременно.Мне нужно проанализировать их ответ и соответствующим образом обновить счетчик, даже если несколько человек подают заявку одновременно.

Спасибо за любую помощь, надеюсь, я предоставил достаточно деталей, но если не просто задать вопросы.

РЕДАКТИРОВАТЬ: URL-адрес отправляется с устройства Android на сервер, я не знаю, если это что-то меняет, но просто хотел быть ясным.Устройство Android отправляет ответы на опрос.

Ответы [ 3 ]

2 голосов
/ 26 марта 2012

Основываясь на комментариях Грэма, вам будет гораздо лучше позволить серверу базы данных обрабатывать ответы и строить свои итоги как часть системы отчетности, а не как часть процесса отправки формы.

Вот примерв виде мета-кода.Во-первых, ваша 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 голос
/ 26 марта 2012

Вы можете использовать функцию http_build_query для хранения массива $ _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.
}
1 голос
/ 26 марта 2012

Это может сработать, если у вас уже есть существующий файл с нужным количеством символов новой строки, чтобы начать вас. Однако я не верю, что он будет поддерживать целостность данных очень хорошо, так как это может привести к гонке. Чтобы предотвратить состояние гонки, теоретически вы должны открыть файл, собрать его, а затем записать в файл. Другие экземпляры сценария, пытающиеся прочитать скопированный файл, должны будут ждать. Лучшим подходом может быть использование базы данных.

...