|
|
|
| Давайте все-таки разберемся с этой замуткой.
Я конечно понимаю, что здесь установлена простейшая защита, но, учитывая, что нет кнопки для просмотра результатов, даже когда просто хочется посмотреть итоги и нажимаешь на "голосовать", происходит накрутка счетчика.
Нужно либо усложнять защиту, либо установить кнопку с просмотром итогов. Но во втором случае возникает вопрос, что если я еще не голосовал, то по идее и не должен видеть итогов. А раз мне дается возможность проголосовать еще раз, значит я считаюсь не проголосовавшим. Так что в любом случае надо как-то переделывать защиту. | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(29.08.2004 в 03:03)
| | Ссылки на просмотр действительно нет :( Поправим.
>Нужно либо усложнять защиту, либо установить кнопку с просмотром итогов. Но во втором случае возникает вопрос, что если я еще не голосовал, то по идее и не должен видеть итогов.
Ну почему? Пусть посетитель сам решает - хочет голосует, не хочет - не голосует, а только смотрит. Поскольку все равно нельзя строго соблюсти условия "чистого" голосования, то видит посетитель результаты, не видит - большой разницы нет.
>А раз мне дается возможность проголосовать еще раз, значит я считаюсь не проголосовавшим.
Защита строится на основе проверки IP-адресов проголосовавших. Один IP-адрес не может проголосовать больше чем раз в определенный период времени (он указан в скрипте). Если это период истек, то считается, что IP-адрес не голосовал.
Это вот из каких соображений сделано:
1. Если кто-то очень сильно захочет накрутить результаты подобного голосования - он все равно это сделает. :(
2. Если мы поставим защиту на основе cookies, то мы либо откроем большую дыру для посетителей с отключенными куками, либо совсем запретим таким людям голосовать. И то и другое совсем не приемлимо. Потому была выбрана защита по IP.
3. Подавлющее большинство людей выходит в инет по либо диапапу, либо через прокси-сервера. Т.е. под одним IP может посещать сайт очень большое число людей. Т.е. просто запрещать IP-адрес для дальнейшего голосования - нельзя.
4. И все же большинство накруток - это чистое баловство. Когда просто нажимают на кнопку голосования несколько раз за пару секунд. И если это не сработало, то дальнейших действий по накрутке не предпринимают. А если действия по накрутке продолжаюся, то см. пункт 1.
Вот поэтому была сделана такая защита. С удовольствим выслушаем Ваши соображения. Может быть можно сделать и по другому. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(29.08.2004 в 03:55)
| | >Поскольку все равно нельзя строго соблюсти условия "чистого" голосования, то видит посетитель результаты, не видит - большой разницы нет.
Ну в этом ракурсе - да.
>Один IP-адрес не может проголосовать больше чем раз в определенный период времени (он указан в скрипте).
Видимо здесь
AND puttime>date_sub(now(), interval '2' minute)";
|
А какие еще параметры есть, кроме минут, например, часы или сутки?
>Если мы поставим защиту на основе cookies, то мы либо откроем большую дыру для посетителей с отключенными куками, либо совсем запретим таким людям голосовать.
А почему не совместить два варианта? Если cookies отключены, то проверяем по IP-адресу. | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(29.08.2004 в 08:33)
| | >А какие еще параметры есть, кроме минут, например, часы или сутки?
Ну все те что определяют время и дату. Секунды, минуты, часы, дни, месцы, год и их комбинации.
Внизу по ссылке - доки на функции MySql по работе со временем.
>А почему не совместить два варианта? Если cookies отключены, то проверяем по IP-адресу.
Вообще говоря, Да - это самый лучший вариант.
Ну чтож - когда снова возьмем этот скрипт на доработку - нужно будет добавить защиту по cookies. | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(29.08.2004 в 03:03)
| | В прошлой теме я давал скрипт, вот он
show_poll.php
<?php
include_once "poll/config.php";
// Отображаем результаты
$pol = mysql_query("SELECT * FROM poll WHERE archive=0 AND hide=0");
if ($pol)
{
$poll = mysql_fetch_array($pol);
echo $poll['name']."<br>";
// Просматриваем вопросы опроса
$query = "SELECT * FROM answer
WHERE id_poll=".$poll['id_poll']."
ORDER BY pos";
$total = "SELECT SUM(hit) FROM answer WHERE id_poll=".$poll['id_poll'];
$ans = mysql_query($query);
$tot = mysql_query($total);
if($ans && $tot)
{
$totl = mysql_fetch_array($tot);
$totalhits = $totl['SUM(hit)'];
if($totalhits == 0) $totalhits = 1;
echo "<table border=0>";
while($answer = mysql_fetch_array($ans))
{
echo "<tr>
<td>".$answer['name']."</td>
<td>".$answer['hit']."</td>
<td>".sprintf("%01.1f%s", $answer['hit']/$totalhits*100,'%')."</td>
</tr>";
}
echo "</table>";
echo "Общее число проголосовавших составляет: ".$totl['SUM(hit)']."<br>";
echo "<a href=archive.php>Архив голосований</a><br>";
} else puterror("Ошибка при обращении к блоку голосования");
} else puterror("Ошибка при обращении к блоку голосования");
?>
|
и вставляешь ссылку на этот файл.
<a href="poll/showpoll.php>Результаты</a> Или include этот файл | |
|
|
|
|
|
|
|
для: Artem S.
(29.08.2004 в 09:01)
| | В файле vote.php есть кусок с выводом итогов голосования. Но перед ним идет зачет самого голосования.
Разумнее, имхо, сделать проверку, с какой ссылки пришли на эту страницу (как не помню). И если со ссылки просмотра, то пропускать кусок с зачетом. Либо, что мне представляется лучшим, выделить кусок вывода итогов в отдельный файл, а в vote.php вставлять его при помощи include.
А чем простой include отличается от include_once ? | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(29.08.2004 в 09:24)
| | >Либо, что мне представляется лучшим, выделить кусок вывода итогов в отдельный файл, а в vote.php вставлять его при помощи include.
Можно и так.
>include отличается от include_once ?
Подключаемый файл подключается только один раз даже если вызовов include было несколько.
Например, Artem S. привел скрипт отображения итогов.
Его можно использовать отдельно, а можно подключать в vote.php. В vote.php уже есть include конфигурационного файла. И если мы в show_poll.php снова бы подключали конфигурационный файл с помощью include, то появилась бы ошибка. А include_once не подключает файл, если он уже был подключен. | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(29.08.2004 в 10:10)
| | Что-то у меня не получается к кнопке, которую я приделываю рядом с кнопкой "Голосовать", прицепить ссылку, чтобы открывался нужный мне файл. И найти пример нигде не могу. Это вообще возможно? | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(29.08.2004 в 12:37)
| | >не получается к кнопке, которую я приделываю рядом с кнопкой "Голосовать", прицепить ссылку
Так и не надо ставить еще одну кнопку - поставь просто ссылку.
<a href="show_vote.php">Посмотреть результаты</a>
|
На нашем сайте так и сделано. Посмотри в учебнике PHP, в голосовании, прямо под вопросом стоит ссылка - "результаты" | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(29.08.2004 в 13:43)
| | Забавная штука.
Поставил ссылку на файл show_vote.php
Файл vote.php оставил без изменений. Голсую, кол-во проголосовавших увеличивается на 1. Нажимаю на просмотр результатов, всё по-старому. Всё это происходит в IE. Открываю show_vote.php в Netscape, делаю reload, значение меняется. После этого обновляю в IE, обновилось.
Теперь ставлю в файл show_vote.php мета-теги, которые вы предлагали в теме по кэшированию. Снова голосую. Результат тот же. Но теперь после reload в Netscape, значение меняется, а вот после обновления в IE ничего не изменилось. Получилось два окошка с одним файлом, обновляю оба, в одном окне одно число, а в другом - другое!!! | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(30.08.2004 в 20:55)
| | >Получилось два окошка с одним файлом, обновляю оба, в одном окне одно число, а в другом - другое!!!
Мистика :)
Иногда происходят такие мистические вещи, которые нельзя объяснить. Наверное есть какое то разумное объяснение этому, но, видимо, оно пока недоступно для нашего понимания :))
PS: проверяете на хостинге или на локальном хосте? | |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(30.08.2004 в 21:55)
| | На хостинге. Видимо это как-то связано с кэшированием. После нескольких обновлений в IE все-таки получилось нужное число. | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(29.08.2004 в 03:03)
| | хмм зачем мутить?
проще сделать проверку по куксам,если голосовал то выводиться только результаты,если не голосовал то выводить форму!
так гораздо проще!
проверка по IP это да,но взять хотябы 6 пользователей работающие на 1 IP и что один проголосовал а все остальные просто будут сидеть и думать когдаж они голосовали!
Ваша система голосование довольно хорошая, но лучше переделать форму голосования и результаты через функцию!
тогда проверка по IP более актуальна,голосовал только результаты,не голосовал то форма,а то проголосова а форма все равно есть!не лепо!обыкновенный пользователи не будут понимать почему они нажимают и нажимают а форма все равно есть при новом посещении на страницу! | |
|
|
|
|
|
|
|
для: J.Lex
(29.08.2004 в 18:30)
| | >проверка по IP это да,но взять хотябы 6 пользователей
>работающие на 1 IP и что один проголосовал а все остальные
>просто будут сидеть и думать когдаж они голосовали!
Так как IP-адрес хранится лишь несколько минут, вероятность того, что 6 человек будут голосовать одновременно не велика
>Ваша система голосование довольно хорошая, но лучше
>переделать форму голосования и результаты через функцию!
>тогда проверка по IP более актуальна,голосовал только
>результаты,не голосовал то форма,а то проголосова а форма
>все равно есть!не лепо!обыкновенный пользователи не будут
>понимать почему они нажимают и нажимают а форма все равно
>есть при новом посещении на страницу!
Серьёзная система голосования требует обычно подтверждение по мылу (исключая бесплатные ящики), но вот только лень обычно посетителям такие сложности преодолевать, да и боязно, мали сколько за такое голосование потом спаму получишь. | |
|
|
|
|
|
|
|
для: cheops
(29.08.2004 в 19:56)
| | хорошо одбросим пример с куками, ip все равно заноситься в бд
и перед тем как показать форму или результаты проверка ip в бд если голосовал показать ТОЛЬко результаты,если нет форму!тогда и куксы не нужны!
да и зачем даже при очень серьезной системе голосования использовать мыло для потверждения это глупо,тогда лучше после системы регистрации и в входа на сайт через логин и пароль выводить голосование!
и еще в вашей админ страничке не учтено создания 2,3 или более голосований одновременно!предположим хочу я на каждую из сылок закинуть голосование но с вашей системой у меня это не получиться! | |
|
|
|
|
|
|
|
для: J.Lex
(29.08.2004 в 20:01)
| | >и еще в вашей админ страничке не учтено создания 2,3 или
>более голосований одновременно!предположим хочу я на каждую
>из сылок закинуть голосование но с вашей системой у меня это
>не получиться!
Да не учтено :))) и это хорошо, что Web-приложение побуждает к совершенствованию системы посетителем. Что ж хорошего будет в том, что человек его передерёт без творческой переработки? :))) Со временем, конечно, это Web-приложение не минуемо подвергнется переработки, будут и cookie и более надёжный механизм защиты, а пока пусть будет так :))) Всё таки должны время от времени люди восклицать: "Да что же это такое в самом деле?! Во всём рунете нет ни одной приличной системы голосования!!! :]" и творить после этого. | |
|
|
|
|
|
|
|
для: J.Lex
(29.08.2004 в 20:01)
| | >хорошо одбросим пример с куками, ip все равно заноситься в
>бд
>и перед тем как показать форму или результаты проверка ip в
>бд если голосовал показать ТОЛЬко результаты,если нет
>форму!тогда и куксы не нужны!
Кажется ты сам себе противоречишь. Ведь с одного ip может быт масса пользовотелей. А т.к. здесь используется временной интервал, то получится, что если я перезагружаю страницу в этом интервале, то виже результаты, а после - опять форму.
>да и зачем даже при очень серьезной системе голосования
>использовать мыло для потверждения это глупо,тогда лучше
>после системы регистрации и в входа на сайт через логин и
>пароль выводить голосование!
Если использовать регистрацию, это сразу же уменьшит кол-во желающих голосовать. Да и что мне мешает зарег-ся несколько раз под разными логинами?
На сайте ПХЛ ежегодно проводится голосование для выбора игроков к матчу звезд. И как они не извращаются, все равно происходят накрутки и голосование не учитывают.
Так что идеология здешнего голосования довольно правильная, кто захочет, тот накрутит, и есть небольшая защита от дурака. Еще добавить проверку по кукисам и бедет все ОК. | |
|
|
|
|
|
|
|
для: J.Lex
(29.08.2004 в 20:01)
| | >если голосовал показать ТОЛЬко результаты,если нет форму!
А зачем огород городить? Есть такая штука - "интуитивный интерфейс", под которой много чего понимается. Так вот - такое поведение будет "неестественно" для большинства систем голосований в инете. То появляющаяся, то изменяющаяся форма только вызовет "непонятки" у посетителей - "Отчего исчезло? Почему появилось?". Посетителю не нужно задавать лишних вопросов и заставлять разбираться в измудрениях разработчиков. Пусть вопросы себе задают сами разработчики.
>да и зачем даже при очень серьезной системе голосования использовать мыло для потверждения это глупо,тогда лучше после системы регистрации и в входа на сайт через логин и пароль выводить голосование!
Простая регистрация на сайте (которую Вы предлагаете) позволит завести сколько угодно новых логинов и "накрутить" голосование. Завести сколько угодно "НЕбесплатных" e-mail-ов довольно затруднительно.
>и еще в вашей админ страничке не учтено создания 2,3 или более голосований одновременно!
Да, не учтено. Давайте доработаем ее вместе :) | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(29.08.2004 в 03:03)
| | Пришла еще такая мысля.
Неплохо было бы для удачно проголосовавшего выводить табличку "ваш голос учтен". А то непонятно, проголосовал я или нет, и это может побудить некоторых пытаться проголосовать еще и счетчик накрутится без злого умысла. | |
|
|
|
|
|
|
|
для: ПБ (Дмитрий)
(30.08.2004 в 06:36)
| | Очень здравая мысль. Мне тоже когда то она приходила, но не дошла :)
Когда будем переделывать голосование так и сделаем. | |
|
|
|