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

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

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

24 дек 2014, 22:52

Имеется скрипт для голосования на 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>';  
}  
?>
Как сделать так, чтобы при нажатии на кнопки "Посмотреть результат" или на "Голосовать" результаты ответов выводились С ПЕРЕЗАГРУЗКОЙ СТРАНИЦЫ, а не без неё, как в этом скрипте?
Bce_OK
Сообщения: 8
Зарегистрирован: 18 ноя 2014, 20:25

07 янв 2015, 22:28

Nick888 писал(а):Имеется скрипт для голосования на PHP...

Как сделать так, чтобы при нажатии на кнопки "Посмотреть результат" или на "Голосовать" результаты ответов выводились С ПЕРЕЗАГРУЗКОЙ СТРАНИЦЫ, а не без неё, как в этом скрипте?
поставь "return true;", после post запроса, по клику на "посмотреть результат", это должно быть в javascript теге в первом файле у тебя он записан как-то так

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

$("#view_res").click(function(){ jQuery.post("polls_result.php", { poll_id:$(this).parents(".poll").attr("id").split('_')[1]},rating_poll); } ); }
 
после него нужно "return true" поставить
Bce_OK
Сообщения: 8
Зарегистрирован: 18 ноя 2014, 20:25

07 янв 2015, 22:29

и так же, соответственно, с кнопкой "голосовать"
ЗЫ: Только к sql это слабо относится
GeorgeSoca
Сообщения: 0
Зарегистрирован: 12 окт 2015, 04:09
Откуда: Guam
Контактная информация:

15 окт 2015, 05:43

Pa vart webbhotell kan ni kanna er trygg! Forutom att vi anvander oss av speglade harddiskar pa alla vara servrar sa tar vi aven backup tva ganger per dygn pa separata servrar. Vi anvander oss av ISPmanager som kontrollpanel. ISPmanager ar en kontrollpanel som gor det enkelt att administrera sin hemsida. Hos oss kan ni lagga hur manga hemsidor och domaner ni onskar under ett webbhotellskonto.
virtual hosting
Ответить