Передача переменных между страницами IFrame (php)

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

Передача переменных между страницами IFrame (php)

Сообщение GORDIY » 10 окт 2013, 00:38

Итак, начьнемс) ;)

При первом открытии (запуске) IFrame приложения контакт передает в него кучу переменных которые можно, и очень удобно использовать в своем приложении.

Но при этом существует одна немаловажная проблема: При переходе между страницами приложения переменные уже не передаются..

На форуме уже есть тема с решением данной проблемы http://flapps.ru/forum/topic1117.html, но так как я как и многие другие только изучаю PHP описанный там способ Показался мне слишком громоздким и сложноватым..
Перечитывая кучи (флуда) комментов на разных форумах из кучи шлака нашел скомбинировал и пришел к болие легкому решению даной задачи

Нам понадобится всего пару строчек кода и начальные знания PHP

Создаем файл start.php с следуйщим кодом:
  1.  
  2. <?php
  3. session_start(); // включаем сесии
  4. $_SESSION = $_GET; // записываем переменные в сесию
  5.  
  6. /*
  7. Тут можно добавить код, который будет вести статистику, добавлять в базу нового пользователя и т.д.
  8. */
  9.  
  10. header( 'Location: index.php' );  // Переадресация на главную страницу приложения
  11. ?>
  12.  


В файле index.php в самом начале скрипта добавим:
  1.  
  2. <?php
  3.  session_start(); //включаем сесии
  4.  
  5.  
  6. //дальше ваш код
  7.  
  8.  
  9. ?>
  10.  


Теперь идем в настройки приложения вконтакте и в строке "адрес приложения" указываем адрес: http://WWW.ваш_сайт.ru/start.php

Вот собственно и все, просто и красиво 8-)

Дальше в любом месте вы можете вытянуть нужные вам даные ну например вот так:


Все)


ЛОВИТЕ МЕГА БОНУС :twisted:

Заносим пользователя в базу данных:

И так:

1. Создаём базу в phpMyAdmin.
  1.  
  2. CREATE TABLE IF NOT EXISTS `user` (
  3.   `uid` int(20) NOT NULL,
  4.   `first_name` varchar(30) NOT NULL,
  5.   `last_name` varchar(30) NOT NULL,
  6.   `data_reg` date NOT NULL,
  7.   `time_reg` time NOT NULL,
  8.   `data_visit` date NOT NULL,
  9.   `time_visit` time NOT NULL,
  10.   `visits` int(11) NOT NULL DEFAULT '1',
  11.   PRIMARY KEY (`uid`)
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  13.  



Теперь мы имеем таблицу с такими полями:
uid - ИД пользователя
first_name - имя пользователя
last_name - фамилия
data_reg - дата регистрации (первого входа в приложение)
time_reg - время регистрации (первого входа в приложение)
data_visit - Дата последнего входа в приложение
time_visit - время последнего входа в приложение
visits - количество посещений (запусков) приложения


2. Создаём php-файл Который проверяет есть ли пользователь с таким ид в базе данных:
если есть то обновляем дату и время последнего визита и добавляем 1 к посещениям, если нет заносим его в базу данных

Файл start.php
  1.  
  2. <?php
  3. session_start();
  4. $_SESSION = $_GET;
  5.  
  6. ////////////////////////////////////////////////////////
  7.  
  8. $db_host='localhost';  // имя хоста сервера базы данных   обычно не нужно изменять
  9. $db_database="name";  //имя базы данных
  10. $db_username="root";       //имя пользователя БД
  11. $db_password="";      // пароль
  12. $table_name = "user"; // имя таблицы статистики. Если вы не меняли его в запросе, создающем БД, то и здесь менять его не надо
  13.  
  14.  
  15.  $viewer_id = $_GET['viewer_id']; //Записываем ИД пользователя в переменную $viewer_id
  16.  
  17.  
  18. //------------------ Получаем ИМЯ и ФАМИЛИЮ -------------------------------//
  19. $resp = file_get_contents('https://api.vk.com/method/users.get?user_id='.$viewer_id.'&v=5.2');  // Посылаем запрос к API Вконтакте  и записываем ответ в переменную $resp
  20. $data = json_decode($resp, true);  //Декодируем получиный ответ и записываем в переменную $data
  21.  foreach($data["response"] as $response); //Получиные данные записываем в масив $response
  22.  
  23.   $first_name = $response['first_name']; // Записываем ИМЯ в переменную   $first_name
  24.   $last_name = $response['last_name'];   //Записываем ФАМИЛИЮ в переменную  $last_name
  25. //-----------------------------------------------------------------------------//
  26.  
  27.  
  28. if ($viewer_id){
  29.     // соединение с БД
  30.     mysql_connect($db_host, $db_username, $db_password) or die (mysql_error());   // подключиться к базе данных
  31.     mysql_select_db($db_database) or die (mysql_error());  //выбираем имя базы данных
  32.  
  33.     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, обновляя Время  (data_visit = NOW(), time_visit = NOW()) и прибавляя  одно посещение (`visits` = (`visits`+1))
  34.     $query = 'INSERT INTO '.$table_name.' (uid, first_name, last_name, data_reg, time_reg, data_visit, time_visit) VALUES ("'.$viewer_id.'", "'.$first_name.'", "'.$last_name.'", NOW(), NOW(), NOW(), NOW() ) ON DUPLICATE KEY UPDATE  visits = (visits+1),  data_visit = NOW(), time_visit = NOW()';
  35.     $sql = mysql_query($query);
  36. }
  37.  
  38. //////////////////////////////////////////////////////////////////////////
  39.  
  40. header( 'Location: index.php' );  // Переадресация на главную страницу приложения
  41. ?>
  42.  


Конечно с временем и датой можно было поступить по другому да и имя и фамилию можно было не записывать, но мне нравится именно так 8-)

Вроде все, надеюсь ничего не забыл. Благодарю за внимание, приятного пользования ;) :geek:
GORDIY

 
Автор темы
Сообщения: 28
Зарегистрирован: 05 окт 2013, 19:11
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.

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

Google
 



Re: Передача переменных между страницами IFrame (php)

Сообщение sasha^ » 10 окт 2013, 10:09

GORDIY, урок норм)) но это я и так знал... но многим, уверен, поможет! молодец ;)
1) ну и кстати лучше писать в куки, а не сессии, чтобы из js иметь доступ(вдруг там нужно...)
2) время, кстати, в 100500 раз лучше и нужно писать! в UNIX, а не YYYY-MM-DD HH:MM:SS и тогда всего будет 2 поля, и да, непонятно почему их 4=)..
3) имя и фамилию никто не пишет в бд! это глупость.. нужно их получать через api, тем более что users.get открытый метод...
4) использовать без необходимости методы с сервера - тоже тупо... только если уж не можно(нужно 100% проверить юзера), тогда и использовать...
5) нету проверки auth_key а значит я могу передать любой айди(и не свой) и все будет ок:)
6) все данные нужно фильтровать, например, viewer_id не мешало бы проверить на то что оно число, иначе будет sql-инъекция... $viewer_id = intval($_GET['viewer_id']); // обезопасили себя...(привели его к числу..)
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: Передача переменных между страницами IFrame (php)

Сообщение Serge » 10 окт 2013, 19:28

1) а лучше MVC
3) я пишу. Чтобы пользователь мог указать реальные данные, а не те, что в АПИ. Это важно.

А больше нечего ответить :)
http://sevenlines.com.ua - разработка и продвижение сайтов
Serge
WEB Team
WEB Team
 
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55
Благодарил (а): 2 раз.
Поблагодарили: 65 раз.

Re: Передача переменных между страницами IFrame (php)

Сообщение sasha^ » 11 окт 2013, 07:53

Serge,
1) а при чем тут mvc? :) это же вроде model-view-controller... т.е. принцип создания приложений... а у нас вопрос о том куда лучше сохранять $_GET, в сессии или куки)) или ты о том что это должно быть отдельной частью, относящийся к логике?)
3) ну так тут пишется только из API, а значит смысла нет... а когда реальные данные - конечно есть смысл, но здесь совсем другое... ток главное не слишком много данных просить)):
7. Использовать персональные данные пользователей без получения разрешения пользователей. В любом случае запрещается запрашивать у пользователей такие персональные данные, как email, пароли, номера телефонов, паспортные данные и другую личную информацию.
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: Передача переменных между страницами IFrame (php)

Сообщение Serge » 11 окт 2013, 08:02

Не совсем корректно наверное сказать просто MVC, действительно. В случае с MVC обработка идет через один файл - index.php, правда при переходах всё равно он будет вызывать заново и теряться данные... Но можно "приспособить" это дело таким образом, что все данные будут передаваться ajax-ом, а на выходе просто менять содержимое страницы.
Не знаю почему, но именно такой метод мне показался наиболее удобным. Правда у меня не было приложений с больше чем 5ю разнотипными страницами...

А на счет сессий и кук - куки плохо, они могут быть выключены. Сессии - лучше, я не вдавался в подробности их работы (хотя использую :D), но у них же время жизни ограничено и в теории, если приложение открыто, но активности никакой нет - она умрёт.
http://sevenlines.com.ua - разработка и продвижение сайтов
Serge
WEB Team
WEB Team
 
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55
Благодарил (а): 2 раз.
Поблагодарили: 65 раз.

Re: Передача переменных между страницами IFrame (php)

Сообщение sasha^ » 11 окт 2013, 08:31

Serge, насчет кук согласен... но сессии, если включены куки хранят свои данные именно там, а если нет - в строке запроса(get)... другими словами куки тоже норм.. темболее у всех юзеров ВК включены куки! т.к. и вк туда сохраняет данные... потому тут лучше не спорить)))куки используют все магазины для корзины и еще много разных сайтов(популярный), а точнее говоря почти все... потому это проблемы чела если они не включены, но именно в ВК они будут включены!) :)
sasha^

 
Сообщения: 711
Зарегистрирован: 10 сен 2012, 16:52
Благодарил (а): 1 раз.
Поблагодарили: 136 раз.

Re: Передача переменных между страницами IFrame (php)

Сообщение GORDIY » 13 окт 2013, 14:41

sasha^ писал(а): время, кстати, в 100500 раз лучше и нужно писать! в UNIX, а не YYYY-MM-DD HH:MM:SS и тогда всего будет 2 поля, и да, непонятно почему их 4=)

А как ты храниш Время в UNIX? Тоесть какой тип даных и как заносиш в таблицу? Предпологаю что можно в инт но мне чтото это несовсем нравится, пробовал в TIMESTAMP но он пишет дату в формате 2013-10-13 10:31:37 а как исправить не нашол, хотя многие пишут что он пишет и в UNIX...
GORDIY

 
Автор темы
Сообщения: 28
Зарегистрирован: 05 окт 2013, 19:11
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.

Re: Передача переменных между страницами IFrame (php)

Сообщение Serge » 13 окт 2013, 14:47

GORDIY
это пхп май админ рисует таймстамп в виде даты, при выборке всё будет нормально
http://sevenlines.com.ua - разработка и продвижение сайтов
Serge
WEB Team
WEB Team
 
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55
Благодарил (а): 2 раз.
Поблагодарили: 65 раз.

Re: Передача переменных между страницами IFrame (php)

Сообщение GORDIY » 13 окт 2013, 15:19

Serge писал(а):это пхп май админ рисует таймстамп в виде даты, при выборке всё будет нмально
При выборке дата тоже рисуетсяор как [4] => 2013-10-13 10:31:37
GORDIY

 
Автор темы
Сообщения: 28
Зарегистрирован: 05 окт 2013, 19:11
Благодарил (а): 5 раз.
Поблагодарили: 0 раз.

Re: Передача переменных между страницами IFrame (php)

Сообщение Serge » 13 окт 2013, 15:29

GORDIY
не может быть. TIMESTAMP использую всюду, при выборке в php выдает число.
http://sevenlines.com.ua - разработка и продвижение сайтов
Serge
WEB Team
WEB Team
 
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55
Благодарил (а): 2 раз.
Поблагодарили: 65 раз.

След.

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



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

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

cron