as3, MySQL PHP connection


as3, MySQL PHP connection

我正在尝试将我的flash项目与数据库连接起来。然而,我希望能够从数据库中提交和检索数据,该数据库有3个字段(名称、分数和日期)。我的问题是,如果我点击提交按钮,当我去检查数据库时,我只看到0分,这意味着什么都没有提交。有人能帮我吗。Tq这是我对flash的编码:

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();  
?>

我的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");
    }
    //Create INSERT query
    $qry = "SELECT * FROM highscores ORDER BY score ASC";
    $result = @mysql_query($qry);
        $num=mysql_numrows($result);
if($num > 10)
{$num = 10;}
//echo "writing=Ok";
echo "<b><center>Best Times:</center></b><br /><table>";
$i=0;
$i2=1;
while ($i < $num) {
$name=mysql_result($result,$i,"user");
$time=mysql_result($result,$i,"score");
$date=mysql_result($result,$i,"date");

echo "<tr><td align=left valign=top>$i2.</td><td align=center valign=top><b>$name</b> | $score | $date</td></tr><tr><td colspan=2><hr></td></tr>";
$i2++;
$i++;
}
echo "</table>";
//$urlRefresh = "scores.php";
//header("Refresh: 15; URL='"" . $urlRefresh . "'"");
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中使用一个函数来加载它

您已经使用了URLLoader和事件监听器的基本功能。您只需要将这些应用于直接加载:

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分数列表。