Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Установка защиты на Facemash

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): [1] 2 3 »   

> Описание: ограничение голосования
Yaroshrostyslav
Отправлено: 17 Августа, 2015 - 11:42:44
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Здравствуйте. Я создал сайт и использовал готовый скрипт facemash.( Голосование за фото )
Всё работает. Но когда заходит посетитель, он может голосовать множество раз за одного и тоже человека.
Как можно ограничить это действие.
Мне нужно чтобы один пользователь голосовал только один раз в день и за одного и того же человека.
Знаю что можно использовать куки, но не знаю как правильно это применить.
Помогите. В php не силен.
Скрипт: http://rghost[dot]ru/6GKTlyjXc
 
 Top
zypikov
Отправлено: 17 Августа, 2015 - 15:19:02
Post Id



Частый гость


Покинул форум
Сообщений всего: 219
Дата рег-ции: Нояб. 2010  


Помог: 3 раз(а)




Для того что вам это сделать, нужно точно идентифицировать пользователя. А такого способа, насколько я знаю, нет. Куки хранятся на клиенте, их можно не только тупо удалить, но и изменить. Айпишник тоже не вариант. Вроде как-то еще можно проверку с помощью сессий сделать, но помойму это тоже не 100% гарантия.

Если интересно можно почитать http://f9r[dot]ru/goloss[dot]html


-----
У всего есть обратная сторона.
 
 Top
Yaroshrostyslav
Отправлено: 17 Августа, 2015 - 15:42:57
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




zypikov пишет:
Для того что вам это сделать, нужно точно идентифицировать пользователя. А такого способа, насколько я знаю, нет. Куки хранятся на клиенте, их можно не только тупо удалить, но и изменить. Айпишник тоже не вариант. Вроде как-то еще можно проверку с помощью сессий сделать, но помойму это тоже не 100% гарантия.

Если интересно можно почитать http://f9r[dot]ru/goloss[dot]html

Спасибо, я много находил похожего.
Но я не знаю как сделать его под себя..
Мне нужна помощь.
 
 Top
andrewkard
Отправлено: 17 Августа, 2015 - 17:37:54
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Yaroshrostyslav
Авторизация на сайте есть, или любой может голосовать?
Если человек, который голосует, авторизован, пишите в БД или сессию, id пользователя и время после которого человек может снова голосовать:
PHP:
скопировать код в буфер обмена
  1.  
  2. $_SESSION['user']=$user_id;
  3. $_SESSION['time']=time() + 86400;
  4.  

Проверка:
PHP:
скопировать код в буфер обмена
  1. if ($user_id == $_SESSION['user'] && time() > $_SESSION['time']){
  2.     //засчитываем голос
  3.  
  4.     //ставим новое время
  5.     $_SESSION['time']=time() + 86400;
  6. }


если не авторизован, пишите в куки ip адрес и время:
PHP:
скопировать код в буфер обмена
  1. $ip=$_SERVER['REMOTE_ADDR'];
  2. $hash_ip = md5($ip);
  3. $time_vote = time() + 86400;
  4. setcookie("hash", $hash_ip);
  5. setcookie("time", $time_vote);

Проверка аналогична, только используйте: $_COOKIE["your cookie name"];
Для определения ip можно использовать более сложную функцию, но в любом случае гарантии нет.
 
 Top
Yaroshrostyslav
Отправлено: 17 Августа, 2015 - 23:52:00
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Авторизации нету. Голосовать может любой кто зашел на сайт.
Можете пошагово объяснить, как это все сделать. ?
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 00:29:43
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Yaroshrostyslav
Не совсем ясно как у Вас выбор осуществляется, но примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $ip=$_SERVER['REMOTE_ADDR'];
  3. $hash_ip = md5($ip);
  4. $vote = 1; //1=> winner, 2=> looser
  5. //Если уже голосовали
  6. if (isset($_COOKIE['hash'])){
  7.         //Если ip совпадает
  8.         if ($_COOKIE['hash'] == $hash_ip){
  9.                 echo 'Вы уже голосовали'
  10.                 exit;
  11.         } else {
  12.                 echo 'Техническая ошибка';
  13.                 exit;          
  14.         }
  15. } else {
  16.         //Ставим куки на сутки
  17.         setcookie("hash", $hash_ip, time() + 86400);
  18.         //Если голос был и он совпадает
  19.         if (isset($_COOKIE['vote']) && $_COOKIE['vote'] == $vote){
  20.                 echo 'Вы уже голосовали за этого игрока'
  21.                 exit;
  22.         }
  23.         //Иначе запоминаем выбор
  24.         setcookie("vote", $vote,time()*2);     
  25. }
  26.  
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 00:52:25
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




andrewkard пишет:
Yaroshrostyslav
Не совсем ясно как у Вас выбор осуществляется, но примерно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $ip=$_SERVER['REMOTE_ADDR'];
  3. $hash_ip = md5($ip);
  4. $vote = 1; //1=> winner, 2=> looser
  5. //Если уже голосовали
  6. if (isset($_COOKIE['hash'])){
  7.         //Если ip совпадает
  8.         if ($_COOKIE['hash'] == $hash_ip){
  9.                 echo 'Вы уже голосовали'
  10.                 exit;
  11.         } else {
  12.                 echo 'Техническая ошибка';
  13.                 exit;          
  14.         }
  15. } else {
  16.         //Ставим куки на сутки
  17.         setcookie("hash", $hash_ip, time() + 86400);
  18.         //Если голос был и он совпадает
  19.         if (isset($_COOKIE['vote']) && $_COOKIE['vote'] == $vote){
  20.                 echo 'Вы уже голосовали за этого игрока'
  21.                 exit;
  22.         }
  23.         //Иначе запоминаем выбор
  24.         setcookie("vote", $vote,time()*2);     
  25. }
  26.  

Его вставить в начале или в конец моего скрипта?
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 08:43:59
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Я сделал установил скрипт, он работает.
Но он позволяет только один раз проголосовать за любого человека.
А как сделать, чтобы можно было голосовать дальше, только за других уже людей?
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 10:27:20
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Yaroshrostyslav
Пробуйте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $ip=$_SERVER['REMOTE_ADDR'];
  3. $hash_ip = md5($ip);
  4. $vote = 1; //1=> winner, 2=> looser
  5.  
  6. //Если не голосовали
  7. if (!isset($_COOKIE['hash'])) {
  8.     //Ставим куки на сутки
  9.     setcookie("hash", $hash_ip, time() + 86400);
  10.     //Запоминаем выбор
  11.     $arr_vote[]=$vote;
  12.     setcookie("vote", serialize( $arr_vote ) ,time()*2);
  13.     //Успех
  14.     echo 'Ваш голос учтен';
  15.     exit;
  16. }
  17. //Проверка IP
  18. if ($_COOKIE['hash'] != $hash_ip) {
  19.     echo 'Техническая ошибка';
  20.     exit;
  21. }
  22.  
  23. //Если голосовали
  24. if (isset($_COOKIE['vote'])) {
  25.     //и голос тот же
  26.     $arr_vote = unserialize($_COOKIE['vote']);
  27.         if (in_array($vote,$arr_vote)){
  28.             echo 'Вы уже голосовали за этого игрока';
  29.             exit;
  30.         }
  31. }
  32.  
  33. $arr_vote[]=$vote;
  34. //Ставим куки на сутки
  35. setcookie("hash", $hash_ip, time() + 86400);
  36. //Запоминаем выбор
  37. setcookie("vote", serialize( $arr_vote ), time()*2);
  38. //Успех
  39. echo 'Ваш голос учтен';
  40.  
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 10:32:57
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




andrewkard пишет:
Yaroshrostyslav
Пробуйте так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $ip=$_SERVER['REMOTE_ADDR'];
  3. $hash_ip = md5($ip);
  4. $vote = 1; //1=> winner, 2=> looser
  5.  
  6. //Если не голосовали
  7. if (!isset($_COOKIE['hash'])) {
  8.     //Ставим куки на сутки
  9.     setcookie("hash", $hash_ip, time() + 86400);
  10.     //Запоминаем выбор
  11.     $arr_vote[]=$vote;
  12.     setcookie("vote", serialize( $arr_vote ) ,time()*2);
  13.     //Успех
  14.     echo 'Ваш голос учтен';
  15.     exit;
  16. }
  17. //Проверка IP
  18. if ($_COOKIE['hash'] != $hash_ip) {
  19.     echo 'Техническая ошибка';
  20.     exit;
  21. }
  22.  
  23. //Если голосовали
  24. if (isset($_COOKIE['vote'])) {
  25.     //и голос тот же
  26.     $arr_vote = unserialize($_COOKIE['vote']);
  27.         if (in_array($vote,$arr_vote)){
  28.             echo 'Вы уже голосовали за этого игрока';
  29.             exit;
  30.         }
  31. }
  32.  
  33. $arr_vote[]=$vote;
  34. //Ставим куки на сутки
  35. setcookie("hash", $hash_ip, time() + 86400);
  36. //Запоминаем выбор
  37. setcookie("vote", serialize( $arr_vote ), time()*2);
  38. //Успех
  39. echo 'Ваш голос учтен';
  40.  


Warning: in_array() expects parameter 2 to be array, boolean given in Z:\home\girls\www\rate.php on line 33

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\girls\www\rate.php:33) in Z:\home\girls\www\rate.php on line 41

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\girls\www\rate.php:33) in Z:\home\girls\www\rate.php on line 43
Ваш голос учтен

http://rghost[dot]ru/6H8Wp5z5x


хз.
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 11:05:34
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Yaroshrostyslav пишет:
хз.

Куки нужно почистить. Сохранить файл в кодировке UTF-8 w BOM
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 11:15:39
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




andrewkard пишет:
Yaroshrostyslav пишет:
хз.

Куки нужно почистить. Сохранить файл в кодировке UTF-8 w BOM

Сделал.

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\girls\www\rate.php:1) in Z:\home\girls\www\rate.php on line 15

Warning: Cannot modify header information - headers already sent by (output started at Z:\home\girls\www\rate.php:1) in Z:\home\girls\www\rate.php on line 18
Ваш голос учтен
(Добавление)
Извините. Заработало на хостинге.
Но неправильно работает.
Когда я выбрал 1 девушку, голос - учтен.
Когда выбрал 2 девушку, голос - учтен.
Но при обновлении страницы, фото меняются и тогда в 1 и 2 "Вы уже голосовали за этого игрока".
http://rghost[dot]ru/6NXtsVygQ
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 11:39:24
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Yaroshrostyslav пишет:
Когда я выбрал 1 девушку, голос - учтен.
Когда выбрал 2 девушку, голос - учтен.

Правильно.
Yaroshrostyslav пишет:
Но при обновлении страницы, фото меняются и тогда в 1 и 2 "Вы уже голосовали за этого игрока".

Т. е. у Вас в 1 и 2 случае будет уже другая фотография? В качестве голоса высылайте id фото.
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 14:01:26
Post Id


Новичок


Покинул форум
Сообщений всего: 31
Дата рег-ции: Авг. 2015  


Помог: 0 раз(а)




Да, при обновлении страницы, фотографии меняются.
У каждой фотографии есть свой " image_id ". Что нужно изменить в скрипте?
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 14:19:00
Post Id


Участник


Покинул форум
Сообщений всего: 1372
Дата рег-ции: Нояб. 2014  


Помог: 30 раз(а)




Yaroshrostyslav пишет:
Что нужно изменить в скрипте?

Ничего, передавайте сюда image_id
PHP:
скопировать код в буфер обмена
  1.  
  2. $vote = 1; // $vote = $image_id;
  3.  
 
 Top
Страниц (3): [1] 2 3 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Напишите за меня, пожалуйста »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB