Голосование-опрос на 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.dat
– файл с опросом и для сохранения результатов;ip1.dat
– пустой файл для сохранения проголосовавших ip адресов;golos1.php
– запускной файл для этого голосования с формой запроса;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
*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> </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> </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'>↑</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:
Файл 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:
Файл 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>";
}
?>
Комментарии:
Александр#
Здравствуйте. Спасибо за скрипт, не знал, что можно записывать результаты не в базу а в файл. Хочу попробовать такой вариант. А подскажите, пожалуйста, как сделать проверку по ip? У вас очень простой и хороший вариант, буду его пробовать, но мне нужна проверка по ip. Чтобы пользователь мог проголосовать только один раз, вообще. У меня есть такой вариант, но работает с базой и там куча js --- Подробнее --- Пользователь нажимает на кнопку. Его ip заносится в файл или в базу. Если он хочет проголосовать повторно или завтра или … не важно, то ему это запрещено, т.к. его ip уже зафиксирован и всё. Мне достаточно проверки по ip Или подскажите хороший вариант, где прочитать. Спасибо. С Уважением Александр. ----------------------
Александр#
Всё, разобрался, вопрос задал когда прочитал первую статью, которая была взята за основу. У Вас всё очень хорошо работает. Спасибо. А возможно сделать вывод результатов на текущей странице, без открытия новой?
coder hol es#
Здравствуйте, Александр, пожалуйста) и благодарен за добрые слова и посты). Вывод результатов на той же странице представлен, в виде включения iframe. Можно также использовать для вывода Ajax. Или варианты через php - например, записывать результат работы обработчика в сторонний файл, который и выводить в форме запроса (или отдельно), или напрямую дописывать при каждом голосовании в файл формы этого голосования. С уважением.
Александр#
Я немного изменил код и структуру.
Вместо *.dat я использовал *.php На основе первого варианта, результаты выводятся в том же окне без перезагрузки. Может это будет 4-й вариант (для Админа). Кому интересно, могу выложить код. Подскажите, можно прямо сдесь?
coder hol es#
Уважаемый Александр, спасибо Вам за вариант – вышлите, пожалуйста, на почту webmaster[собака]coderhs.com.