База данных пользователей приложения (ВК IFrame, jQuery)

Готовые уроки IFrame + ВКонтакте API

База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Александр » 15 июл 2010, 22:30

База данных пользователей приложения (ВК IFrame, jQuery)
Iframe, ВКонтакте API, HTML, JavaScript, jQuery, PHP, mysqli, mySQL

Нужны знания PHP, phpMyAdmin, SQL.
Понадобится свой сервер с поддержкой php и mySQL.

Если вы не представляете как делать IFrame приложения для контакта, то сначала попробуйте выполнить этот урок topic721.html

Если вы уже делали подобный урок на флеше - Создание базы пользователей приложения и ведение статистики, то можете заметить, что серверная часть абсолютно одинаковая. Более подробной описание создания базы, в уроке по созданию флеш приложения.

Создаём базу в phpMyAdmin.
  1. CREATE TABLE IF NOT EXISTS `stat` (
  2.   `uid` int(9),
  3.   `last_date` int(10),
  4.   `visits` int(9) DEFAULT '1',
  5.   UNIQUE KEY `uid` (`uid`)
  6. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8;


Способ 1
Подходит если надо обновить запись в базе при простом обращении к странице. Код писать в эту страницу.

1. Пишем в php-файл код.
  1. <?php
  2. // данные доступа к базе данных
  3. $db_host="localhost";       // обычно не нужно изменять
  4. $db_user="user";        // имя пользователя БД
  5. $db_password="pass";        // пароль БД
  6. $db_name = "name";      // имя БД
  7.  
  8. // данные приложения
  9. $app_id = '743131'; // id приложения
  10. $api_secret = 'qwertyuiopasdfghjklzxcvbnm'; // защищенный ключ приложения
  11.  
  12.  
  13. $auth_key  = $_GET['auth_key'];
  14. $viewer_id = $_GET['viewer_id'];
  15.  
  16. $real_key = md5($app_id."_".$viewer_id."_".$api_secret);
  17. if ($auth_key == $real_key){
  18.     // соединение с БД
  19.     $mysqli = new mysqli($db_host, $db_user, $db_password, $db_name);
  20.  
  21.     if (mysqli_connect_errno()) {
  22.         printf("Ошибка соединения: %s\n", mysqli_connect_error());
  23.         exit;
  24.     }
  25.     $mysqli->set_charset("utf8");
  26.  
  27.     // подготовка запроса: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))
  28.     $stmt = $mysqli->prepare("INSERT INTO `stat` (`uid`, `last_date`, `name`) VALUES (?,?,?) ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`=?;");
  29.     $stmt->bind_param('iisi', $viewer_id, time(), $name, time());
  30.    
  31.     // выполнение запроса
  32.     $stmt->execute();
  33.  
  34.     echo "OK";
  35. }
  36. ?>

Это все.

ВАЖНО! Если вы будете расширять функционал без четкого понимания что вы делаете, код может стать уязвимым для взлома.
Обеспечить безопасность кода вы должны самостоятельно. Подробнее читайте в теме Безопасность скриптов, защита от инъекций, XSS (php, sql).

Может быть процесс работы с базой данных вам будет сложно понять сразу, но лучше один раз уделите время и изучите, чтобы больше не останавливаться на этом моменте.

mysql и mysqli - это не одно и то же. Использовать mysql не рекомендуется, т.к. поддержка этого расширения будет убрана из PHP в будущем.

Знак вопроса "?" в функции prepare используется там, где должны быть переданные данные.
Проще будет объяснить на простом запросе. Допустим, что в базу дополнительно было добавлено значение name (строка). Учтите, что на практике, хранить имя пользователя ВКонтакте в базе практически никогда не имеет смысла.
Запрос добавления в базу выглядит так:
  1. $stmt = $mysqli->prepare("INSERT INTO `stat` (`uid`, `last_date`, `name`) VALUES (?,?,?)");

В этом запросе добавляются 3 значения, соответственно в запросе 3 знака вопроса.

Далее данные подставляются на свое место:

Первая строка, в данном случае 'iis', предназначена для того чтобы сообщить функции какие данные ей должны были быть переданы (числа, строки). Три значения передаем, значит и в строке должно быть три символа.

Типы бывают:
i - Все INT типы
d - DOUBLE и FLOAT
b - BLOB
s - Строки и другие типы

Указание типов помогает избежать SQL-инъекции (взлома). Но вам все равно нужно учитывать какие данные передает пользователь. Он может передать данные нужного типа, но на которые вы не рассчитывали.

Чтобы не писать один и тот же код в нескольких файлах, можно вынести данные доступа и функцию соединение с базой в отдельный файл. Для удобства работы, можно создать специальный класс для взаимодействия с базой. Это будет удобнее, но в этом уроке не будет рассказано как это сделать.

Если бы использовали mysql, то код выглядел бы немного проще, но при расширении функционала, он бы значительно усложнился.
 Старый способ
Использовать не рекомендуется.
  1.    // соединение с БД
  2.     mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());
  3.     mysql_select_db($db_name) or die (mysql_error());
  4.     mysql_query("SET NAMES 'utf8'");
  5.  
  6.     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))
  7.     $query = 'INSERT INTO `'.$table_name.'` (`uid`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";';
  8.     $sql = mysql_query($query);

ВНИМАНИЕ! Поддержка функции mysql_query будет удалена из PHP в будущем.
Данное расширение устарело, начиная с версии PHP 5.5.0, и будет удалено в будущем. Используйте вместо него MySQLi или PDO_MySQL. Смотрите также инструкцию MySQL: выбор API и соответствующий FAQ для получения более подробной информации. Альтернативы для данной функции:
mysqli_query()
PDO::query()



Способ 2
Подходит когда нужно обновить запись в базе при совершении какого-то действия, которое можно отловить с помощью JavaScript

1. В PHP коде из первого способа заменяем
  1. $auth_key  = $_GET['auth_key'];
  2. $viewer_id = $_GET['viewer_id'];

на
  1. $auth_key  = $_POST['auth_key'];
  2. $viewer_id = $_POST['viewer_id'];

Сохраняем этот файл как stat.php

2. Создаём html файл.
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>Untitled Document</title>
  6. <!-- подключаем jQuery -->
  7. <script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
  8.  
  9. <script src="http://vkontakte.ru/js/api/xd_connection.js?2" type="text/javascript"></script>
  10.  
  11. <script type="text/javascript" charset="cp1251" >
  12. $(document).ready(function(){ // когда страница загрузится
  13.     VK.init(function() {
  14.         // получаем flashVars
  15.         var parts=document.location.search.substr(1).split("&");
  16.             var flashVars={}, curr;
  17.             for (i=0; i<parts.length; i++) {
  18.                 curr = parts[i].split('=');
  19.                 flashVars[curr[0]] = curr[1];
  20.             }
  21.    
  22.         // вытаскиваем viewer_id и auth_key из полученных переменных
  23.         var viewer_id = flashVars['viewer_id'];
  24.         var auth_key = flashVars['auth_key'];
  25.  
  26.     // отправляем post запрос, передаём viewer_id и auth_key
  27.     $.post('http://flapps.ru/iframe_stat/iframe_stat.php',  // заменяем на адерс своего скрипта
  28.             { "viewer_id": viewer_id, "auth_key": auth_key },   // передаваемые значения
  29.             function(data){         // функция после выполнения передачи данных
  30.                 $('#result').html(data);
  31.             });
  32.     });
  33.  
  34. });
  35. </script>
  36. </head>
  37. <body>
  38. <div id="result">http://flapps.ru</div>
  39. </body>
  40. </html>


Файл http://code.jquery.com/jquery-1.4.2.min.js

4. Загружаем файлы на сервер.

5. Настраиваем приложение.
Включено
Тип: Iframe
Адрес IFrame: Ссылка на созданный html файл на вашем сервере. Например: http://flapps.ru/vk.html

6. Всё готово.

За это сообщение автора Александр поблагодарили - 6:
boombast1k, donatas, Joxter, sakogr, wypaa, Влад
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Чтобы убрать блок с рекламой, зарегистрируйтесь на форуме или войдите.

Google
 



Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Влад » 15 июл 2010, 23:39

:D у меня не получилось!, библиотеку скачал, всё заменил и всё сделал! :cry: и оно не заработало...
https://hrefs.ru - сервис крауд маркетинга №1 в 2019 году
Аватара пользователя
Влад
Модератор
Модератор
 
Сообщения: 654
Зарегистрирован: 29 апр 2010, 22:24
Благодарил (а): 26 раз.
Поблагодарили: 58 раз.

Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Александр » 17 июл 2010, 18:52

Влад
Подробнее что именно делал и что не заработало? Может базу создал не правильно...
Пиши ссылку на приложение и давай доступ к нему.
Аватара пользователя
Александр
Создатель сайта
Создатель сайта
 
Автор темы
Сообщения: 4574
Зарегистрирован: 27 сен 2009, 16:45
Откуда: Санкт-Петербург
Благодарил (а): 126 раз.
Поблагодарили: 771 раз.

Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Влад » 23 июл 2010, 16:49

Разобрался, супер пупер! Теперь можно пользоваться библиотекой jQuery ;) ;) ;) ;)
https://hrefs.ru - сервис крауд маркетинга №1 в 2019 году
Аватара пользователя
Влад
Модератор
Модератор
 
Сообщения: 654
Зарегистрирован: 29 апр 2010, 22:24
Благодарил (а): 26 раз.
Поблагодарили: 58 раз.

Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Doker » 28 июл 2010, 21:14

Возник вопрос! Срочно!!! Как в скрипте(!) проверять на уже существующую строку в базе?.
Ну типа как Select * from blala where uids=1
my icq numbers: 403305362 и 484613
Аватара пользователя
Doker
Модератор
Модератор
 
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53
Благодарил (а): 35 раз.
Поблагодарили: 52 раз.

Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Doker » 28 июл 2010, 22:45

Не сохраняет почемуто(
my icq numbers: 403305362 и 484613
Аватара пользователя
Doker
Модератор
Модератор
 
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53
Благодарил (а): 35 раз.
Поблагодарили: 52 раз.

Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение bodnar » 29 июл 2010, 03:46

Doker писал(а):Select * from blala where uids=1

ну так и проверяй, в чем проблема?
Обязательно к прочтению: ActionScript 3.0 Ошибки среды выполнения
Аватара пользователя
bodnar
Модератор
Модератор
 
Сообщения: 1399
Зарегистрирован: 03 апр 2010, 06:41
Благодарил (а): 16 раз.
Поблагодарили: 185 раз.

Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Doker » 30 июл 2010, 12:29

Ее...у мя получилось!!
Последний раз редактировалось Doker 30 июл 2010, 12:36, всего редактировалось 1 раз.
my icq numbers: 403305362 и 484613
Аватара пользователя
Doker
Модератор
Модератор
 
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53
Благодарил (а): 35 раз.
Поблагодарили: 52 раз.

Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Doker » 30 июл 2010, 12:58

bodnar писал(а):
Doker писал(а):Select * from blala where uids=1

ну так и проверяй, в чем проблема?

я имею ввиду прям в html файле как проверить

в пределах <script>
my icq numbers: 403305362 и 484613
Аватара пользователя
Doker
Модератор
Модератор
 
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53
Благодарил (а): 35 раз.
Поблагодарили: 52 раз.

Re: База данных пользователей приложения (ВК IFrame, jQuery)

Сообщение Doker » 30 июл 2010, 14:14

Все!!!! Сделал авторизацию в своей онлайн игре!!!
my icq numbers: 403305362 и 484613
Аватара пользователя
Doker
Модератор
Модератор
 
Сообщения: 1026
Зарегистрирован: 07 май 2010, 18:53
Благодарил (а): 35 раз.
Поблагодарили: 52 раз.

След.

Вернуться в Уроки IFrame ВКонтакте



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

cron