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

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

Курсы

Голосование-опрос на 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 | Загрузок: 2263

*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.9/10 (62)


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

    Татьяна

     

    Спасибо большое за ответ! Ну если ничего не выйдет, обращусь к Вам)

    coder hol es

     

    )Пожалуйста

    Цифровой

     

    Не так уж это и просто, как я думал. Наивный )))

    coder hol es

     

    ) Ну, это Вы придираетесь))

    Николай

     

    Почему-то я могу два раза голосовать. И только на третий раз пишет что – Вы уже голосовали! )


 

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