Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> setcookie, множественное голосование 
:(
    Опции темы
PARROT
Дата 29.3.2006, 18:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2339
Регистрация: 5.1.2005
Где: Спб-ЦарьГрад

Репутация: 23
Всего: 50



Продолжаю писать форум.
Наткнулась на проблему в голосовании: если человек проголосовал в одной теме для голосования, ставим ему куки.
Теперь почему-то во всех остальных темах с другим голосованием, голосовать уже не может.
Понимаю, что нужно ставить в куки идентификатор голосования, но не доходит как его поставить.
Код

        if(empty($_POST['golos'])=="голосовать" && empty($_POST['prosmotr'])=="просмотреть результаты" && !$_COOKIE['opros'] && !$_COOKIE['ros']){
                  $viv=mysql_query("SELECT id_opr,id_otv,otvet FROM opros WHERE id_opr=$idp");
                  while($ot=mysql_fetch_row($viv)){
?>
                  <form method=post>
                  <table width=300 cellpadding=0 cellspacing=0>
                  <tr>
<?
                  echo "<td width=20><input type=radio name=rad[$ot[0]] value=".$ot[1]."></td><td>".$ot[2]."</td>";
                  }//вывели голосование
?>
</tr>
</table>
</td>
</tr>
<tr>
<td align=center bgcolor=#F2F2F2 colspan=3>
<table>
<tr>
<td><input type=submit name=golos value="голосовать"></td>
<td><input type=submit name=prosmotr value="просмотреть результаты"></td>
</tr>
</table>
</form>
<?
}else{                          //считаем голоса
// если нажата кнопка то увеличиваем счетчик голосования и ставим куку на час
                           if(isset($_POST['golos'])=="голосовать" && !$_COOKIE['opros']) {
                           setcookie ("opros","rad",time()+3600, "/");
                           while (list($idx,$val)=each($_POST['rad'])) {
                           mysql_query("UPDATE opros SET numb=numb+1   WHERE  id_otv='".$val."'") or die(mysql_error());
                           }
                           }//конец обновления голосования
                            setcookie ("ros","win",time()+3600, "/");
                            //запрос общего количества голосов
                            $query="select * from opros WHERE id_opr='$idp'";
                            $result=mysql_query($query);
                            $num_vot=mysql_num_rows($result);
                            //подсчет общего количества голосов
                            $total_votes=0;
                            while($row=mysql_fetch_object($result)) {
                            $total_votes+=$row->numb;
                                  }
                            $prosmotr=mysql_query("SELECT id_opr,otvet,numb FROM opros WHERE id_opr=$idp");
                            while($vivod=mysql_fetch_row($prosmotr)){
?>
<table width=100% cellspacing=0 align=center>
<tr>
<td width=45% align=right><?=$vivod[1];?></td><td width=10% align=center>[ <b><?=$vivod[2];?></b> ]</td>
<td width=45%>
<img src=image.php?vivod[2]=<? echo $vivod[2]; ?>&total_votes=<? echo $total_votes; ?> width=200 height=15>
</td>
</tr>
<?
                               }//конец вывода просмотра
?>
<tr>
<td colspan=3 align=center>всего голосов: <?=$total_votes;?></td>
</tr>
</table>
<?
}
?>
</td>
</tr>

Посоветуйте как правильно поступить.


--------------------
Безумный утешается прошедшим, слабоумный - будущим, умный - настоящим!
PM MAIL   Вверх
Ciber SLasH
Дата 29.3.2006, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1813
Регистрация: 9.11.2004
Где: С.-Петербург

Репутация: 3
Всего: 67



А зачем такое сравнение: empty($_POST['golos'])=="голосовать"
ведь функция empty() возвращает либо true либо false и сравнивать надо на булево значение, т.е. достаточно if (empty($_POST['golos']) ...)

На счёт кук: я бы поставил id-голосования и в качестве голоса, просто либо 0 либо 1. Можно для запоминания ещё и записать куда-нить в БД или файл.
PM   Вверх
CyClon
Дата 29.3.2006, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 838
Регистрация: 3.12.2005

Репутация: 3
Всего: 4



Блокировать юзеров надо по HTTP_X_FORWARDED_FOR, и если он не известен (Юзается прокси), то ен допускать к голосованию. Защита более чем на 90% от накрутки.


--------------------
user posted image
PM   Вверх
wil
Дата 29.3.2006, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 125
Регистрация: 28.3.2006

Репутация: 1
Всего: 4



записывай в базу id топика, в котором юзверь проголосовал. если анонимное голосование - в куку пихай эту id.
--------------------
 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0493 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.