Я создаю свой флеш-проект, который принимает 4 переменные, то есть имя, школу, оценку и дату. Однако связь между FLASH, PHP и MYSQL работает нормально, и я могу без проблем отправлять данные в базу данных MySQL через flash. Теперь моя проблема в том, что я не могу получить и просмотреть данные обратно на флэш-память. Я создал текстовое поле с именем рекордов для извлечения данных во флэш-памяти. И я уверен, что мой PHP-код для извлечения в порядке, так как я могу просматривать данные в браузере. Так есть ли способ получить мои данные во флэш-памяти? вот моя кодировка для 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 видит это при загрузке другого файла и поэтому делает новый запрос, а не вытаскивает его из кэша.
Кроме этого, все в ваших файлах, кажется, работает именно так, как должно.
Других решений пока нет …