|
|
|
| Помогите, пожалуйста, реализовать нескольких голосований на одной странице. Голосования лежат в базе в двух таблицах(1-я таблица содержит id опроса и вопрос голосования, 2-я варианты ответов с привязкой к id опроса). При первом заходе на страницу формируются формы опросов,т.к. ПОСТ переменные формы еще не передавались. Когда человек голосует, страница перезагружается, и ему отдаются результаты голосования по этому вопросу, а остальные опять выводятся формой. Если чел голосует на другом голосовании, ему отдаются рез-ты по этому вопросу, а остальные опять должны вывестись формой.
у меня почему-то для первого опроса все проходит нормально, а для последующих всегда выводится форма.
Вот скрипты:
zapis.php (записывает рез-ты голосования в базу)
<?
extract($HTTP_POST_VARS);
extract($HTTP_GET_VARS);
include("config.inc.php");
//Необходимо подключиться к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Не могу подключиться" );
// сделать $DB текущей базой данных
mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
function zap($vote,$category)
{
$sql="SELECT * FROM `spectr_opros` WHERE `id`=$vote AND `category`='$category'";
$damp=mysql_query($sql) or die (mysql_error());
$row = mysql_fetch_assoc($damp);
$tot=$row['total'];
$tot=$tot+1;
mysql_query("UPDATE spectr_opros SET total='".$tot."' WHERE id='".$row['id']."'");
$sql="SELECT * FROM spectr_opros_category WHERE category='$category' LIMIT 0,1" or die (mysql_error());
$cat=mysql_query($sql) or die (mysql_error());
$catr = mysql_fetch_assoc($cat);
$tc=$catr['total'];
$tc=$tc+1;
mysql_query("UPDATE spectr_opros_category SET total='".$tc."' WHERE category='".$catr['category']."'") or die (mysql_error());
return ($category);
exit();
}
if (isset($_POST['category'])){$category1=$_POST['category'];}
else {$category1='';}
if (isset($_POST['vote'])){$vote1=$_POST['vote'];}
else {$vote1=0;}
zap($vote1,$category1);
?>
vivod_opros.php
<?
extract($HTTP_POST_VARS);
include("config.inc.php");
//Необходимо подключиться к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Не могу подключиться" );
// сделать $DB текущей базой данных
mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
require('res_opros.php');
function Vivod_opros($category)// Последние новости
{
include("config.inc.php");
//Необходимо подключиться к БД
$link = mysql_connect($DBSERVER, $DBUSER, $DBPASS)
or die("Не могу подключиться" );
// сделать $DB текущей базой данных
mysql_select_db($DB, $link) or die ('Не могу выбрать БД');
$sql="SELECT * FROM `spectr_opros_category` order by id desc";
$result=mysql_query($sql);
$i=0;
$golosov='';
while ($row = mysql_fetch_array($result))
{
if ($row['category']!=$category)
{
$category=$row['category'];
$cat_name=$row['cat_name'];
$sql="SELECT * FROM `spectr_opros` WHERE category='$category' order by id desc";
$res=mysql_query($sql);
$i=0;
$opros='';
while ($rw = mysql_fetch_array($res))
{
$id=$rw['id'];
$otvet=$rw['name'];
$opros=$opros.'<tr>
<td class="sectiontableentry2_s3" valign="top">
<input type="radio" name="vote" value="'.$id.'">
</td>
<td class="sectiontableentry2_s3" valign="middle">
<label>'.$otvet.'</label></td></tr>';
}
$golosov=$golosov.'<div class="news_tema" style="background:#C8E4FF";>'.$cat_name.'</b></div><form action="../opros/opros.php" method="post"><input type="hidden" name="category" value="'.$category.'"><table class="pollstableborder_s3" cellspacing="0" cellpadding="0" border="0">'.$opros.'</table><div align="center">
<input type="submit" id="'.$category.'" style="cursor: pointer" name="'.$category.'" value="Голосовать"><input type="submit" name="result" value="Результаты"></div></form></div>';
echo $golosov;
$golosov='';
}
else {print (result($category));}
}
}
?>
функция вывода результата
function result($category)
{
$sql="SELECT * FROM spectr_opros_category WHERE category='$category' LIMIT 0,1";
$dresult=mysql_query($sql) or die (mysql_error());
$drow = mysql_fetch_assoc($dresult);
$sum=$drow['total'];
$category=$_POST['category'];
$msql="SELECT * FROM spectr_opros WHERE category='$category'";
$dampr=mysql_query($msql) or die (mysql_error());
echo '<br>';
$i=0;
while ($rw = mysql_fetch_array($dampr))
{
$otvet=$rw['name'];
$tot=$rw['total'];
settype($tot,'int');
$echo[$otvet]=$tot;
}
# Расположить по убыванию
arsort($echo);
# 100% ширины "шкалы", в пикселях
$longall=200;
$vivod='<table cellpadding=5><tr><td colspan="4" align="left"><div class="news_tema" style="background:#C8E4FF";>'.$drow['cat_name'].'</b></div></td></tr>';
foreach($echo as $k=>$v)
{
$long=sprintf('%d',$v/$sum*$longall);
$percent=sprintf('%02.2f',$v/$sum*100);
$vivod=$vivod.'<tr><th align="right">'.$k.'</th><td><div style="height:5px;width:'.$long.'px;background-color:#800000"></div></td><td>'.$v.'</td><td>('.$percent.'%)</td></tr>';
}
$vivod=$vivod.'<tr><th align="right">Всего голосов</th><td><div style="height:5px;width:'.$longall.'px;background-color:#0080C0"></div></td><td>'.$sum.'</td><td>(100%)</td></tr></table><br>';
return $vivod;
}
файл вывода инклудится на основную страницу.
Помогите найти ошибку!!!
Заранее спасибо! | |
|
|
|
|
|
|
|
для: marsera
(02.04.2009 в 14:36)
| | Переменные проверяла, передаются нужные, для каждого опроса свои...
на основной странице такой код
<?
if (isset($_POST['category'])){$category1=$_POST['category'];}
else {$category1='';}
include ("opros_v.php");
include ('zap_opros.php');
Vivod_opros($category1);
?> | |
|
|
|
|
|
|
|
для: marsera
(02.04.2009 в 14:37)
| | Первое - чтобы код читался легко, делайте отступы внутри условий, функций.... Хотя это может быть из-за отсутсвия обрамления тегами кода - выставляя код здесь, обрамляйте его ВВ-тегами [сode][/сode]. И второе - почему у вас функция result() вне тегов РНР?
Вообще же, вам нужно подобие постраничной навигации. А у вас скорее всего путаница с этим. | |
|
|
|
|
|
|
|
для: sim5
(02.04.2009 в 17:15)
| | функция у меня лежит в другом файле, и я его запрашиваю как require | |
|
|
|
|
|
|
|
для: marsera
(03.04.2009 в 09:36)
| | Вопросы:
Сколько одновременно вопрос выдается на страницу?
Если происходит выбор ответа на один вопрос, то выдаются вновь четыре предыдущих, на которые не выбраны варианты?
Следующие вопросы будут выданы пока не будет отвечено на все предыдущие вопросы?
Я не понимаю, что и как у вас работает, и как доложно быть. | |
|
|
|
|
|
|
|
для: sim5
(03.04.2009 в 10:01)
| | вопрос снят.
Ошибка была в том, что я в цикле заменяла основную переменную на значение из базы и дальнейший вывод был неправильным.Нужно было просто вернуть переменной начальное значение для дальнейшего перебора. Ват так туплю :))) | |
|
|
|