Проблема с занесением данных в базу

Обсуждение и помощь по вопросам взаимодействия с ВКонтакте API в IFrame-приложениях (JavaScript, PHP и т.д)
CaptainOS
Сообщения: 14
Зарегистрирован: 29 мар 2013, 11:39

Проблема с занесением данных в базу

Сообщение CaptainOS »

Не получается добавить имя пользователя в базу. Подскажите пожалуйста, где ошибка?

Использую следующий код:

PHP:

Код: Выделить всё

$auth_key  = $_POST['auth_key'];$viewer_id = $_POST['viewer_id'];$first_name = $_POST['first_name']; $real_key = md5($app_id."_".$viewer_id."_".$api_secret);if ($auth_key == $real_key){    // соединение с БД    mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))    $query = 'INSERT INTO `'.$table_name.'` (`uid`, `last_date`, `first_name`) VALUES ("'.$viewer_id.'","'.time().'","'.$first_name.'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";';    $sql = @mysql_query($query);    echo "OK";}
JS (внутри HTML):

Код: Выделить всё

<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'];             // выполняем запрос получения профиля      VK.api("getProfiles", {uids:viewer_id,fields:"photo_big"}, function(data) {          $.post('http://t1.test1.ru/iframe_stat.php',         { "viewer_id": viewer_id, "auth_key": auth_key, "first_name": data.response[0].first_name }        function(data){        $('#result').html(data)        });    });    });});</script>
Буду очень благодарен за помощь!
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Проблема с занесением данных в базу

Сообщение Alazaur »

Переменная $table_name не определена.
UPD: Да и $db_host, $db_user, $db_password, $db_name тоже
CaptainOS
Сообщения: 14
Зарегистрирован: 29 мар 2013, 11:39

Re: Проблема с занесением данных в базу

Сообщение CaptainOS »

2Alazaur

Они определены, я просто эту часть кода не приводил. Полностью весь php-код выглядит так:

Код: Выделить всё

<?php// данные доступа к базе данных$db_host="localhost";$db_user="test";$db_password="test";$db_name = "test";$table_name = "stat"; // данные приложения$app_id = '5555555'; // id приложения$api_secret = 'rtyueEZptugeIqzcsY10'; // защищенный ключ приложения  $auth_key  = $_POST['auth_key'];$viewer_id = $_POST['viewer_id'];$first_name = $_POST['first_name']; $real_key = md5($app_id."_".$viewer_id."_".$api_secret);if ($auth_key == $real_key){    // соединение с БД    mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'");     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))    $query = 'INSERT INTO `'.$table_name.'` (`uid`, `last_date`, `first_name`) VALUES ("'.$viewer_id.'","'.time().'","'.$first_name.'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";';    $sql = @mysql_query($query);    echo "OK";}?>
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Проблема с занесением данных в базу

Сообщение Alazaur »

Сделайте так:

Код: Выделить всё

<?php// данные доступа к базе данных$db_host="localhost";$db_user="test";$db_password="test";$db_name = "test";$table_name = "stat"; // данные приложения$app_id = '5555555'; // id приложения$api_secret = 'rtyueEZptugeIqzcsY10'; // защищенный ключ приложения  $auth_key  = $_POST['auth_key'];$viewer_id = $_POST['viewer_id'];$first_name = $_POST['first_name']; $real_key = md5($app_id."_".$viewer_id."_".$api_secret);if ($auth_key == $real_key){    // соединение с БД    mysql_connect($db_host, $db_user, $db_password) or die (mysql_error());    mysql_select_db($db_name) or die (mysql_error());    mysql_query("SET NAMES 'utf8'") or die (mysql_error());     // Выполняем запрос: если пользователя с таким id ещё нет в БД, то добавляем, если есть, то обновляем запись, прибавляя одно посещение (`visits` = (`visits`+1))    $query = 'INSERT INTO `'.$table_name.'` (`uid`, `last_date`, `first_name`) VALUES ("'.$viewer_id.'","'.time().'","'.$first_name.'") ON DUPLICATE KEY UPDATE  `visits` = (`visits`+1), `last_date`="'.time().'";';    $sql = mysql_query($query) or die(mysql_error());    echo "OK";} else exit("Error! auth_key != real_key");?>
И все скрытое сразу станет явным.
Если не поможет то вооружитесь Charlies или плагином для браузера например HttpFox, чтобы посмотреть уходят ли вообще запросы.
CaptainOS
Сообщения: 14
Зарегистрирован: 29 мар 2013, 11:39

Re: Проблема с занесением данных в базу

Сообщение CaptainOS »

Спасибо! Сейчас попробую.
CaptainOS
Сообщения: 14
Зарегистрирован: 29 мар 2013, 11:39

Re: Проблема с занесением данных в базу

Сообщение CaptainOS »

Проверки в PHP-коде не помогли, а Charles выдает следующую картинку:
Изображение
Serge
WEB Team
WEB Team
Сообщения: 520
Зарегистрирован: 04 мар 2011, 21:55

Re: Проблема с занесением данных в базу

Сообщение Serge »

CaptainOS
вкладку Response смотрите
CaptainOS
Сообщения: 14
Зарегистрирован: 29 мар 2013, 11:39

Re: Проблема с занесением данных в базу

Сообщение CaptainOS »

Во вкладке Response показывает целиком весь мой 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="utf-8" >$(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'];             // выполняем запрос получения профиля      VK.api("getProfiles", {uids:viewer_id,fields:"first_name"}, function(data) {          $.post('http://alaria.test1.ru/iframe_stat.php',         { "viewer_id": viewer_id, "auth_key": auth_key, "first_name": data.response[0].first_name },        function(data){            $('#result').html(data);        });    });    });});</script></head><body><div id="result">http://flapps.ru</div></body></html>
CaptainOS
Сообщения: 14
Зарегистрирован: 29 мар 2013, 11:39

Re: Проблема с занесением данных в базу

Сообщение CaptainOS »

Проблема решена! Все оказалось гораздо проще - нужно было всего-лишь выставить в настройках приложения статус "Приложение включено и видно всем".
Alazaur
Разработчик
Разработчик
Сообщения: 1001
Зарегистрирован: 16 окт 2011, 20:25

Re: Проблема с занесением данных в базу

Сообщение Alazaur »

:lol:
Но ошибка изначально у вас все же была, первый пост JS строка 19 после передачи объекта в функцию не стоит запятая. Видимо вы ее уже исправили, в вашем примере кода из предпоследнего сообщения ее уже нет. :D
Ответить