Голосование Без Перезагрузки Страницы

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

Ответить
Nick888
Сообщения: 9
Зарегистрирован: 11 ноя 2014, 18:31

23 дек 2014, 22:43

Имеется скрипт для голосования на PHP (+ БД MySQL), посмотреть результаты можно без перезагрузки страницы.

Есть 2 таблицы: polls (с вопросами) и poll_answer (с ответами).
Скрипт для создания этих самых таблиц:

CREATE TABLE IF NOT EXISTS `polls` (
`id` int(10) unsigned NOT NULL auto_increment, `title` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

CREATE TABLE IF NOT EXISTS `poll_answer` (
`id` int(10) unsigned NOT NULL auto_increment, `poll_id` int(10) unsigned NOT NULL,
`title` varchar(255) NOT NULL, `votes` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

Далее создаём 2 файла. Первый отвечает за отображение опросов. Его скрипт приведён ниже.

Код: Выделить всё

<script type="text/javascript" 
src="//ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>  
<?php  
$db=mysqli_connect("localhost","root","","vote");  
$res=mysqli_query($db,"set names utf8");   
$res=mysqli_fetch_array(mysqli_query($db,"SELECT max(id) FROM polls LIMIT 1"));   
$poll_id=$res[0];  
$max_id=$res[0];  
if (isset($_GET["poll_id"]) and is_numeric($_GET["poll_id"]) and $_GET["poll_id"]>0){  
$res=mysqli_fetch_array(mysqli_query($db,"SELECT id FROM polls  
WHERE id='".$_GET["poll_id"]."' LIMIT 1"));  
if ($res[0]!='') $poll_id=$res[0];  
}  
$poll=mysqli_fetch_array(mysqli_query($db,"SELECT id,title FROM polls  
WHERE id='".$poll_id."'"));  
?>  
<style type="text/css">  
.polls{padding:10px; text-align:center; border:1px solid #EEEEEE; width:1050px;}  
.poll{text-align:left; display:table; width:100%; font-size:14px;}  
.poll label{line-height:2;}  
.votes{text-align:center; background-color:#00FF00; border:1px solid #0033FF;   
margin:0 0 10px 0;}  
</style>  
<?php  
echo '<div class="polls"><b>'.$poll["title"].'?</b>';  
echo '<div class="poll" id="poll_'.$poll_id.'">';  
$res=mysqli_query($db,"SELECT id,title FROM poll_answer  
WHERE poll_id='".$poll_id."' ORDER BY id");  
while ($answer=mysqli_fetch_array($res)) echo '<label><input type="radio"  
name="item" value="'.$answer["id"].'">'.$answer["title"].'</label>
';  
echo '<div align="center"><input type="submit" id="view_res"  
value="Посмотреть результат">';  
echo '<input type="submit" id="vote" value="Голосовать">';  
echo '</div></div></div>
';  
?>  
<script type="text/javascript">  
$(document).ready(function(){  
$(".poll input:first").prop("checked",true);  
$("#vote").click(function(){  
jQuery.post("polls_result.php",{poll_id:$(this).parents(".poll").attr("id").  
split('_')[1], answer_id:$('input:checked').val()},rating_poll);});  
$("#view_res").click(function(){  
jQuery.post("polls_result.php",{poll_id:$(this).parents(".poll").attr("id").  
split('_')[1]},rating_poll);});  
function rating_poll(data){  
$(".poll").fadeOut(500, function(){$(this).append(data).fadeIn(500);});  
}  
});  
</script>
Второй файл и его код ниже.

Код: Выделить всё

<?php  
if (isset($_POST["poll_id"]) and is_numeric($_POST["poll_id"])) {  
$poll_id=$_POST["poll_id"];  
}  
else $poll_id='';  
if (isset($_POST["answer_id"]) and is_numeric($_POST["answer_id"])) {  
$answer_id=$_POST["answer_id"];  
}  
else $answer_id='';  
if ($poll_id>0) {  
$db=mysqli_connect("localhost","root","","vote");   
$res=mysqli_query($db,"set names utf8");  
if ($answer_id!='') {  
$res=mysqli_query($db,"UPDATE poll_answer SET votes=(votes+1)  
WHERE id='".$answer_id."' LIMIT 1");  
$answer='Ваш голос учтён!';  
}  
$summa=mysqli_fetch_array(mysqli_query($db,"SELECT max(votes) AS max_v, sum(votes)  
AS sum_v FROM poll_answer WHERE poll_id='".$poll_id."' LIMIT 1"));  
if ($summa["max_v"]==0) $summa["max_v"]=$summa["sum_v"]=1;  
$res=mysqli_query($db,"SELECT title,votes FROM poll_answer   
WHERE poll_id='".$poll_id."' ORDER BY votes DESC");  
while ($rating=mysqli_fetch_array($res)) {  
echo '<div style="width:560px; float:left;">'.$rating["title"]; //устанавливаем ширину линии 560px  
echo '<div class="votes" style="width:'.($rating["votes"]/$summa["max_v"]*560); // соотношение с другими линиями (ширина)  
echo 'px;">'.$rating["votes"].'</div></div><div style="float:right;">
';  
echo round(100*$rating["votes"]/$summa["sum_v"],2).' %</div>'; //процентное соотношение ответов   
}  
echo '<div style="width:100%;float:left;">Голосов: <b>'.$summa["sum_v"].'</b>';  
}  
?>
Как сделать так, чтобы при нажатии на кнопки "Посмотреть результат" или на "Голосовать" результаты ответов выводились С ПЕРЕЗАГРУЗКОЙ СТРАНИЦЫ, а не без неё, как в этом скрипте?
Ответить