Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Несколько голосований на странице
 
 автор: marsera   (02.04.2009 в 14:36)   письмо автору
 
 

Помогите, пожалуйста, реализовать нескольких голосований на одной странице. Голосования лежат в базе в двух таблицах(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:37)   письмо автору
 
   для: 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);
?>

  Ответить  
 
 автор: sim5   (02.04.2009 в 17:15)   письмо автору
 
   для: marsera   (02.04.2009 в 14:37)
 

Первое - чтобы код читался легко, делайте отступы внутри условий, функций.... Хотя это может быть из-за отсутсвия обрамления тегами кода - выставляя код здесь, обрамляйте его ВВ-тегами [сode][/сode]. И второе - почему у вас функция result() вне тегов РНР?
Вообще же, вам нужно подобие постраничной навигации. А у вас скорее всего путаница с этим.

  Ответить  
 
 автор: marsera   (03.04.2009 в 09:36)   письмо автору
 
   для: sim5   (02.04.2009 в 17:15)
 

функция у меня лежит в другом файле, и я его запрашиваю как require

  Ответить  
 
 автор: sim5   (03.04.2009 в 10:01)   письмо автору
 
   для: marsera   (03.04.2009 в 09:36)
 

Вопросы:
Сколько одновременно вопрос выдается на страницу?
Если происходит выбор ответа на один вопрос, то выдаются вновь четыре предыдущих, на которые не выбраны варианты?
Следующие вопросы будут выданы пока не будет отвечено на все предыдущие вопросы?

Я не понимаю, что и как у вас работает, и как доложно быть.

  Ответить  
 
 автор: marsera   (03.04.2009 в 10:42)   письмо автору
 
   для: sim5   (03.04.2009 в 10:01)
 

вопрос снят.
Ошибка была в том, что я в цикле заменяла основную переменную на значение из базы и дальнейший вывод был неправильным.Нужно было просто вернуть переменной начальное значение для дальнейшего перебора. Ват так туплю :)))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования