|
|
|
| Есть вот такой скрипт:
<?php
echo "<form method='post' action=''>
<input type='hidden' name='posted' value='true'>
<p><b>?????????</b></p>
<input type='checkbox' name='option[]' value='1' checked> 1<br>
<input type='checkbox' name='option[]' value='2' > 2<br>
<input type='checkbox' name='option[]' value='4' > 3<br>
<input type='checkbox' name='option[]' value='8' > 4<br>
<input type='checkbox' name='option[]' value='16'> 5<br>
<input type='reset' value='Очистить'>
<input type='submit' value='Отправить'>
</form>
";
/*
if (strlen($message)>3000)
{
echo "У вас очень длинное сообщение!";
die ();
}*/
//print_r($_POST);
if (isset($_POST) && count($_POST)>0)
{
if (isset($_POST['option']))
{
$handle = @fopen($filename='chekbox.txt',"r");
$contents = fread ($handle, filesize ($filename));
fclose ($handle);
$loadedAR = unserialize($contents);
$sum = array_sum($_POST['option']);
if (!isset($loadedAR[$sum]))
$loadedAR[$sum] = 1;
else $loadedAR[$sum] ++;
echo "С вами согласны <b>".($loadedAR[$sum]-1)."</b> посетителей";
$str = serialize($loadedAR);
$handle = fopen($filename='chekbox.txt',"w");
fwrite($handle, $str);
fclose ($handle);
}
}
?>
|
Смысл такой: пользователю задается вопрос. Он может выбрать варианты ответов 1+2+5, 1+3, 1+4+2 и т.д. - это уже какой полет мысли будет. Все эти варианты считаются в файле chekbox.txt и когда пользователь голосует, высвечивается строка: С вами согласны, например, 4 посетителя (те, кто проголосовал так же).
Проблема в чем. Один и тот же пользователь может зайти, проголосовать, закрыть страничку, потом снова на нее зайти и опять проголосовать. Как отследить таких пользователей? Направлять о пользователе какую-то информацию в базу?
Как это сделать? | |
|
|
|
|
|
|
|
для: Лена
(19.04.2008 в 11:52)
| | при голосовании ставить юзеру куку, что он тут уже был и все..
дополнительно можно писать его IP, это предотвратит возможность множественного голосования путем стирания кук | |
|
|
|
|
|
|
|
для: mechanic
(19.04.2008 в 12:00)
| | ни в коем разе не трогайте АйПи!!!!!
Если пользователь не зарегистрирован, то защитится от накрутки можно только одним путём - никак!!! | |
|
|
|
|
|
|
|
для: Valick
(19.04.2008 в 12:01)
| | из-за НАТа чтоль? | |
|
|
|
|
|
|
|
для: Лена
(19.04.2008 в 11:52)
| | Пользователи зарегистрированы? | |
|
|
|
|
|
|
|
для: Valick
(19.04.2008 в 12:00)
| | похоже нет, приведенный код - это вся система | |
|
|
|
|
|
|
|
для: Valick
(19.04.2008 в 12:00)
| | пользователи будут голосовать и зарегистрированные, и незарегистрированные. | |
|
|
|
|
|
|
|
для: Лена
(19.04.2008 в 12:02)
| | Тогда никак. Сможете защититься лишь от тех кому ваша накрутка ненужна вовсе. | |
|
|
|
|
|
|
|
для: Valick
(19.04.2008 в 12:05)
| | Спасибо за доброе слово. Хорошо. Будем проводить опрос только среди зарегистрированных. Как тогда? | |
|
|
|
|
|
|
|
для: Лена
(19.04.2008 в 12:10)
| | тогда если пользователь зарегистрирован, то каждая пара "логин-пароль" может голосовать только 1 раз, после голосования ей ставится флажок "проголосовал"
и все | |
|
|
|
|
|
|
|
для: Лена
(19.04.2008 в 12:10)
| | Тогда очень просто, в таблице где логин и пароль пользователя добавляете поле в котором например 0 - не голосовал, 1- голосовал. А ещё лучще 0 - не голосовал, а 134 - варианты ответа, в этом случае можно будет переголосовать если пользователь передумал. | |
|
|
|
|
|
|
|
для: Valick
(19.04.2008 в 12:14)
| | В случае переголосования тогда должна быть отдельная кнопка, при нажатии на которую в базе стирается уже ранее введенная информация. Или сделать UPDATE таблицы.
Спасибо за информацию. | |
|
|
|
|
|
|
|
для: Лена
(19.04.2008 в 12:36)
| | Совершенно верно в случае переголосования нужна кнопка и естественно удаление предыдущего результата голосования с последующей записью нового. Или просто стирание, флага в БД и результатов голосования. Так даже лучше... вдруг юзер передумал и вообще не хочет чтобы его голос учитывался, всяко бывает) | |
|
|
|