Пользователь:    Пароль:    Запомнить     
 

AJAX-голосование

Опубликовано admin-ом в категории php

AJAX вместе с термином web 2.0 прочно поселился в нашем сознании. Несмотря на присущие ему (как, впрочем и любой относительно молодой технологии) в некоторых аспектах он выглядет гораздо привлекательнее традиционных подходов к веб-приложениям. Один из таких примеров - интерактивные опросы, проводимые на сайтах. Действительно, почему бы в онлайн-голосованиях не использовать AJAX?

Оценить рабочий пример в действии можно здесь. Хочу сразу оговориться, что пример упрощен и предназначен всего лишь для демонстрации связки AJAX+PHP. Нам придется создать четыре файла:
- файл, содержащий JavaScript
- файл PHP
- файл html, содержащий простую форму
- текстовый файл, который будет хранить результаты опроса
JavaScript будет передавать значение функции getVote php-файлу, который будет это значение записывать и выводить результат.

Вот содержимое poll.js:

  1. var xmlHttp
  2.  
  3. function getVote(int)
  4. {
  5. xmlHttp=GetXmlHttpObject()
  6. if (xmlHttp==null)
  7.  {
  8.  alert ("Browser does not support HTTP Request")
  9.  return
  10.  }
  11. var url="poll_vote.php"
  12. url=url+"?vote="+int
  13. url=url+"&sid="+Math.random()
  14. xmlHttp.onreadystatechange=stateChanged
  15. xmlHttp.open("GET",url,true)
  16. xmlHttp.send(null)
  17. }
  18.  
  19. function stateChanged()
  20. {
  21.  if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  22.  {
  23.  document.getElementById("poll").
  24.  innerHTML=xmlHttp.responseText;
  25.  }
  26. }
  27.  
  28. function GetXmlHttpObject()
  29. {
  30. var objXMLHttp=null
  31. if (window.XMLHttpRequest)
  32.  {
  33.  objXMLHttp=new XMLHttpRequest()
  34.  }
  35. else if (window.ActiveXObject)
  36.  {
  37.  objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
  38.  }
  39. return objXMLHttp
  40. }


PHP-скрипт (не будем его усложнять взаимодействием с MySQL) должен делать следующее:
- получить содержимое текстового файла;
- прибавить к одной из переменный (в зависимости от результата голосовавшего) единицу;
- переписать содержимое текстового файла;
- вывести результат;

Вот примерное содержимое poll_vote.php:
  1. <?php
  2. $vote = $_REQUEST['vote'];
  3.  
  4. $filename = "poll_result.txt";
  5. $content = file($filename);
  6.  
  7. $array = explode("||", $content[0]);
  8. $yes = $array[0];
  9. $no = $array[1];
  10.  
  11. if ($vote == 0)
  12.  {
  13.  $yes = $yes + 1;
  14.  }
  15. if ($vote == 1)
  16.  {
  17.  $no = $no + 1;
  18.  }
  19.  
  20. $insertvote = $yes."||".$no;
  21. $fp = fopen($filename,"w");
  22. fputs($fp,$insertvote);
  23. fclose($fp);
  24. ?><h2>Result:</h2><table><tr><td>Yes:</td><td><img src="poll.gif"
  25. width='<?php echo(100*round($yes/($no+$yes),2)); ?>'
  26. height='20'><?php echo(100*round($yes/($no+$yes),2)); ?>%
  27. </td></tr><tr><td>No:</td><td><img src="poll.gif"
  28. width='<?php echo(100*round($no/($no+$yes),2)); ?>'
  29. height='20'><?php echo(100*round($no/($no+$yes),2)); ?>%
  30. </td></tr></table>


HTML - обычный файл, содержащий форму для голосования. Единственное что хочется заметить - вешаем на события onclick по радиокнопке обращение к функции getVote:

  1. onclick="getVote(this.value)"


Текстовый файл - простой файл с расширением txt, в котором результаты данных для удобства будут разделены двумя вертикальными чертами. Не забудьте поставить ему соответствующий chmod, чтобы скрипт имел возможность изменять эти данные.

Если что-то непонятно, то скачать готовые исходники можно как обычно, с файлового архива.

  отпавить с помощью email кому-нибудь   для печати   просмотр в pdf