Iframe, ВКонтакте API, HTML, JavaScript, jQuery, PHP, mysqli, mySQL
Нужны знания PHP, phpMyAdmin, SQL.
Понадобится свой сервер с поддержкой php и mySQL.
Если вы не представляете как делать IFrame приложения для контакта, то сначала попробуйте выполнить этот урок http://flapps.ru/forum/topic721.html
Если вы уже делали подобный урок на флеше - Создание базы пользователей приложения и ведение статистики, то можете заметить, что серверная часть абсолютно одинаковая. Более подробной описание создания базы, в уроке по созданию флеш приложения.
Создаём базу в phpMyAdmin.
Код: Выделить всё
CREATE TABLE IF NOT EXISTS `stat` ( `uid` int(9), `last_date` int(10), `visits` int(9) DEFAULT '1', UNIQUE KEY `uid` (`uid`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Подходит если надо обновить запись в базе при простом обращении к странице. Код писать в эту страницу.
1. Пишем в php-файл код.
Код: Выделить всё
<?php// данные доступа к базе данных$db_host="localhost"; // обычно не нужно изменять$db_user="user"; // имя пользователя БД$db_password="pass"; // пароль БД$db_name = "name"; // имя БД // данные приложения$app_id = '743131'; // id приложения$api_secret = 'qwertyuiopasdfghjklzxcvbnm'; // защищенный ключ приложения $auth_key = $_GET['auth_key'];$viewer_id = $_GET['viewer_id']; $real_key = md5($app_id."_".$viewer_id."_".$api_secret);if ($auth_key == $real_key){ // соединение с БД $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name); if (mysqli_connect_errno()) { printf("Ошибка соединения: %s\n", mysqli_connect_error()); exit; } $mysqli->set_charset("utf8"); // подготовка запроса: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1)) $stmt = $mysqli->prepare("INSERT INTO `stat` (`uid`, `last_date`, `name`) VALUES (?,?,?) ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`=?;"); $stmt->bind_param('iisi', $viewer_id, time(), $name, time()); // выполнение запроса $stmt->execute(); echo "OK";}?>
ВАЖНО! Если вы будете расширять функционал без четкого понимания что вы делаете, код может стать уязвимым для взлома.
Обеспечить безопасность кода вы должны самостоятельно. Подробнее читайте в теме Безопасность скриптов, защита от инъекций, XSS (php, sql).
Может быть процесс работы с базой данных вам будет сложно понять сразу, но лучше один раз уделите время и изучите, чтобы больше не останавливаться на этом моменте.
mysql и mysqli - это не одно и то же. Использовать mysql не рекомендуется, т.к. поддержка этого расширения будет убрана из PHP в будущем.
Знак вопроса "?" в функции prepare используется там, где должны быть переданные данные.
Проще будет объяснить на простом запросе. Допустим, что в базу дополнительно было добавлено значение name (строка). Учтите, что на практике, хранить имя пользователя ВКонтакте в базе практически никогда не имеет смысла.
Запрос добавления в базу выглядит так:
Код: Выделить всё
$stmt = $mysqli->prepare("INSERT INTO `stat` (`uid`, `last_date`, `name`) VALUES (?,?,?)");
Далее данные подставляются на свое место:
Код: Выделить всё
$stmt->bind_param('iis', $viewer_id, time(), $name);
Типы бывают:
i - Все INT типы
d - DOUBLE и FLOAT
b - BLOB
s - Строки и другие типы
Указание типов помогает избежать SQL-инъекции (взлома). Но вам все равно нужно учитывать какие данные передает пользователь. Он может передать данные нужного типа, но на которые вы не рассчитывали.
Чтобы не писать один и тот же код в нескольких файлах, можно вынести данные доступа и функцию соединение с базой в отдельный файл. Для удобства работы, можно создать специальный класс для взаимодействия с базой. Это будет удобнее, но в этом уроке не будет рассказано как это сделать.
Если бы использовали mysql, то код выглядел бы немного проще, но при расширении функционала, он бы значительно усложнился.
Способ 2
Подходит когда нужно обновить запись в базе при совершении какого-то действия, которое можно отловить с помощью JavaScript
1. В PHP коде из первого способа заменяем
Код: Выделить всё
$auth_key = $_GET['auth_key'];$viewer_id = $_GET['viewer_id'];
Код: Выделить всё
$auth_key = $_POST['auth_key'];$viewer_id = $_POST['viewer_id'];
2. Создаём html файл.
Код: Выделить всё
<!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>Untitled Document</title><!-- подключаем jQuery --><script src="js/jquery-1.4.2.min.js" type="text/javascript"></script> <script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script> <script type="text/javascript" charset="cp1251" >$(document).ready(function(){ // когда страница загрузится VK.init(function() { // получаем flashVars var parts=document.location.search.substr(1).split("&"); var flashVars={}, curr; for (i=0; i<parts.length; i++) { curr = parts[i].split('='); flashVars[curr[0]] = curr[1]; } // вытаскиваем viewer_id и auth_key из полученных переменных var viewer_id = flashVars['viewer_id']; var auth_key = flashVars['auth_key']; // отправляем post запрос, передаём viewer_id и auth_key $.post('http://flapps.ru/iframe_stat/iframe_stat.php', // заменяем на адерс своего скрипта { "viewer_id": viewer_id, "auth_key": auth_key }, // передаваемые значения function(data){ // функция после выполнения передачи данных $('#result').html(data); }); }); });</script></head><body><div id="result">http://flapps.ru</div></body></html>
4. Загружаем файлы на сервер.
5. Настраиваем приложение.
Включено
Тип: Iframe
Адрес IFrame: Ссылка на созданный html файл на вашем сервере. Например: http://flapps.ru/vk.html
6. Всё готово.