如何在Flash二十一点游戏中调用PHP获取的用户SQL数据库积分
解决Flash Blackjack游戏调用用户SQL积分的问题
我来帮你搞定这个事儿——要让Flash游戏拿到数据库里的用户积分,关键是让Flash通过HTTP请求和你的PHP脚本通信,具体步骤拆解如下:
1. 完善你的PHP接口(确保输出可被Flash解析的格式)
首先得把你的PHP脚本调整成返回JSON格式的响应,这样Flash能轻松解析。另外,一定要用预处理语句避免SQL注入,这是安全刚需:
<?php session_start(); require('../../../php/config.php'); // 指定返回内容为JSON,方便Flash解析 header('Content-Type: application/json'); $userPoints = 0; if (!empty($_SESSION['pseudo'])) { // 用PDO预处理语句,彻底避免SQL注入风险 $stmt = $db->prepare("SELECT points FROM membres WHERE id = ?"); $stmt->execute([$_SESSION['id']]); $result = $stmt->fetch(PDO::FETCH_ASSOC); if ($result) { $userPoints = $result['points']; } } // 输出JSON格式的积分数据 echo json_encode(['points' => $userPoints]); ?>
2. Flash端(AS3)请求并解析积分
Flash本身不能直接连数据库,得通过刚才的PHP接口获取数据。用URLLoader来发起HTTP请求,然后解析返回的JSON:
步骤说明:
- 先确保你的Flash项目支持JSON解析(Flash Player 11+原生支持
JSON.parse,如果是老版本可以用第三方JSON库) - 编写请求逻辑,监听加载完成/错误事件
- 拿到积分后更新游戏内的积分显示
import flash.net.URLLoader; import flash.net.URLRequest; import flash.events.Event; import flash.events.IOErrorEvent; // 发起请求获取用户积分 function fetchUserPoints():void { var pointsLoader:URLLoader = new URLLoader(); // 替换成你的PHP脚本的实际路径(比如"/php/get_user_points.php") var request:URLRequest = new URLRequest("path/to/your/updated/php/script.php"); // 监听加载完成事件 pointsLoader.addEventListener(Event.COMPLETE, onPointsFetched); // 监听加载错误事件(比如网络问题、脚本报错) pointsLoader.addEventListener(IOErrorEvent.IO_ERROR, onPointsFetchFailed); pointsLoader.load(request); } // 成功获取积分后的处理 function onPointsFetched(e:Event):void { var loader:URLLoader = URLLoader(e.target); // 解析JSON响应 var responseData:Object = JSON.parse(loader.data); var currentPoints:int = responseData.points; // 这里把积分更新到你的游戏里,比如替换游戏内的积分文本 // 举个例子:gameScoreText.text = "当前积分: " + currentPoints; trace("用户当前积分:" + currentPoints); } // 请求失败的处理 function onPointsFetchFailed(e:IOErrorEvent):void { trace("获取积分失败:" + e.text); // 可以设置默认积分或者给用户提示 } // 游戏启动时调用这个函数获取积分 fetchUserPoints();
3. 关键注意事项
- 会话保持:Flash默认会自动携带浏览器的Cookie,所以只要用户已经在网站登录,PHP的
session就能正常识别用户,不用额外处理。 - 路径正确性:确保Flash里的
URLRequest指向的PHP脚本路径是正确的(相对路径或绝对路径都可以)。 - 安全问题:别用你原来的直接拼接SQL的写法,预处理语句能有效防止SQL注入攻击,一定要改过来。
内容的提问来源于stack exchange,提问作者Marlon Martine
相关产品推荐
相关产品推荐

