as3,MySQL-PHP连接
我正在尝试将我的flash项目与数据库连接起来。然而,我希望能够从包含3个字段(名称、分数和日期)的数据库中提交和检索数据。我的问题是,若我点击提交按钮,当我去签入数据库时,我只看到0分,这意味着并没有提交任何内容。有人能帮我吗。Tq 以下是我对flash的编码:as3,MySQL-PHP连接,php,mysql,actionscript-3,Php,Mysql,Actionscript 3,我正在尝试将我的flash项目与数据库连接起来。然而,我希望能够从包含3个字段(名称、分数和日期)的数据库中提交和检索数据。我的问题是,若我点击提交按钮,当我去签入数据库时,我只看到0分,这意味着并没有提交任何内容。有人能帮我吗。Tq 以下是我对flash的编码: var str:String = ""; var myscore = 0; btn_submit.addEventListener(MouseEvent.CLICK, submitted); function submitted(e
var str:String = "";
var myscore = 0;
btn_submit.addEventListener(MouseEvent.CLICK, submitted);
function submitted(e:MouseEvent)
{
var myrequest:URLRequest = new URLRequest("http://127.0.0.1/Y/sendscore.php");
myrequest.method = URLRequestMethod.POST;
var variables:URLVariables = new URLVariables();
variables.name = str;
variables.score = myscore;
myrequest.data = variables;
var loader:URLLoader = new URLLoader();
loader.dataFormat = URLLoaderDataFormat.VARIABLES;
loader.addEventListener(Event.COMPLETE, dataOnLoad);
loader.load(myrequest);
}
function dataOnLoad(evt:Event)
{
MC_success.alpha=100;
//status is a custom flag passed from back-end
}
我的PHP代码发送数据
<?php
//Include database connection details
require_once('config.php');
//Connect to mysql server
$link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD);
if(!$link) {
die('Failed to connect to server: ' . mysql_error());
}
//Select database
$db = mysql_select_db(DB_DATABASE);
if(!$db) {
die("Unable to select database");
}
//Function to sanitize values received from the form. Prevents SQL injection
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
//Sanitize the POST values
$name = clean($_POST['name']);
$score = clean($_POST['score']);
$currentdate = date("Y/m/d");
//Create INSERT query
$qry = "INSERT INTO highscores(user, score, date) VALUES('$name','$score','$currentdate')";
$result = @mysql_query($qry);
echo "writing=Ok";
exit();
mysql_close();
?>
除非您遗漏了某段代码,从而更改了分数,否则您实际上是在AS3代码块的顶部声明了var myscore=0
第一件事是将其更改为100
,然后运行脚本,查看修改后的分数变量是否已提交。如果是的话,那么一切都正常运转
更新:
您已经更改了问题,希望能够加载数据。您已经通过loader.addEventListener(Event.COMPLETE,dataOnLoad)
为此设置了一个函数。您只需要获取PHP脚本发送回的数据。这可以通过dataOnLoad
功能中的evt
参数访问:
function dataOnLoad(evt:Event):void {
trace("Data submission complete");
var returnVars = evt.target.data;
trace("***********************");
for (var myVars in returnVars) {
trace(myVars + ": " + returnVars[myVars]);
}
trace("***********************");
}
更新2:
您已请求帮助从数据库加载分数。由于您已经有了一个从数据库中检索该文件的PHP文件(假设它名为scores.PHP
),因此您只需要在Flash中使用一个函数来加载它
使用urloader
和事件侦听器,您已经准备好了基本功能。您只需将这些应用于简单的加载:
btn_scores.addEventListener(MouseEvent.CLICK, loadScores);
function loadScores(e:MouseEvent):void {
var fileLoader:URLLoader = new URLLoader();
fileLoader.addEventListener(Event.COMPLETE, scoresLoadComplete);
fileLoader.load(new URLRequest("scores.php"));
}
function scoresLoadComplete(evt:Event):void {
try {
var returnVars = evt.target.data;
trace("***********************");
for (var myVars in returnVars) {
trace(myVars + ": " + returnVars[myVars]);
}
trace("***********************");
} catch (err:Error) {
trace("Can't parse loaded file: " + err.message);
}
}
注意您的PHP文件当前返回一个HTML结果表。这不会在Flash中表现;您最好通过键/值对发送并解析它们,或者只发送一个基本的HTML分数列表。是的,兄弟,我更改了,它在数据库上显示了分数=100,但我的目标是发送用户输入的名称和分数。你能帮我一下吗。我很感激Tq。我试着使用上面的代码,但看起来它确认了提交到数据库的信息。因为我的想法是放置一个按钮,用户可以单击该按钮查看存储的名称和分数。您可以用一个按钮修改上面的代码,以减轻我的负担。@mchucha我再次更新了答案。我认为在你进一步研究之前,你需要对AS3中的加载、事件和侦听器的工作方式进行一些研究。你所有的想法都很好,兄弟,我想我还是想办法让这些数据显示在我的flash面板中。我做了一个按钮,你告诉我,并设置所有的连接似乎工作。然而,我必须有一些东西在flash中显示数据,这是我的挑战部分。我真的不知道如何做到这一点。如果有办法的话,帮帮我。Tq再次发送给您。@mchucha只需在您的舞台上创建一个实例名为highscores
的文本字段。您需要更新PHP脚本以返回类似于echo“scores=Best Times:…
-这样您就可以用scores=
来预写返回的字符串,然后在scoresLoadComplete
函数中,在try
块中添加这一行:highscores.htmlText=returnVars.scores;
btn_scores.addEventListener(MouseEvent.CLICK, loadScores);
function loadScores(e:MouseEvent):void {
var fileLoader:URLLoader = new URLLoader();
fileLoader.addEventListener(Event.COMPLETE, scoresLoadComplete);
fileLoader.load(new URLRequest("scores.php"));
}
function scoresLoadComplete(evt:Event):void {
try {
var returnVars = evt.target.data;
trace("***********************");
for (var myVars in returnVars) {
trace(myVars + ": " + returnVars[myVars]);
}
trace("***********************");
} catch (err:Error) {
trace("Can't parse loaded file: " + err.message);
}
}