php Простой скрипт голосования - опроса на PHP 

Дата публикации  Дата изменения28.05.16  Комментарии47   Просмотры53241

Курсы

Голосование-опрос на PHP на файлах с различными вариантами вывода: в новом окне, во всплывающем окне, в iframe, с защитой от повторного голосования по ip и от передачи в запросе несуществующих или не соответствующих параметров голосования.

За основу взят скрипт http://www.php.su/articles/?cat=examples&page=025, подробные объяснения там же.

  • Легкий по весу и быстрый
  • Не требует базы данных
  • Количество голосований неограниченно
  • Количество пунктов голосования неограниченно
  • Используется один обработчик для всех голосований
  • Создать новое голосование очень просто

Пример использования:

Общее:

Для каждого голосования создается отдельные три файла и используется один обработчик:

$id.dat, где $id – номер голосования (произвольная цифра; должна быть одинакова в двух .dat файлах) — для сохранения результатов этого голосования;
ip$id.dat — для сохранения проголосовавших ip адресов;
$name.php, где $name — любое имя файла для вывода голосования;

vote.php — общий обработчик для всех голосований

1. С выводом результатов в новом окне:

Создаем файлы:

  1. 1.dat – файл с опросом и для сохранения результатов;
  2. ip1.dat – пустой файл для сохранения проголосовавших ip адресов;
  3. golos1.php – запускной файл для этого голосования с формой запроса;
  4. vote.php — общий для всех обработчик

Файл 1.dat

Оцените сайт:
0~Отлично
0~Хорошо
0~Удовлет.
0~Плохо
0~Очень плохо

Файл golos1.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Голосование с выводом в новом окне</title>
</head>
<body>

<form action="vote.php" method="get" target='_blank'>
<!-- указываем в value цифру нужного нам голосования, для которого уже создали файлы //-->
<input type="Hidden" name="id" value="1">
<p><b>Оцените сайт:</b></p>
<input type="Radio" name="vote" value="1" checked>Отлично<br>
<input type="Radio" name="vote" value="2">Хорошо<br>
<input type="Radio" name="vote" value="3">Удовлет.<br>
<input type="Radio" name="vote" value="4">Плохо<br>
<input type="Radio" name="vote" value="5">Очень плохо<br>
<input type="Submit" value=" Голосовать" style="margin-top:10px;">
</form>

<!-- указываем в href после vote.php?id= цифру нужного нам голосования, для которого уже создали файлы //-->
<p><a href='vote.php?id=1' target='_blank'><button>Результаты</button></a></p>

</body>
</html>

Файл vote.php

<?php
// получаем файлы по определенному голосованию
$id =  (int) $_GET[id]; //приводим к целому числу идентификатор голосования
$vote = (int) $_GET[vote]; //приводим к целому числу передаваемое значение голосования

//проверяем, существует ли такое голосование
if (file_exists("$id.dat")) {

$ip= $_SERVER['REMOTE_ADDR']; //получаем ip адрес
$ip_file = file_get_contents("ip$id.dat");//читаем содержимое файла ip адресов и помещаем в строку
$ip_abbr = explode(",", $ip_file);//получаем в массив имеющиеся ip адреса

$data = file("$id.dat"); //читаем содержимое файла результатов и помещаем в массив

// если это не просто просмотр результатов
if ($vote) {

//сравниваем ip с уже записанными
foreach($ip_abbr as $value) 
if ($ip == $value) {echo "<p><b><font color=red> Вы уже голосовали! </font></b></p>";
exit;
}
// выводим благодарность
echo "<p><b><font color=green> Спасибо! </font></b><br /><i>*Показаны результаты до Вашего голосования:</i><p>";
}

// выводим заголовок голосования - 1я строка файла
echo "<b>$data[0]</b><p>";

// печатаем список ответов и результатов - остальные строки
for ($i=1;$i<count($data);$i++) {
  $votes = explode("~", $data[$i]); // значение~ответ
  echo "$votes[1]: <b>$votes[0]</b><br>"; //поменяйте местами 0 и 1 в $votes и в результатах цифры будут первыми
}
echo "<br>Всего проголосовало: <b>".(count($ip_abbr)-1)."</b>";

// если это не просмотр результатов, а голосование,
// производим необходимые действия для учета голоса
if ($vote) {
  $f = fopen("$id.dat","w");
  flock($f,LOCK_EX);
  fputs($f, "$data[0]");
  for ($i=1;$i<count($data);$i++) {
    $votes = explode("~", $data[$i]);
    if ($i==$vote) $votes[0]++;
    fputs($f,"$votes[0]~$votes[1]");
	fflush($f);
flock($f,LOCK_UN);
  }
  fclose($f);
  
//и записываем ip
  $ip_adr = fopen("ip$id.dat","a++");
	flock($ip_adr,LOCK_EX);
 fputs($ip_adr, "$ip".",");
 fflush($ip_adr);
	flock($ip_adr,LOCK_UN);
fclose($ip_adr);
  }

  } else {
//передан id несуществующего голосования
     echo "Такого голосования не существует.";
	exit;
}

?>

2. С выводом результатов во всплывающем окне:


Тот же порядок, как и в 1 примере, меняется только содержимое запускного файла:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Голосование с выводом во всплывающем окне</title>
<!--  подключаем js функцию для вывода во всплывающих окнах //-->
<script language=JavaScript><!--
function pop_voice() {pop=window.open('','voice','width=250,height=350,left=250,top=100'); pop.focus();}
//-->
</script>
</head>
<body>

<!--  указываем в target окно вывода //-->
<form action="vote.php" method="get" target='voice'>
<input type="Hidden" name="id" value="1">
<p><b>Оцените сайт:</b></p>
<input type="Radio" name="vote" value="1" checked>Отлично<br>
<input type="Radio" name="vote" value="2">Хорошо<br>
<input type="Radio" name="vote" value="3">Удовлет.<br>
<input type="Radio" name="vote" value="4">Плохо<br>
<input type="Radio" name="vote" value="5">Очень плохо<br>
<!--  указываем вызов функции по клику //-->
<input type="Submit" value=" Голосовать" style="margin-top:10px;"  onClick='pop_voice();' >
</form>

<!--  указываем в target окно вывода и вызов функции по клику //-->
<p><a href='vote.php?id=1' onClick='pop_voice();' target='voice'><button>Результаты</button></a></p>

</body>
</html>

3. С выводом результатов в iframe:


Тот же порядок, как и в 1 примере, меняется только содержимое запускного файла:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Голосование с выводом в iframe</title>
</head>
<body>

<!--  указываем в target имя фрейма //-->
<form action="vote.php" method="get" target="hero">
<input type="Hidden" name="id" value="1">
<p><b>Оцените сайт:</b></p>
<input type="Radio" name="vote" value="1" checked>Отлично<br>
<input type="Radio" name="vote" value="2">Хорошо<br>
<input type="Radio" name="vote" value="3">Удовлет.<br>
<input type="Radio" name="vote" value="4">Плохо<br>
<input type="Radio" name="vote" value="5">Очень плохо<br>
<input type="Submit" value=" Голосовать" style="margin-top:10px;">
</form>

<!--  указываем в target имя фрейма //-->
<p><a href='vote.php?id=1' target="hero"><button>Результаты</button></a></p>

<!--  указываем в name имя фрейма и в src то, что будет показываться по умолчанию (результаты) //-->
<iframe name="hero"  src="vote.php?id=1" width="150" height="200" frameborder="0" style="border: 0px solid black" scrolling="auto">
    Ваш браузер не поддерживает плавающие фреймы!
</iframe>

<p>Lorem ipsum</p>

</body>
</html>

 Смотреть пример ⇥ вариант 1: в новом окне

 Смотреть пример ⇥ вариант 2: во всплывающем окне

 Смотреть пример ⇥ вариант 3: в iframe

  Размер:  4,47kB | Изменен: 22.10.13 | Загрузок: 2250

*UPD:

  • Вариант с вычислением процента и процентной шкалой (гистограммой):

Голосование опрос с процентами

Файл vote.php

<?php
// получаем файлы по определенному голосованию
$id =  (int) $_GET[id];
$vote = (int) $_GET[vote];

if (file_exists("$id.dat")) {

$ip= $_SERVER['REMOTE_ADDR'];
$ip_file = file_get_contents("ip$id.dat");
$ip_abbr = explode(",", $ip_file);
$data = file("$id.dat");

// если это не просто просмотр результатов
if ($vote) {

foreach($ip_abbr as $value)
if ($ip == $value) {echo "<p><b><font color=red> Вы уже голосовали! </font></b></p>";
exit;
}
// выводим благодарность
echo "<p><b><font color=green> Спасибо! </font></b><br /><i>*Показаны результаты до Вашего голосования:</i><p>";
}
// выводим заголовок голосования - 1я строка файла
echo "<table border=0 style='text-align:left' ><th colspan=3 style='text-align:center'><b>$data[0]</b></th>";
// печатаем список ответов и результатов - остальные строки
for ($i=1;$i<count($data);$i++) {
  $votes = explode("~", $data[$i]); // значение~ответ
  $graf = 100*$votes[0]/(count($ip_abbr)-1);
  echo "<tr><td>$votes[1]</td><td style='text-align: center'><b>$votes[0]</b></td><td> <span style='font-size: small'>".round($graf, 3)."%</span><div style='background: red; height:5px; width:".round($graf, 0)."px'></div></td></tr>";
}
echo "<tr><td>Всего<b></b></td><td>".(count($ip_abbr)-1)."</td><td>&nbsp;</td></tr></table>";
// если это не просмотр результатов, а голосование,
// производим необходимые действия для учета голоса
if ($vote) {
  $f = fopen("$id.dat","w");
  flock($f,LOCK_EX);
  fputs($f, "$data[0]");
  for ($i=1;$i<count($data);$i++) {
    $votes = explode("~", $data[$i]);
    if ($i==$vote) $votes[0]++;
    fputs($f,"$votes[0]~$votes[1]");
	fflush($f);
flock($f,LOCK_UN);
  }
  fclose($f);
  
  $ip_adr = fopen("ip$id.dat","a++");
	flock($ip_adr,LOCK_EX);
 fputs($ip_adr, "$ip".",");
 fflush($ip_adr);
	flock($ip_adr,LOCK_UN);
fclose($ip_adr);
  }

  } else {
     echo "Такого голосования не существует.";
	exit;
}
?>

  • Вариант с вычислением процента и общей гистограммой (вертикальные элементы):
Горизонтальная гистограмма

Файл vote.php

<style>
   .graf {
    background: #ECF5E4;
    width: 18px; height: 18px;
    text-align: center;
    font: 13px Times, serif;
    border: 2px solid #95CD8B;
    border-right: 2px solid #D0E6BB;
     border-radius: 100px;
   }
  </style>
<?php
// получаем файлы по определенному голосованию
$id =  (int) $_GET[id];
$vote = (int) $_GET[vote];
 
if (file_exists("$id.dat")) {
 
$ip= $_SERVER['REMOTE_ADDR'];
$ip_file = file_get_contents("ip$id.dat");
$ip_abbr = explode(",", $ip_file);
$data = file("$id.dat");
 
// если это не просто просмотр результатов
if ($vote) {
 
foreach($ip_abbr as $value)
if ($ip == $value) {echo "<p><b><font color=red> Вы уже голосовали! </font></b></p>";
exit;
}
// выводим благодарность
echo "<p><b><font color=green> Спасибо! </font></b><br /><i>*Показаны результаты до Вашего голосования:</i><p>";
}
// выводим заголовок голосования - 1я строка файла
echo "<table border=0 style='text-align:left' ><th colspan=3 style='text-align:center'><b>$data[0]</b></th>";
// печатаем список ответов и результатов - остальные строки
for ($i=1;$i<count($data);$i++) {
  $votes = explode("~", $data[$i]); // значение~ответ
  $graf = 100*$votes[0]/(count($ip_abbr)-1);
  echo "<tr><td>$votes[1]</td><td style='text-align: center'><b>$votes[0]</b></td><td> <span style='font-size: small'>".round($graf, 2)."%</span><div style='background: red; height:5px; width:".round($graf, 0)."px'></div></td></tr>";
  $gist_all[] = round($graf, 0);
}
echo "<tr><td>Всего<b></b></td><td>".(count($ip_abbr)-1)."</td><td>&nbsp;</td></tr></table>";
for ($i=0;$i<count($gist_all);$i++)
{
	echo "<div style='background: lightgrey; height:100px; width:30px; float:left; border-left:1px solid white; color: black; text-align:center; font-size:small; position:relative'><div class='graf' style='margin:0 auto; margin-top:3px'>".$gist_all[$i]."</div><div style='height:".$gist_all[$i]."px; width:100%;background:red; position:absolute;bottom:0'><span style='color: #FFF'>&#8593;</span></div></div>";
}
// если это не просмотр результатов, а голосование,
// производим необходимые действия для учета голоса
if ($vote) {
  $f = fopen("$id.dat","w");
  flock($f,LOCK_EX);
  fputs($f, "$data[0]");
  for ($i=1;$i<count($data);$i++) {
    $votes = explode("~", $data[$i]);
    if ($i==$vote) $votes[0]++;
    fputs($f,"$votes[0]~$votes[1]");
	fflush($f);
flock($f,LOCK_UN);
  }
  fclose($f);
   
  $ip_adr = fopen("ip$id.dat","a++");
	flock($ip_adr,LOCK_EX);
 fputs($ip_adr, "$ip".",");
 fflush($ip_adr);
	flock($ip_adr,LOCK_UN);
fclose($ip_adr);
  }
 
  } else {
     echo "Такого голосования не существует.";
	exit;
}
?>

  • Вариант с вычислением процента и общей круговой диаграммой 2d:
2d диаграмма для голосования-опроса

Файл vote.php

<?php
// получаем файлы по определенному голосованию
$id =  (int) $_GET[id];
$vote = (int) $_GET[vote];

if (file_exists("$id.dat")) {

$ip= $_SERVER['REMOTE_ADDR'];
$ip_file = file_get_contents("ip$id.dat");
$ip_abbr = explode(",", $ip_file);
$data = file("$id.dat");

// если это не просто просмотр результатов
if ($vote) {

foreach($ip_abbr as $value)
if ($ip == $value) {echo "<p><b><font color=red> Вы уже голосовали! </font></b></p>";
exit;
}
// выводим благодарность
echo "<p><b><font color=green> Спасибо! </font></b><br /><i>*Показаны результаты до Вашего голосования:</i><p>";
}
// выводим заголовок голосования - 1я строка файла
for ($i=1;$i<count($data);$i++) {
  $votes = explode("~", $data[$i]); // значение~ответ
  $graf = 100*$votes[0]/(count($ip_abbr)-1);
  $gist_all[] = round($graf, 3);
  $names[] = trim($votes[1]);
  $res_vote[] = $votes[0];
}
// если это не просмотр результатов, а голосование,
// производим необходимые действия для учета голоса
if ($vote) {
  $f = fopen("$id.dat","w");
  flock($f,LOCK_EX);
  fputs($f, "$data[0]");
  for ($i=1;$i<count($data);$i++) {
    $votes = explode("~", $data[$i]);
    if ($i==$vote) $votes[0]++;
    fputs($f,"$votes[0]~$votes[1]");
	fflush($f);
flock($f,LOCK_UN);
  }
  fclose($f);
  
  $ip_adr = fopen("ip$id.dat","a++");
	flock($ip_adr,LOCK_EX);
 fputs($ip_adr, "$ip".",");
 fflush($ip_adr);
	flock($ip_adr,LOCK_UN);
fclose($ip_adr);
  }

	} else {
     echo "Такого голосования не существует.";
	exit;
}
?>
<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load("current", {packages:["corechart"]});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
 var data = google.visualization.arrayToDataTable([
          ['Название', 'Цифры'],
 <?php 
 for ($i=0;$i<count($names);$i++) { echo '["'.$names[$i].'\n'.$res_vote[$i].' = '.$gist_all[$i].'%", '.$gist_all[$i].'],';
 }
 ?> ]);        
        var options = {
          title: 'Всего: ' + <?=(count($ip_abbr)-1);?>,
          is3D: false,
 chartArea:{left:10,top:20,width:'80%',height:'70%'},
 width: 400 };
        var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div style="width: 350px; text-align: center"><?=$data[0]; ?></div>
    <div id="piechart_3d" style="width: 350px; height: 250px; margin-top:-8px;margin-left:-9px"></div>
  </body>
</html>

  • Вариант с вычислением процента и общей круговой диаграммой 3d:
3d диаграмма для голосования-опроса

Файл vote.php

<?php
// получаем файлы по определенному голосованию
$id =  (int) $_GET[id];
$vote = (int) $_GET[vote];

if (file_exists("$id.dat")) {

$ip= $_SERVER['REMOTE_ADDR'];
$ip_file = file_get_contents("ip$id.dat");
$ip_abbr = explode(",", $ip_file);
$data = file("$id.dat");

// если это не просто просмотр результатов
if ($vote) {

foreach($ip_abbr as $value)
if ($ip == $value) {echo "<p><b><font color=red> Вы уже голосовали! </font></b></p>";
exit;
}
// выводим благодарность
echo "<p><b><font color=green> Спасибо! </font></b><br /><i>*Показаны результаты до Вашего голосования:</i><p>";
}
// выводим заголовок голосования - 1я строка файла
for ($i=1;$i<count($data);$i++) {
  $votes = explode("~", $data[$i]); // значение~ответ
  $graf = 100*$votes[0]/(count($ip_abbr)-1);
  $gist_all[] = round($graf, 3);
  $names[] = trim($votes[1]);
  $res_vote[] = $votes[0];
}
// если это не просмотр результатов, а голосование,
// производим необходимые действия для учета голоса
if ($vote) {
  $f = fopen("$id.dat","w");
  flock($f,LOCK_EX);
  fputs($f, "$data[0]");
  for ($i=1;$i<count($data);$i++) {
    $votes = explode("~", $data[$i]);
    if ($i==$vote) $votes[0]++;
    fputs($f,"$votes[0]~$votes[1]");
	fflush($f);
flock($f,LOCK_UN);
  }
  fclose($f);
  
  $ip_adr = fopen("ip$id.dat","a++");
	flock($ip_adr,LOCK_EX);
 fputs($ip_adr, "$ip".",");
 fflush($ip_adr);
	flock($ip_adr,LOCK_UN);
fclose($ip_adr);
  }

	} else {
     echo "Такого голосования не существует.";
	exit;
}
?>
<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load("current", {packages:["corechart"]});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
 var data = google.visualization.arrayToDataTable([
          ['Название', 'Цифры'],
 <?php 
 for ($i=0;$i<count($names);$i++) { echo '["'.$names[$i].'\n'.$res_vote[$i].' = '.$gist_all[$i].'%", '.$gist_all[$i].'],';
 }
 ?> ]);        
        var options = {
          title: 'Всего: ' + <?=(count($ip_abbr)-1);?>,
          is3D: true,
 chartArea:{left:10,top:20,width:'80%',height:'70%'},
 width: 400 };
        var chart = new google.visualization.PieChart(document.getElementById('piechart_3d'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div style="width: 350px; text-align: center"><?=$data[0]; ?></div>
    <div id="piechart_3d" style="width: 350px; height: 250px; margin-top:-8px;margin-left:-9px"></div>
  </body>
</html>

  • Вариант с отображением результатов в том же окне, предложенный Александром (http://планета8.рф):

Файлы:
1.php
ip1.php
vote.php
voting.php

=== vote.php ===
<?php
// получаем файлы по определенному голосованию
$id =  (int) $_GET[id]; //приводим к целому числу идентификатор голосования
$vote = (int) $_GET[vote]; //приводим к целому числу передаваемое
значение голосования
//проверяем, существует ли такое голосование
if (file_exists("$id.php")) {
$ip= $_SERVER['REMOTE_ADDR']; //получаем ip адрес
$ip_file = file_get_contents("ip$id.php");//читаем содержимое файла ip
адресов и помещаем в строку
$ip_abbr = explode(",", $ip_file);//получаем в массив имеющиеся ip адреса
$data = file("$id.php"); //читаем содержимое файла результатов и
помещаем в массив
// если это не просто просмотр результатов
if ($vote) {
//сравниваем ip с уже записанными
foreach($ip_abbr as $value)
if ($ip == $value) {echo "<p><strong><font color=red> Вы уже голосовали!
</font></strong></p>";
exit;
}
// выводим благодарность
echo "<p><strong><font color=green> Спасибо! </font></strong><br
/><i>*Показаны результаты до Вашего голосования:</i><p>";
}
// выводим заголовок голосования - 1я строка файла
echo "<strong>$data[0]</strong><p>";
// печатаем список ответов и результатов - остальные строки
for ($i=1;$i<count($data);$i++) {
   $votes = explode("~", $data[$i]); // значение~ответ
   echo "$votes[0]: <strong>$votes[1]</strong><br>"; //поменяйте местами
0 и 1 в $votes и в результатах цифры будут первыми
}
echo "<br>Всего проголосовало: <strong>".(count($ip_abbr)-1)."</strong>";
// если это не просмотр результатов, а голосование,
// производим необходимые действия для учета голоса
if ($vote) {
   $f = fopen("$id.php","w");
   flock($f,LOCK_EX);
   fputs($f, "$data[0]");
   for ($i=1;$i<count($data);$i++) {
     $votes = explode("~", $data[$i]);
     if ($i==$vote) $votes[0]++;
     fputs($f,"$votes[0]~$votes[1]");
     fflush($f);
flock($f,LOCK_UN);
   }
   fclose($f);
//и записываем ip
   $ip_adr = fopen("ip$id.php","a++");
     flock($ip_adr,LOCK_EX);
  fputs($ip_adr, "$ip".",");
  fflush($ip_adr);
     flock($ip_adr,LOCK_UN);
fclose($ip_adr);
   }
   } else {
//передан id несуществующего голосования
      echo "Такого голосования не существует.";
     exit;
}
?>
=============

=== voting.php ===
<form action="vote.php" method="get">
                 <!-- указываем в value цифру нужного нам голосования,
для которого уже создали файлы //-->
                 <input type="Hidden" name="id" value="1">
                 <p><strong>Какую книгу Вы хотели бы услышать:</strong></p>
                 <input type="radio" name="vote" value="2">Живое и
Мёртвое (Ученик мага)<br>
                 <input type="radio" name="vote" value="3">Живое и
Мёртвое (Третья сила).<br>
                 <input type="radio" name="vote" value="4">Ещё книг
(прослушал все, хотел бы еще)<br>
                 <button type="Submit">Голосовать</button>
             </form>
<!-- указываем в href после vote.php?id= цифру нужного нам голосования,
для которого уже создали файлы //-->
<p><a href='vote.php?id=1'><button>Результаты</button></a></p>
==============

На самом деле всё просто.
- переименовал *.dat в *.php и изменил соответствующие строки.
- убрал открытие в новом окне. В коде строки target="_blank"

  • Доработка варианта №2 во всплывающем окне, с показом текущих цифр голосования, предложенная Павлом:

Файл vote.php

<?php
// получаем файлы по определенному голосованию
$id =  (int) $_GET['id'];
if (!empty($_GET['vote'])){
	$vote = (int) $_GET['vote'];
	if (file_exists("$id.dat")) {
 $ip= $_SERVER['SERVER_ADDR'];
 $ip_file = file_get_contents("ip$id.dat");
 $ip_abbr = explode(",", $ip_file);
 $data = file("$id.dat");
 // если это не просто просмотр результатов
 if ($vote) {
 foreach($ip_abbr as $value)
 if ($ip == $value) {echo "<p><b><font color=red> Вы уже голосовали! </font></b></p>";
 exit;
 }
 // выводим благодарность
 echo "<p><b><font color=green> Спасибо! </font></b><br /><i>*Показаны результаты с Вашим голосованием:</i><p>";
 }
 // если это не просмотр результатов, а голосование,
 // производим необходимые действия для учета голоса
 if ($vote) {
 $f = fopen("$id.dat","w");
 flock($f,LOCK_EX);
 fputs($f, "$data[0]");
 for ($i=1;$i<count($data);$i++) {
 $votes = explode("~", $data[$i]);
 if ($i==$vote) $votes[0]++;
 fputs($f,"$votes[0]~$votes[1]");
 fflush($f);
 flock($f,LOCK_UN);
 }
 fclose($f);
 $ip_adr = fopen("ip$id.dat","a++");
 flock($ip_adr,LOCK_EX);
 fputs($ip_adr, "$ip".",");
 fflush($ip_adr);
 flock($ip_adr,LOCK_UN);
 fclose($ip_adr);
 }
 $data = file("$id.dat");
 // выводим заголовок голосования - 1я строка файла
 echo "<b>$data[0]</b><p>";
 // печатаем список ответов и результатов - остальные строки
 for ($i=1;$i<count($data);$i++) {
 $votes = explode("~", $data[$i]); // значение~ответ
 echo "$votes[1]: <b>$votes[0]</b><br>";
 }
 $ip_file = file_get_contents("ip$id.dat");
 $ip_abbr = explode(",", $ip_file);
 echo "<br>Всего проголосовало: <b>".(count($ip_abbr)-1)."</b>";
	} else {
 echo "Такого голосования не существует.";
 exit;
	}
} else {
	if (file_exists("$id.dat")) {
 $ip= $_SERVER['REMOTE_ADDR'];
 $ip_file = file_get_contents("ip$id.dat");
 $ip_abbr = explode(",", $ip_file);
 $data = file("$id.dat");
 // если это не просто просмотр результатов
 // выводим благодарность
 echo "<p><b><font color=green> Спасибо! </font></b><br /><i>*Показаны результаты голосования:</i><p>";
	}
 // выводим заголовок голосования - 1я строка файла
 echo "<b>$data[0]</b><p>";
 // печатаем список ответов и результатов - остальные строки
 for ($i=1;$i<count($data);$i++) {
 $votes = explode("~", $data[$i]); // значение~ответ
 echo "$votes[1]: <b>$votes[0]</b><br>";
 }
 echo "<br>Всего проголосовало: <b>".(count($ip_abbr)-1)."</b>";
}
?>

Бесплатные курсы

Категории

Теги: , , , ,

Оцените материал:

Рейтинг: 7.8/10 (61)


КомментарииКомментарии:

    Далер

     

    можно ли создавать несколько опросов на одном странице подскажите как сделать

    coder hol es

     

    В статье все описано – каждому опросу соответствуют свои три файла (уникальных), со своим id, который и должен быть уникален в каждой форме опроса. Для разграничения отправки с разных форм, нужно присвоить name с уникальным названием кнопкам submit каждой формы и, при необходимости, уникальный name каждой форме.

    григорий

     

    Огромное человеческое спасибо! Дай бог здоровья

    coder hol es

     

    )Пожалуйста, благодарствую за доброе пожелание, взаимно)

    Николай

     

    Здравствуйте! А как с помощью данного скрипта сделать на одной страници несколько голосований: допустим есть 7 вопросов и по 5 вариантов ответа? И можно убрать защиту по ip чтоб можно было бесконечно голосовать?


 

Старые →← Новые