О Facemash.com Вы наверняка могли слышать из фильма «Социальная сеть»: это именно тот проект, который принес славу Марку Цукербергу и сподвиг его начать работу над Facebook. Сейчас мы попытаемся создать свой Facemash. Тег Рекомендую использовать программу Notepad++, лично мне в ней работать очень удобно и приятно.
Итак, создаем «Rate.php»
Затем прописываем «MySQL.php»
Теперь «install_images.php»
Теперь можно сделать и «index.php»
И напоследок пропишем функции: «functions.php»
Заливаем все файлы на хостинг сайта. После этого создаем папку «images», но пока не загружаем в нее фотографии. Залезаем в phpMyAdmin и создаем таблицу:
Отлично, теперь залезаем в MySQL.php и заполняем поля:
Теперь заливаем фотографии в папку images, и «устанавливаем их». Вот и все. Наш собственный Facemash готов к использованию. Если у вас возникнут вопросы — пишите, постараюсь вам помочь. Спасибо за внимание :)
Итак, создаем «Rate.php»
<?php
include('mysql.php');
include('functions.php');
if ($_GET['winner'] && $_GET['loser']) {
$result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['winner']." ");
$winner = mysql_fetch_object($result);
$result = mysql_query("SELECT * FROM images WHERE image_id = ".$_GET['loser']." ");
$loser = mysql_fetch_object($result);
$winner_expected = expected($loser->score, $winner->score);
$winner_new_score = win($winner->score, $winner_expected);
//test print "Winner: ".$winner->score." - ".$winner_new_score." - ".$winner_expected."<br>";
mysql_query("UPDATE images SET score = ".$winner_new_score.", wins = wins+1 WHERE image_id = ".$_GET['winner']);
$loser_expected = expected($winner->score, $loser->score);
$loser_new_score = loss($loser->score, $loser_expected);
//test print "Loser: ".$loser->score." - ".$loser_new_score." - ".$loser_expected."<br>";
mysql_query("UPDATE images SET score = ".$loser_new_score.", losses = losses+1 WHERE image_id = ".$_GET['loser']);
mysql_query("INSERT INTO battles SET winner = ".$_GET['winner'].", loser = ".$_GET['loser']." ");
header('location: /');
}
?>
Затем прописываем «MySQL.php»
<?php
// Настройки MySQL
$user = "";
$password = "";
$database = "";
$host = "";
mysql_connect($host,$user,$password);
mysql_select_db($database) or die( "Unable to select database");
?>
Теперь «install_images.php»
<?php
include('mysql.php');
if ($handle = opendir('images')) {
/* This is the correct way to loop over the directory. */
while (false !== ($file = readdir($handle))) {
if($file!='.' && $file!='..') {
$images[] = "('".$file."')";
}
}
closedir($handle);
}
$query = "INSERT INTO images (filename) VALUES ".implode(',', $images)." ";
if (!mysql_query($query)) {
print mysql_error();
}
else {
print "finished installing your images!";
}
?>
Теперь можно сделать и «index.php»
<?php
include('mysql.php');
include('functions.php');
// Get random 2
$query="SELECT * FROM images ORDER BY RAND() LIMIT 0,2";
$result = @mysql_query($query);
while($row = mysql_fetch_object($result)) {
$images[] = (object) $row;
}
// Get the top10
$result = mysql_query("SELECT *, ROUND(score/(1+(losses/wins))) AS performance FROM images ORDER BY ROUND(score/(1+(losses/wins))) DESC LIMIT 0,10");
while($row = mysql_fetch_object($result)) $top_ratings[] = (object) $row;
// Close the connection
mysql_close();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Facemash</title>
<style type="text/css">
body, html {font-family:Arial, Helvetica, sans-serif;width:100%;margin:0;padding:0;text-align:center;}
h1 {background-color:#600;color:#fff;padding:20px 0;margin:0;}
a img {border:0;}
td {font-size:11px;}
.image {background-color:#eee;border:1px solid #ddd;border-bottom:1px solid #bbb;padding:5px;}
</style>
</head>
<body>
<h1>FaceMash</h1>
<h2>Кто горячее? Выбирай.</h2>
<center>
<table>
<tr>
<td valign="top" class="image"><a href="rate.php?winner=<?=$images[0]->image_id?>&loser=<?=$images[1]->image_id?>"><img src="http://www.xboxmb.com/images/<?=$images[0]->filename?>" /></a></td>
<td valign="top" class="image"><a href="rate.php?winner=<?=$images[1]->image_id?>&loser=<?=$images[0]->image_id?>"><img src="http://www.xboxmb.com/images/<?=$images[1]->filename?>" /></a></td>
</tr>
<tr>
<td>Won: <?=$images[0]->wins?>, Lost: <?=$images[0]->losses?></td>
<td>Won: <?=$images[1]->wins?>, Lost: <?=$images[1]->losses?></td>
</tr>
<tr>
<td>Score: <?=$images[0]->score?></td>
<td>Score: <?=$images[1]->score?></td>
</tr>
<tr>
<td>Expected: <?=round(expected($images[1]->score, $images[0]->score), 4)?></td>
<td>Expected: <?=round(expected($images[0]->score, $images[1]->score), 4)?></td>
</tr>
</table>
</center>
<h2>Top Rated</h2>
<center>
<table>
<tr>
<? foreach($top_ratings as $key => $image) : ?>
<td valign="top"><img src="http://www.xboxmb.com/images/<?=$image->filename?>" width="70" /></td>
<? endforeach ?>
</tr>
<? /* Remove this to see the scoring
<tr>
<? foreach($top_ratings as $key => $image) : ?>
<td valign="top">Score: <?=$image->score?></td>
<? endforeach ?>
</tr>
<tr>
<? foreach($top_ratings as $key => $image) : ?>
<td valign="top">Performance: <?=$image->performance?></td>
<? endforeach ?>
</tr>
<tr>
<? foreach($top_ratings as $key => $image) : ?>
<td valign="top">Won: <?=$image->wins?></td>
<? endforeach ?>
</tr>
<tr>
<? foreach($top_ratings as $key => $image) : ?>
<td valign="top">Lost: <?=$image->losses?></td>
<? endforeach ?>
</tr>
*/ ?>
</table>
</center>
</body>
</html>
И напоследок пропишем функции: «functions.php»
<? PHP
/ / Вычислить ожидаемый результат%
Ожидается функцию ($ Rb, Ra $) {
возвращает 1 / (1 + ПР (10, ($ $ Rb-Ra) / 400));
}
/ / Вычислить новую оценку winnner
Функция выигрыша ($ оценка, $ ожидалось, $ K = 24) {
вернуть $ оценка + $ K * (1 - $ ожидалось);
}
/ / Вычислить новую счетом проиграл
функция потерь ($ оценка, $ ожидалось, $ K = 24) {
вернуть $ оценка + $ K * (0 - $ ожидалось);
}
>
Заливаем все файлы на хостинг сайта. После этого создаем папку «images», но пока не загружаем в нее фотографии. Залезаем в phpMyAdmin и создаем таблицу:
CREATE TABLE IF NOT EXISTS `battles` (
`battle_id` bigint(20) unsigned NOT NULL auto_increment,
`winner` bigint(20) unsigned NOT NULL,
`loser` bigint(20) unsigned NOT NULL,
PRIMARY KEY (`battle_id`),
KEY `winner` (`winner`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `images` (
`image_id` bigint(20) unsigned NOT NULL auto_increment,
`filename` varchar(255) NOT NULL,
`score` int(10) unsigned NOT NULL default '1500',
`wins` int(10) unsigned NOT NULL default '0',
`losses` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`image_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;;
Отлично, теперь залезаем в MySQL.php и заполняем поля:
$user = "";
$password = "";
$database = "";
$host = ""
Теперь заливаем фотографии в папку images, и «устанавливаем их». Вот и все. Наш собственный Facemash готов к использованию. Если у вас возникнут вопросы — пишите, постараюсь вам помочь. Спасибо за внимание :)