За последние 24 часа нас посетили 20115 программистов и 1611 роботов. Сейчас ищут 1910 программистов ...

Помогите доделать facemash за 10$

Тема в разделе "PHP Free-Lance", создана пользователем faint, 20 сен 2013.

  1. faint

    faint Новичок

    С нами с:
    20 сен 2013
    Сообщения:
    5
    Симпатии:
    0
    Кратко :
    - Что такое facemash? Это сайт, на котором нужно выбирать наиболее привлекательного человека из двух, случайно предложенных.

    Итак,есть скрипт по facemash,но проблема в том что один юзер может голосовать over 999 раз ,что делает проект мертвым и соответственно смысл заливать в сеть его нету.
    Может кто нибудь добавить в скрипт проверку по ip и cookie за "огромное спасибо" или за небольшую оплату ?
    Или сделать так : когда перед юзером появляется 2 фотки ,он соответственно выбирает одну из них и идет дальше ,тогда ту пару что была до - убираем и больше не показываем.
    Также нужно чтоб по окончанию голосования появлялась главная страница с надписью "вы уже голосовали" и ,если пользователь снова заходит на сайт то идет соответственно проверка по ip и cookie .
    Сам в php на 1 уровне ,знаю чуть-чуть
    Вот собственно сам скрипт : http://facemash.moefelt.dk/facemash-clone-1.0beta.zip
    Или для тех кто не хочет скачивать есть 2 основных файла : index.php и rate.php
    Index.php
    Код (Text):
    1.  
    2. <?php
    3.  
    4. /*
    5.  * Title: Facemash-Alike Script
    6.  * Author: Anders Moefelt / http://moefelt.dk
    7.  * Version: 1.0
    8.  *
    9.  * Great resources:
    10.  *
    11.  * 1) http://www.jasonhuber.net/the-social-network-rating-formula-elo/
    12.  * 2) http://www.imdb.com/title/tt1285016/
    13.  * 3) http://en.wikipedia.org/wiki/Mark_Zuckerberg
    14.  * 4) http://www.facebook.com/markzuckerberg
    15.  *
    16.  * Performance rating = [(Total of opponents' ratings + 400 * (Wins - Losses)) / score].
    17.  */
    18.  
    19. include('mysql.php');
    20. include('functions.php');
    21.  
    22.  
    23. // Get random 2
    24. $query="SELECT * FROM images ORDER BY RAND() LIMIT 0,2";
    25. $result = @mysql_query($query);
    26.  
    27. while($row = mysql_fetch_object($result)) {
    28.     $images[] = (object) $row;
    29. }
    30.  
    31.  
    32. // Get the top10
    33. $result = mysql_query("SELECT *, ROUND(score/(1+(losses/wins))) AS performance FROM images ORDER BY ROUND(score/(1+(losses/wins))) DESC LIMIT 0,3");
    34. while($row = mysql_fetch_object($result)) $top_ratings[] = (object) $row;
    35.  
    36.  
    37. // Close the connection
    38. mysql_close();
    39.  
    40.  
    41. ?>
    42. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    43. <html xmlns="http://www.w3.org/1999/xhtml">
    44. <head>
    45. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    46. <title>Facemash by _brm_</title>
    47. <style type="text/css">
    48.  
    49. body, html {font-family:Arial, Helvetica, sans-serif;width:100%;margin:0;padding:0;text-align:center;}
    50. h1 {background-color:#600;color:#fff;padding:20px 0;margin:0;}
    51. a img {border:0;}
    52. td {font-size:11px;}
    53. .image {background-color:#eee;border:1px solid #ddd;border-bottom:1px solid #bbb;padding:5px;}
    54.  
    55. </style>
    56. </head>
    57.  
    58. <body>
    59.  
    60.  
    61. <h1>Facemash by _brm_</h1>
    62. <h3>Голосуй за самую сексуальную девчонку! </h3>
    63. <h2>Who's hotter? Click to choose.</h2>
    64.  
    65. <center>
    66. <table>
    67.     <tr>
    68.         <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?>" /></a></td>
    69.         <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?>" /></a></td>
    70.     </tr>
    71.     <tr>
    72.         <td>Won: <?=$images[0]->wins?>, Lost: <?=$images[0]->losses?></td>
    73.         <td>Won: <?=$images[1]->wins?>, Lost: <?=$images[1]->losses?></td>
    74.     </tr>
    75.     <tr>
    76.         <td>Score: <?=$images[0]->score?></td>
    77.         <td>Score: <?=$images[1]->score?></td>
    78.     </tr>
    79.     <tr>
    80.         <td>Expected: <?=round(expected($images[1]->score, $images[0]->score), 4)?></td>
    81.         <td>Expected: <?=round(expected($images[0]->score, $images[1]->score), 4)?></td>
    82.     </tr>
    83. </table>
    84. </center>
    85.  
    86. <h2>Top 3 Rated</h2>
    87. <center>
    88. <table>
    89.     <tr>
    90.         <? foreach($top_ratings as $key => $image) : ?>
    91.         <td valign="top"><img src="images/<?=$image->filename?>" width="70" /></td>
    92.         <? endforeach ?>
    93.     </tr>
    94.     <? /* Remove this to see the scoring
    95.     <tr>
    96.         <? foreach($top_ratings as $key => $image) : ?>
    97.         <td valign="top">Score: <?=$image->score?></td>
    98.         <? endforeach ?>
    99.     </tr>
    100.     <tr>
    101.         <? foreach($top_ratings as $key => $image) : ?>
    102.         <td valign="top">Performance: <?=$image->performance?></td>
    103.         <? endforeach ?>
    104.     </tr>
    105.     <tr>
    106.         <? foreach($top_ratings as $key => $image) : ?>
    107.         <td valign="top">Won: <?=$image->wins?></td>
    108.         <? endforeach ?>
    109.     </tr>
    110.     <tr>
    111.         <? foreach($top_ratings as $key => $image) : ?>
    112.         <td valign="top">Lost: <?=$image->losses?></td>
    113.         <? endforeach ?>
    114.     </tr>
    115.     */ ?>
    116. </table>
    117. </center>
    118.  
    119.  
    120. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    121. <html xmlns="http://www.w3.org/1999/xhtml">
    122. <head>
    123. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    124. <title>Facemash by _brm_</title>
    125. <style type="text/css">
    126.  
    127. body, html {font-family:Arial, Helvetica, sans-serif;width:100%;margin:0;padding:0;text-align:center;}
    128. h1 {background-color:#600;color:#fff;padding:20px 0;margin:0;}
    129. a img {border:0;}
    130. td {font-size:11px;}
    131. .image {background-color:#eee;border:1px solid #ddd;border-bottom:1px solid #bbb;padding:5px;}
    132.  
    133. </style>
    134. </head>
    135. <body>
    136.  
    137.  
    138.  
    139. </body>
    140. </html>
    А вот rate.php

    Код (Text):
    1.  
    2. <?php
    3.  
    4.  
    5. include('mysql.php');
    6. include('functions.php');
    7.  
    8.  
    9. // If rating - update the database
    10. if ($_GET['winner'] && $_GET['loser']) {
    11.  
    12.  
    13.     // Get the winner
    14.     $result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['winner']." ");
    15.     $winner = mysql_fetch_object($result);
    16.  
    17.  
    18.     // Get the loser
    19.     $result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['loser']." ");
    20.     $loser = mysql_fetch_object($result);
    21.  
    22.  
    23.     // Update the winner score
    24.     $winner_expected = expected($loser->score, $winner->score);
    25.     $winner_new_score = win($winner->score, $winner_expected);
    26.         //test print "Winner: ".$winner->score." - ".$winner_new_score." - ".$winner_expected."<br>";
    27.     mysql_query("UPDATE images SET score = ".$winner_new_score.", wins = wins+1 WHERE image_id = ".$_GET['winner']);
    28.  
    29.  
    30.     // Update the loser score
    31.     $loser_expected = expected($winner->score, $loser->score);
    32.     $loser_new_score = loss($loser->score, $loser_expected);
    33.         //test print "Loser: ".$loser->score." - ".$loser_new_score." - ".$loser_expected."<br>";
    34.     mysql_query("UPDATE images SET score = ".$loser_new_score.", losses = losses+1  WHERE image_id = ".$_GET['loser']);
    35.  
    36.  
    37.     // Insert battle
    38.     mysql_query("INSERT INTO battles SET winner = ".$_GET['winner'].", loser = ".$_GET['loser']." ");
    39.  
    40.  
    41.     // Back to the frontpage
    42.     header('location: /');
    43.    
    44. }
    45.  
    46.  
    47. ?>
    Мой скайп : faint.smith
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.861
    Симпатии:
    752
    Адрес:
    Татарстан
    а доплатить вам не надо, за то чтоб ваш проект сделать?
     
  3. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    Код (Text):
    1. $result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['winner']." ");
    советую вобще не выкладывать эту поделку в сеть
     
  4. faint

    faint Новичок

    С нами с:
    20 сен 2013
    Сообщения:
    5
    Симпатии:
    0
    имеется ввиду что я дам 10$ кто поможет сделать условия выше, или пусть пишут цену (у всех по разному)

    Добавлено спустя 27 секунд:
    это еще почему ?
     
  5. vikrorpert

    vikrorpert Активный пользователь

    С нами с:
    13 окт 2010
    Сообщения:
    984
    Симпатии:
    10
    код некачественный
     
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    у нас в стране принято писать гадости, вместо того, чтобы объяснять, разве вы не знали? =)

    Код (Text):
    1. $result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['winner']." ");
    в переменную $_GET['winner'] можно вкрячить не только одно слово или цифру, но и целый запрос, который выполнится, т.к. вы вставляете без изменений содержимое переменной в свой. Вы же не проверяете что внутри. Так что это дыра в безопасности.
     
  7. faint

    faint Новичок

    С нами с:
    20 сен 2013
    Сообщения:
    5
    Симпатии:
    0
    и как это исправить ?
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Если вы начнете это исправлять, то в вас проснётся программист, а это необратимо. Вы готовы? :D
     
  9. faint

    faint Новичок

    С нами с:
    20 сен 2013
    Сообщения:
    5
    Симпатии:
    0
    если честно - нет !
     
  10. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    тьпу ты, а я уже приготовил алтарь из блейд-сервера, три литра крови админов и слез пользователей, плюс шерсть из свитера, который не стирали 13 лет. И вы вот так пишете, что не готовы к обряду посвящения?
     
  11. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну тогда ой
     
  12. Invision

    Invision Активный пользователь

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Зачатки фейсбука?:)
    Скрипт дырявый, mysql_* is deprecated.
     
  13. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Еще один человек думает, что фильм "Социальная сеть" документален :)
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
     
  15. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    это не проблема. Для голосования должна быть только одна страница, которая показывает случайную пару. Чтобы второй раз увидеть нужного человека, надо несколько раз обновить страницу, не говоря уже о той же паре (число рефрешей растет логарифмично).
    Чтобы нельзя было использовать атаку повторением HTTP запросов, надо формировать на сервере уникальный одноразовый временный токен для каждого показа страницы.
     
  16. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Вась, а ты сейчас с кем разговаривал? =)

     
  17. faint

    faint Новичок

    С нами с:
    20 сен 2013
    Сообщения:
    5
    Симпатии:
    0
    Можете кто-нибудь помочь исправить скрипт ?
     
  18. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768