What is new?
8.12.10 Добавлен вывод аватарки, имени, фамилии. Сделана защита от подмены результатов.
Cоздаем новый AS 3.0 Flash file.
Создаем кнопку change_score.
Создаем TileList с именем top_list.
Создаем текстовое поле change_score_tf.
Создаем файл change_score.php
Содержание файла:
Код: Выделить всё
<?php $db_host="localhost"; $db_user="1111"; $db_password="111111"; $db_name = "11111"; $table_name = "stat_reit"; $auth_key = $_POST['auth_key'];$user_id = $_POST['viewer_id'];$new_score = $_POST['new_score'];$api_id="111111";$new_score_sig = $_POST['new_score_sig']; 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'"); $real_key = md5("$new_score STbfPJfRhj"); if ($new_score_sig == $real_key){ $query = 'UPDATE `'.$table_name.'` SET score="'.$new_score.'" where `user_id` ="'.$user_id.'"'; $sql = @mysql_query($query); echo "OK. Score changed. New score: $new_score . Uid= $user_id"; } else {echo "error sig"; } ?>
Содержание файла:
Код: Выделить всё
<?php$db_host="localhost"; $db_user="1111"; $db_password="1111110"; $db_name = "1111"; $table_name = "stat_reit"; 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'"); $query ='SELECT * from `'.$table_name.'` order by score desc limit 100';$sql = @mysql_query($query); echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"; echo "<response>"; for ($i=0; $i<mysql_num_rows($sql);$i++){ $r = mysql_fetch_array($sql); echo"<user>"; echo"<user_id>".$r['user_id']." </user_id>"; echo"<score>".$r['score']." </score>"; echo"</user>";}echo "</response>"; ?>
Код: Выделить всё
<?php$db_host="localhost"; $db_user="11111"; $db_password="11111"; $db_name = "111111"; $table_name = "stat_reit"; // данные приложения$app_id = 'id'; // id приложения$api_secret = 'secret'; // защищенный ключ приложения с вкладки платежи $auth_key = $_POST['auth_key'];$viewer_id = $_POST['viewer_id']; $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.'` (`user_id`, `last_date`) VALUES ("'.$viewer_id.'","'.time().'") ON DUPLICATE KEY UPDATE `visits` = (`visits`+1), `last_date`="'.time().'";'; $sql = @mysql_query($query); echo "OK";}?>
Код: Выделить всё
DROP TABLE IF EXISTS `stats_reit`;CREATE TABLE IF NOT EXISTS `stat_reit` ( `id` INT(9) NOT NULL AUTO_INCREMENT, `user_id` INT(9) DEFAULT NULL, `last_date` INT(10) DEFAULT NULL, `visits` INT(9) DEFAULT '1', `score` DOUBLE DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `uid` (`user_id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 PACK_KEYS=0 AUTO_INCREMENT=1 ;
Код: Выделить всё
package { import flash.net.*; import flash.display.*; import flash.events.*; import flash.text.*; import flash.utils.*; import flash.net.*; import flash.system.Security; import flash.system.SecurityPanel; import fl.controls.List; import fl.events.ListEvent; import vk.*; import flash.system.Security; public class Main extends Sprite { private var api_id:Number=1111111;// id вашего приложения private var api_secret:String="11111";// секретный ключ private var viewer_id:Number; private var sig:String; private var uid:String; private var xmlloader:URLLoader = new URLLoader(); private var wrapper:Object; private var api:VkApiNode; private var url_loader7:URLLoader; private var url_request7:URLRequest; private var server_url; private var query7:String; public function Main():void { this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); } public function onAddedToStage(e:Event):void { Security.allowDomain("*"); stage.dispatchEvent(new Event(Event.DEACTIVATE)); stage.dispatchEvent(new Event(Event.ACTIVATE)); wrapper=Object(parent.parent); if (wrapper.application.parameters.is_app_user==1) { } else { wrapper.external.showInstallBox(); } server_url=wrapper.application.parameters.api_url; viewer_id=wrapper.application.parameters.viewer_id; change_score.addEventListener(MouseEvent.CLICK, change_scoreClick); var stat_loader:URLLoader = new URLLoader(); var stat_request:URLRequest=new URLRequest("http://xg-online.net/rating/stat.php");// заменяем на ссылку к вашему скрипту stat_request.method=URLRequestMethod.POST; // добавление параметров в запрос var stat_vars:URLVariables = new URLVariables(); stat_vars['auth_key']=wrapper.application.parameters.auth_key;// auth_key из FlashVars stat_vars['viewer_id']=wrapper.application.parameters.viewer_id;// ID просматривающего приложение stat_request.data=stat_vars; // выполнение запроса stat_loader.load(stat_request); stat_loader.addEventListener(Event.COMPLETE, onCompletexml); } function onCompletexml(event:Event):void { var xmlLoader:URLLoader = new URLLoader(); var requestloader:URLRequest=new URLRequest("http://xg-online.net/rating/rating.php"); xmlloader.load(requestloader); xmlloader.addEventListener(Event.COMPLETE, onCompletexml1); } function onCompletexml1(event:Event):void { var xmlData:XML=new XML(xmlloader.data); var all_friends:Array=new Array ; //all_friends.push(viewer_id); var m:uint; for (m=0; m<20; m++) { all_friends.push(xmlData.user[m].user_id.toString()); } // получаем профили друзей, используя метод getProfiles // ПРИМЕЧАНИЕ! Если друзей более 1000, то этот запрос нужно будет поделить на части, из-за ограничений метода getProfiles var fields:Array=new Array ; fields=['first_name,last_name,photo_medium'];// перечисленные через запятую поля, необходимые для получения getProfiles(all_friends,fields); } function getProfiles(uids:Array,fields:Array):void {// функция получения профилей api=new VkApiNode(viewer_id,api_id,api_secret); query7=api.getProfiles(uids,fields); url_request7=new URLRequest(query7); url_loader7=new URLLoader ; url_loader7.addEventListener(Event.COMPLETE,profilesLoaded); url_loader7.load(url_request7); } function profilesLoaded(event:Event):void { var xmlData1:XML=new XML(xmlloader.data); var responseFriendsProfiles:XML=new XML(url_loader7.data); var friends=''; var k:uint; for (k=0; k<100; k++) { top_list.addItem({label:responseFriendsProfiles.user[k].first_name.toString()+/*' '+responseFriendsProfiles.user[k].last_name.toString()+*/" "+xmlData1.user[k].score.toString(), source:responseFriendsProfiles.user[k].photo_medium.toString(), data:responseFriendsProfiles.user[k].uid.toString()}); } } private function change_scoreClick(e: MouseEvent):void { var score_loader:URLLoader = new URLLoader(); var score_request:URLRequest=new URLRequest("http://xg-online.net/rating/change_score.php");// заменяем на ссылку к вашему скрипту score_request.method=URLRequestMethod.POST; var score_vars:URLVariables = new URLVariables(); score_vars['new_score']=change_score_tf.text; score_vars['new_score_sig']=MD5.encrypt(change_score_tf.text+" "+api_secret); score_vars['viewer_id']=wrapper.application.parameters.viewer_id; score_vars['auth_key']=wrapper.application.parameters.auth_key; score_request.data=score_vars; score_loader.load(score_request); } }}
Вот что у вас должно получиться:
Исходник: