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

Форум PHP

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

 

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

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

тема: как определить пользователя?
 
 автор: Лена   (19.04.2008 в 11:52)   письмо автору
 
 

Есть вот такой скрипт:

<?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 ($handlefilesize ($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 посетителя (те, кто проголосовал так же).
Проблема в чем. Один и тот же пользователь может зайти, проголосовать, закрыть страничку, потом снова на нее зайти и опять проголосовать. Как отследить таких пользователей? Направлять о пользователе какую-то информацию в базу?
Как это сделать?

   
 
 автор: mechanic   (19.04.2008 в 12:00)   письмо автору
 
   для: Лена   (19.04.2008 в 11:52)
 

при голосовании ставить юзеру куку, что он тут уже был и все..
дополнительно можно писать его IP, это предотвратит возможность множественного голосования путем стирания кук

   
 
 автор: Valick   (19.04.2008 в 12:01)   письмо автору
 
   для: mechanic   (19.04.2008 в 12:00)
 

ни в коем разе не трогайте АйПи!!!!!
Если пользователь не зарегистрирован, то защитится от накрутки можно только одним путём - никак!!!

   
 
 автор: mechanic   (19.04.2008 в 12:03)   письмо автору
 
   для: Valick   (19.04.2008 в 12:01)
 

из-за НАТа чтоль?

   
 
 автор: Valick   (19.04.2008 в 12:00)   письмо автору
 
   для: Лена   (19.04.2008 в 11:52)
 

Пользователи зарегистрированы?

   
 
 автор: mechanic   (19.04.2008 в 12:02)   письмо автору
 
   для: Valick   (19.04.2008 в 12:00)
 

похоже нет, приведенный код - это вся система

   
 
 автор: Лена   (19.04.2008 в 12:02)   письмо автору
 
   для: Valick   (19.04.2008 в 12:00)
 

пользователи будут голосовать и зарегистрированные, и незарегистрированные.

   
 
 автор: Valick   (19.04.2008 в 12:05)   письмо автору
 
   для: Лена   (19.04.2008 в 12:02)
 

Тогда никак. Сможете защититься лишь от тех кому ваша накрутка ненужна вовсе.

   
 
 автор: Лена   (19.04.2008 в 12:10)   письмо автору
 
   для: Valick   (19.04.2008 в 12:05)
 

Спасибо за доброе слово. Хорошо. Будем проводить опрос только среди зарегистрированных. Как тогда?

   
 
 автор: mechanic   (19.04.2008 в 12:14)   письмо автору
 
   для: Лена   (19.04.2008 в 12:10)
 

тогда если пользователь зарегистрирован, то каждая пара "логин-пароль" может голосовать только 1 раз, после голосования ей ставится флажок "проголосовал"
и все

   
 
 автор: Valick   (19.04.2008 в 12:14)   письмо автору
 
   для: Лена   (19.04.2008 в 12:10)
 

Тогда очень просто, в таблице где логин и пароль пользователя добавляете поле в котором например 0 - не голосовал, 1- голосовал. А ещё лучще 0 - не голосовал, а 134 - варианты ответа, в этом случае можно будет переголосовать если пользователь передумал.

   
 
 автор: Лена   (19.04.2008 в 12:36)   письмо автору
 
   для: Valick   (19.04.2008 в 12:14)
 

В случае переголосования тогда должна быть отдельная кнопка, при нажатии на которую в базе стирается уже ранее введенная информация. Или сделать UPDATE таблицы.
Спасибо за информацию.

   
 
 автор: Valick   (19.04.2008 в 12:42)   письмо автору
 
   для: Лена   (19.04.2008 в 12:36)
 

Совершенно верно в случае переголосования нужна кнопка и естественно удаление предыдущего результата голосования с последующей записью нового. Или просто стирание, флага в БД и результатов голосования. Так даже лучше... вдруг юзер передумал и вообще не хочет чтобы его голос учитывался, всяко бывает)

   
Rambler's Top100
вверх

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