FLASH, PHP, MySQL connection


FLASH, PHP, MySQL connection

我正在创建我的flash项目,该项目接受4个变量,即姓名、学校、分数和日期。然而,FLASH、PHP和MYSQL之间的连接很好,我可以通过FLASH将数据发送到MYSQL数据库,没有问题。现在我的问题是,我无法检索和查看数据回闪存。我创建了一个名为highcores的文本字段,用于在flash中检索数据。我确信我用于检索的php代码是好的,因为我可以在浏览器中查看数据。那么,有没有一种方法可以在flash中检索我的数据?这是我对flash的编码:

 str.text = "";
    myschool.text = "";
    myscore.text = "";
    //Here i declared a textfield named highscores
    //var text:String = highscores.text;

    btn_submit.addEventListener(MouseEvent.CLICK, submitted);
    function submitted(e:MouseEvent)
    {
    if(!str.length) {
        status_txt.text = "Please enter your name";
    } 
    else if (!myschool.length) {
       status_txt.text = "Please enter your school name";
    }
    else if (!myscore.length) {
       status_txt.text = "Please enter your score";
    }
    else {
        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.text;
    variables.school = myschool.text;
    variables.score = myscore.text;
    myrequest.data = variables;
    var loader:URLLoader = new URLLoader();
    loader.dataFormat = URLLoaderDataFormat.VARIABLES;
    loader.addEventListener(Event.COMPLETE, dataOnLoad);
    loader.load(myrequest);
    }
    }
    function dataOnLoad(evt:Event)
    {
        trace("Data submission complete");
        var returnVars = evt.target.data;
        trace("***********************");
        for (var myVars in returnVars) {
            trace(myVars + ": " + returnVars[myVars]);
        }
        trace("***********************");
    MC_success.alpha=100;
    //status is a custom flag passed from back-end 
    }
    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("http://127.0.0.1/Y/scores.php"));

    }
    function scoresLoadComplete(evt:Event):void {
        try {
            var returnVars = evt.target.data;
            highscores.htmlText = returnVars;
            trace("Data retrieved successfully");
            for (var myVars in returnVars) {
                trace(myVars + ": " + returnVars[myVars]);
            }
            trace("***********************");
            //highscores.htmlText = returnVars.scores;
        } catch (err:Error) {
            trace("Can't parse loaded file: " + err.message);
        }

    }

这是我检索数据的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 DESC LIMIT 5";
    $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>";
//echo "scores=<b><center>Best Times:</center></b><br /><table>";
$i=0;
$i2=1;
while ($i < $num) {
$name=mysql_result($result,$i,"user");
$school=mysql_result($result,$i,"school");
$score=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> <b> | $school</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();

?>

正如我在前面的回答中提到的,Flash中的文本字段不能很好地处理HTML表。

在PHP文件中,您需要用以下内容替换第一个和最后一个echo之间的所有内容:

echo "scores=<b>Best Times:</b><br />";
$i = 0;
$i2 = 1;
while ($i < $num) {
    $name = mysql_result($result,$i,"user");
    $school = mysql_result($result,$i,"school");
    $score = mysql_result($result,$i,"score");
    $date = mysql_result($result,$i,"date");
    echo "$i2. <b>$name</b> | <b>$school</b> | $score | $date <br />";
    $i2++;
    $i++;
}

请注意,我已添加回scores=变量。只要您在AS3:中使用以下行,这个就不应该导致任何问题

highscores.htmlText = returnVars.scores;

将变量分离为名称/值对意味着如果需要,可以从PHP传递其他变量

更新:

看了你的文件后,整个程序运行得很完美;它成功地提交到数据库并加载回数据。但是:

我认为您遇到的问题是Flash缓存您的scores.php文件

在对以前加载的文件执行URLRequest()时,这种情况非常常见。处理这一问题最直接的方法是更改这条线:

fileLoader.load(new URLRequest("http://127.0.0.1/Y/scores.php"));

对此:

fileLoader.load(new URLRequest("http://127.0.0.1/Y/scores.php?rand=" + Math.random() * 999999));

所做的就是在负载末尾添加一个随机数作为"垃圾"变量rand。Flash在加载不同的文件时会看到这一点,因此会发出新的请求,而不是从缓存中提取。

除此之外,文件中的所有内容似乎都能正常运行。