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 [2]

 PHP.SU

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


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

> Описание: ограничение голосования
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 14:30:34
Post Id


Новичок


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


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




$vote = 495; // $vote = $image_id;
$vote = 494; // $vote = $image_id;
$vote = 493; // $vote = $image_id;
$vote = 492; // $vote = $image_id;
и так дальше ?

(Отредактировано автором: 18 Августа, 2015 - 14:32:15)

 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 14:56:45
Post Id


Участник


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


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




Yaroshrostyslav
Нет. Как у Вас голос засчитывался? Как скрипт узнает, что голос отдан какой то фотографии?
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 15:01:50
Post Id


Новичок


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


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




andrewkard пишет:
Yaroshrostyslav
Нет. Как у Вас голос засчитывался? Как скрипт узнает, что голос отдан какой то фотографии?

Functions.php
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3. // Calculate the expected % outcome
  4. function expected($Rb, $Ra) {
  5.         return 1/(1 + pow(10, ($Rb-$Ra)/400));
  6. }
  7.  
  8. // Calculate the new winnner score
  9. function win($score, $expected, $k = 24) {
  10.         return $score + $k * (1-$expected);
  11. }
  12.  
  13. // Calculate the new loser score
  14. function loss($score, $expected, $k = 24) {
  15.         return $score + $k * (0-$expected);
  16. }
  17.  
  18. ?>

rate.php

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  
  3.  
  4. include('mysql.php');
  5. include('functions.php');
  6.  
  7.  
  8. $ip=$_SERVER['REMOTE_ADDR'];
  9. $hash_ip = md5($ip);
  10. $vote = 1; //1=> winner, 2=> looser
  11.  
  12. //Если не голосовали
  13. if (!isset($_COOKIE['hash'])) {
  14.     //Ставим куки на сутки
  15.     setcookie("hash", $hash_ip, time() + 86400);
  16.     //Запоминаем выбор
  17.     $arr_vote[]=$vote;
  18.     setcookie("vote", serialize( $arr_vote ) ,time()*2);
  19.     //Успех
  20.     echo 'Ваш голос учтен';
  21.     exit;
  22. }
  23. //Проверка IP
  24. if ($_COOKIE['hash'] != $hash_ip) {
  25.     echo 'Техническая ошибка';
  26.     exit;
  27. }
  28.  
  29. //Если голосовали
  30. if (isset($_COOKIE['vote'])) {
  31.     //и голос тот же
  32.     $arr_vote = unserialize($_COOKIE['vote']);
  33.         if (in_array($vote,$arr_vote)){
  34.             echo 'Вы уже голосовали за этого игрока';
  35.             exit;
  36.         }
  37. }
  38.  
  39. $arr_vote[]=$vote;
  40. //Ставим куки на сутки
  41. setcookie("hash", $hash_ip, time() + 86400);
  42. //Запоминаем выбор
  43. setcookie("vote", serialize( $arr_vote ), time()*2);
  44. //Успех
  45. echo 'Ваш голос учтен';
  46.  
  47. // If rating - update the database
  48. if ($_GET['winner'] && $_GET['loser']) {
  49.  
  50.  
  51.         // Get the winner
  52.         $result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['winner']." ");
  53.         $winner = mysql_fetch_object($result);
  54.  
  55.  
  56.         // Get the loser
  57.         $result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['loser']." ");
  58.         $loser = mysql_fetch_object($result);
  59.  
  60.  
  61.         // Update the winner score
  62.         $winner_expected = expected($loser->score, $winner->score);
  63.         $winner_new_score = win($winner->score, $winner_expected);
  64.                 //test print "Winner: ".$winner->score." - ".$winner_new_score." - ".$winner_expected."<br>";
  65.         mysql_query("UPDATE images SET score = ".$winner_new_score.", wins = wins+1 WHERE image_id = ".$_GET['winner']);
  66.  
  67.  
  68.         // Update the loser score
  69.         $loser_expected = expected($winner->score, $loser->score);
  70.         $loser_new_score = loss($loser->score, $loser_expected);
  71.                 //test print "Loser: ".$loser->score." - ".$loser_new_score." - ".$loser_expected."<br>";
  72.         mysql_query("UPDATE images SET score = ".$loser_new_score.", losses = losses+1  WHERE image_id = ".$_GET['loser']);
  73.  
  74.  
  75.         // Insert battle
  76.         mysql_query("INSERT INTO battles SET winner = ".$_GET['winner'].", loser = ".$_GET['loser']." ");
  77.  
  78.  
  79.         // Back to the frontpage
  80.         header('location: /');
  81.        
  82. }
  83.  
  84.  
  85. ?>


index.php
PHP:
скопировать код в буфер обмена
  1. <table>
  2.         <tr>
  3.                 <td valign="top" class="image"><a href="rate.php?winner=<?=$images[0]->image_id?>&loser=<?=$images[1]->image_id?>"><img src="images/<?=$images[0]->filename?>" width="320" height="400" /></a></td>
  4.                 <td valign="top" class="image"><a href="rate.php?winner=<?=$images[1]->image_id?>&loser=<?=$images[0]->image_id?>"><img src="images/<?=$images[1]->filename?>" width="320" height="400" /></a></td>
  5.         </tr>
  6.         <tr>
  7.                 <td><h4>Выбрана: <b><?=$images[0]->wins?></b> раз(а), Слита:<b> <?=$images[0]->losses?></b></h4></td>
  8.                 <td><h4>Выбрана: <b><?=$images[1]->wins?></b> раз(а), Слита: <b><?=$images[1]->losses?></b></h4></td>
  9.         </tr>
  10.         <tr>
  11.                 <td>Рейтинг: <b><?=$images[0]->score?></b></td>
  12.                 <td>Рейтинг: <b><?=$images[1]->score?></b></td>
  13.         </tr>
  14.         <tr>
  15.                 <td>Нравится: <b><?=round(expected($images[1]->score, $images[0]->score), 4)?></b></td>
  16.                 <td>Нравится: <b><?=round(expected($images[0]->score, $images[1]->score), 4)?></b></td>
  17.         </tr>
  18. </table>

(Добавление)
вам что-то из этого поможет?

(Отредактировано автором: 18 Августа, 2015 - 15:10:53)

 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 15:17:16
Post Id


Участник


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


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




Yaroshrostyslav
Этого не достаточно, на клиенте, когда пользователь нажимает на фотографию и голосует, на сервер отправляется запрос, вот в этом запросе и нужно отправить image_id
Вот например так:
http://jsfiddle[dot]net/sdo8hav8/1/

и потом в скрипте нужно отловить его:
PHP:
скопировать код в буфер обмена
  1.  
  2. $vote = isset($_POST['vote'])?(int)$_POST['vote']:0;
  3.  
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 15:19:46
Post Id


Новичок


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


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




я хз где его искать
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 15:20:45
Post Id


Участник


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


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




Ага, ну тогда скорее всего так:

PHP:
скопировать код в буфер обмена
  1. $vote = isset($_GET['winner'])?(int)$_GET['winner']:0;

(Добавление)
10 строчку замените.
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 15:22:29
Post Id


Новичок


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


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




$ip=$_SERVER['REMOTE_ADDR'];
$hash_ip = md5($ip);
$vote = isset($_GET['winner'])?(int)$_GET['winner']:0;

так?
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 15:28:24
Post Id


Участник


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


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




Да
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 15:34:28
Post Id


Новичок


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


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




andrewkard пишет:
Да

Отлично! всё работает) то, что нужно.
Скажите еще пожалуйста, как сделать чтобы echo выводился не на новой странице, а в браузере.
http://rghost[dot]ru/6fjKZdd7c
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 16:29:48
Post Id


Участник


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


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




Yaroshrostyslav
Это обычный JS alert('Сообщение отправлено');
а не PHP echo

на JS записывают сообщение в спец. созданный для этого элемент:
CODE (javascript):
скопировать код в буфер обмена
  1. $('#msg').text('Сообщение отправлено');


CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div id="msg"></div>
  3.  
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 16:32:28
Post Id


Новичок


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


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




а можно вот так ?
PHP:
скопировать код в буфер обмена
  1. echo '<script>alert("Вы уже голосовали за этого человека")</script>';

(Добавление)
когда я нажимаю " ОК ", меня перекидывает на пустую страницу.
как сделать, чтобы после сообщения меня вернуло на сайт ?
 
 Top
andrewkard
Отправлено: 18 Августа, 2015 - 16:47:37
Post Id


Участник


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


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




Yaroshrostyslav пишет:
а можно вот так ?

Можно.
Yaroshrostyslav пишет:
как сделать, чтобы после сообщения меня вернуло на сайт ?

Значит у Вас коряво сделано.
Поставьте
PHP:
скопировать код в буфер обмена
  1.  
  2. echo '
  3. <script>
  4.    alert("Вы уже голосовали за этого человека");
  5.    window.location="/";
  6. </script>';
  7.  
 
 Top
Yaroshrostyslav
Отправлено: 18 Августа, 2015 - 17:03:09
Post Id


Новичок


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


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




Спасибо большое за помощь !!)
 
 Top
Yaroshrostyslav
Отправлено: 20 Августа, 2015 - 04:19:28
Post Id


Новичок


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


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




ПОЧЕМУ ИНОГДА ПИШЕТ "Техническая ошибка" ?
 
 Top
andrewkard
Отправлено: 20 Августа, 2015 - 10:12:04
Post Id


Участник


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


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




Yaroshrostyslav пишет:
ПОЧЕМУ ИНОГДА ПИШЕТ "Техническая ошибка" ?

PHP:
скопировать код в буфер обмена
  1.  
  2. //Проверка IP
  3. if ($_COOKIE['hash'] != $hash_ip) {
  4.     echo 'Техническая ошибка';
  5.     exit;
  6. }
  7.  

Это значит, что хеш запись IP в куках не совпадает с IP, с которого пришел запрос.
Дебажте.
 
 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