FLASH、PHP、MySQL连接
我正在创建我的flash项目,该项目接受4个变量,即姓名、学校、分数和日期。不过FLASH、PHP和MYSQL之间的连接很好,我可以通过FLASH将数据发送到MYSQL数据库,没有问题。现在我的问题是,我无法检索和查看返回到flash的数据。我创建了一个名为highscores的文本字段,用于在flash中检索数据。我确信我检索的php代码很好,因为我可以在浏览器中查看数据。那么有没有办法在flash中检索我的数据呢?以下是我对flash的编码:FLASH、PHP、MySQL连接,php,mysql,flash,Php,Mysql,Flash,我正在创建我的flash项目,该项目接受4个变量,即姓名、学校、分数和日期。不过FLASH、PHP和MYSQL之间的连接很好,我可以通过FLASH将数据发送到MYSQL数据库,没有问题。现在我的问题是,我无法检索和查看返回到flash的数据。我创建了一个名为highscores的文本字段,用于在flash中检索数据。我确信我检索的php代码很好,因为我可以在浏览器中查看数据。那么有没有办法在flash中检索我的数据呢?以下是我对flash的编码: str.text = ""; mysc
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++;
}
为此:
fileLoader.load(new URLRequest("http://127.0.0.1/Y/scores.php?rand=" + Math.random() * 999999));
所做的只是在加载的末尾添加一个随机数作为“垃圾”变量rand
。Flash会在加载不同的文件时看到这一点,因此会发出新的请求,而不是从缓存中提取它
除此之外,您的文件中的所有内容似乎都正常运行
dataOnLoad
是否调用过它?@ethrbunny是的,我在函数dataOnLoad(evt:Event)中调用过它。。。。或者你可以解释一下。tqYou声明了它-我想知道POST回调是否曾经发生过。那么您能告诉我一种方法来引用我上面的flash代码吗?我不是优秀的程序员。@ethrbunyi试图更改行highscores.htmlText=returnVars.score;to highscores.text=returnVars;但它会显示在php中找到的html设置的所有内容以及数据。有没有办法修复它,以便在flash中只显示数据?我尝试了这个方法,它在浏览器中显示得很好,但在flash中再次出现相同的错误无法解析加载的文件:错误#1069:字符串上找不到属性分数,并且没有默认值。顺便问一下,可变分数是多少@indextwo@mchucha对不起,我弄错了-您应该使用returnVars.scores
-复数,而不是单数。正如我提到的,在变量中包含该值意味着您可以向PHP输出中添加其他变量。如果您愿意,您可以将其取出,然后将returnVars
转储到您的文本字段中。如果这样做有效,请记住从您的回音中删除分数=
。我尝试了复数形式,但在取出后没有。分数和从回音中删除后,它会在文本字段“连接确定最佳时间:”中显示此内容:但当时没有检索到任何数据@indextwo@mchucha只需确认:您的文本字段在Flash中是否设置为多行?默认情况下,它们不是。这听起来像是在加载您的信息,但在最佳时间之后没有显示任何内容:
,因为后面有一行新行。是的,我将其设置为动态文本字段和多行@indextwo。顺便问一句,有没有一种方法我可以把我的文件发送给你,这样你就可以仔细查看它们,例如电子邮件Tq?
fileLoader.load(new URLRequest("http://127.0.0.1/Y/scores.php?rand=" + Math.random() * 999999));