gpt4 book ai didi

php - 通过PHP从MySQL到AS3检索信息

转载 作者:行者123 更新时间:2023-11-29 06:50:34 25 4
gpt4 key购买 nike

我现在正在做一个教程,是在图特斯普卢斯找到的。
本教程将通过PHP将AS3中的信息保存到MySQL中,然后检索这些信息。
到目前为止,它是有效的。我可以输入用户名和分数,然后保存到数据库中。但是有一个问题,我希望能够在一个表中显示所有的名称和分数,而不是必须搜索一个名称,然后找到该特定用户的分数。
下面是保存信息的代码。

package {

import flash.display.*;
import flash.events.*;
import flash.net.*;

public class register extends MovieClip {

public function register ():void {

register_button.buttonMode = true;


register_button.addEventListener(MouseEvent.MOUSE_DOWN, checkForm);

username_text.text = "";
userbio_text.text = "";

}

public function checkForm (e:MouseEvent):void {

if (username_text.text != "" && userbio_text.text != "") {

sendForm();

} else {

result_text.text = "PLEASE ENTER A NAME";

}

}

public function sendForm ():void {

/*
we use the URLVariables class to store our php variables
*/

var phpVars:URLVariables = new URLVariables();

phpVars.username = username_text.text;
phpVars.userbio = userbio_text.text;

/*
we use the URLRequest method to get the address of our php file and attach the php vars.
*/

var urlRequest:URLRequest = new URLRequest("localhost/php/register.php");

/*
the POST method is used here so we can use php's $_POST function in order to recieve our php variables.
*/

urlRequest.method = URLRequestMethod.POST;

/*
this attaches our php variables to the url request
*/

urlRequest.data = phpVars;

/*
we use the URLLoader class to send the request URLVariables to the php file
*/

var urlLoader:URLLoader = new URLLoader();
urlLoader.dataFormat = URLLoaderDataFormat.VARIABLES;

/*
runs the function once the php file has spoken to flash
*/

urlLoader.addEventListener(Event.COMPLETE, showResult);

/*
we send the request to the php file
*/

urlLoader.load(urlRequest);

}

/*
function to show result
*/

public function showResult (e:Event):void {

result_text.text = "" + e.target.data.result_message;

}

}

}

从这里,我可以转到另一个应用程序并搜索用户名,然后显示用户得分。代码如下:
package actions {


import flash.display.MovieClip;
import flash.events.*;
import flash.net.*;
import flash.text.*;

public class main extends MovieClip {

public function main ():void {



submit_button.buttonMode = true;


submit_button.addEventListener(MouseEvent.MOUSE_DOWN, checkLogin);


username.text = "";

}



public function checkLogin (e:MouseEvent):void {



if (username.text == "") {

username.text = "Enter your username";

}


else {


processLogin();

}

}

public function processLogin ():void {


var phpVars:URLVariables = new URLVariables();


var phpFileRequest:URLRequest = new URLRequest("http://xx.xx.xx.uk/~bf93fv/Source%202/php/controlpanel.php");


phpFileRequest.method = URLRequestMethod.POST;


phpFileRequest.data = phpVars;


var phpLoader:URLLoader = new URLLoader();
phpLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
phpLoader.addEventListener(Event.COMPLETE, showResult);

phpVars.systemCall = "checkLogin";
phpVars.username = username.text;


phpLoader.load(phpFileRequest);

}


public function showResult (event:Event):void {

result_text.autoSize = TextFieldAutoSize.LEFT;

result_text.text = "" + event.target.data.systemResult;

}

}

}

controlpanel.php文件分别显示用户名和分数,如下所示:
<?php
include_once "connect.php";
$username = $_POST['username'];
if ($_POST['systemCall'] == "checkLogin") {
$sql = "SELECT * FROM users WHERE username='$username'";
$query = mysql_query($sql);
$login_counter = mysql_num_rows($query);
if ($login_counter > 0) {
while ($data = mysql_fetch_array($query)) {
$userbio = $data["user_bio"];
print "systemResult=$username Scored $userbio";
}
}
else {
print "systemResult=The login details dont match our records.";
}
}
?>

有没有人知道用什么简单的方法将数据库中的所有信息都查看到一个表中?

最佳答案

在PHP代码中,几乎没有什么需要改进的地方(AS3更好)。
使用PDO而不是使用特定DBMS的函数。其原因是它是可移植的(在某种程度上)。比方说,如果你想将数据库从MySQL迁移到Postgres,你就必须少重写代码,否则你就必须重写。PDO还提供了一些清理输入的方法。这不是防弹的-还是没什么好。PDO被认为是“良好实践”,因此您将学习立即编写好的代码,而不是从一开始编写新潮风格的代码,然后再发现如何正确地进行编写。如果你正在考虑一个非常原始的任务,比如一个select,那么它可能会更详细一些,但是一旦你的任务变得更复杂一点,它就变得非常值得花时间。
在您的SQL查询中,除非用于测试/调试,否则请制定一条永远不要使用select *的一般规则。这种懒惰最终会给你带来很多麻烦。通过这样做,您将很难在以后维护您的代码,从而有效地将其转换为“编写一次-逃跑”之类的东西。同样,作为一个简单的概念证明,这是可以的,-长期解决方案-坏。如果你还不明白我想说什么:显式列出所有列名。
使用include/require及其_once家族作为长期解决方案是个坏主意。再一次,简单的测试可以-从长远来看是不好的。好的程序是用函数/类编写的,使用__autoload()或使用自动加载类的框架。这使得更大的应用程序更易于管理,更易于导航和理解,然后包括的网络。
必须清除来自web应用程序用户的输入,即不要执行$_POST['key']。至少编写一个函数,该函数将检查密钥是否存在,并且它是否具有预期的格式。
现在,你的实际问题,发送数据。
您只需发送在PHP中得到的原始SQL输出,就可以避免服务器对所有输出进行重新编码的问题。在非常简单的情况下可以工作,但在更复杂的任务中会变得更复杂。这也不常见,所以你会发现人们不知道如何处理。(没有技术限制,这只是一件历史文物)。
有很多流行的格式可以被各种应用程序消化,而不是必要的Flash。其中包括XML、JSON和Protobuf。PHP还有一些更特殊的特性,比如从serialize()中产生的特性。如果你走这条路,我会敦促你坚持JSON。XML可能是一种更成熟的技术,但JSON具有内置的基本类型系统的优点(而在XML中,它是它之上的另一层,这是在Flash中没有实现的其他东西之外——我指的是XSL)。
有AMF(ActionScript消息格式)-它是Flash的理想选择。PHP还非常清楚如何生成它(有几种流行的实现)。与JSON或XML相比,这种格式要简洁得多。它有更强的表达能力(可以描述循环依赖关系,多对多关系,有引入自定义类型的过程,自定义[反]序列化例程)。它也是自描述的,除非您使用自定义序列化例程。如果以后不打算将应用程序移动到JavaScript,这是最好的选择,因为JavaScript在使用二进制数据时遇到问题。在那里无法解析此格式。
Protobuf也是一个可行的选择。这是谷歌设计的数据交换格式。它在精神上类似于AMF,但它可能不是自我描述。它依赖于应用程序知道如何从中生成自定义对象。但是,它有一个可以用JavaScript解析的表单(尽管您会失去紧凑性的好处)。
您的ActionScript代码:如果您选择AMF,则需要查看NetConnection类。我建议你去看看AMFPHP项目——它也有一些例子。或者,Zend Framework具有用于此目的的Zend_Amf库。但在一开始使用整个框架可能会让人难以接受。
如果使用XML,那么有一个内置的XML类,web上有数百万个关于如何使用它的例子。
如果您使用JSON,那么不久以前就有了一个内置的类。但是在有一个之前,有几个库可以解析它。
以前有一个项目是在Flash中用GoogleCode来支持Protobuf,但要想成功,需要相当多的默许和体力劳动。
最后,这里提到的事物索引:
http://php.net/manual/en/book.pdo.php-PDO公司
http://php.net/manual/en/function.json-encode.php-PHP中的JSON
http://php.net/manual/en/book.dom.php-PHP中的XML(如果考虑PHP,就哪个XML库更好还没有达成一致意见)。我可能会坚持这个,但是ymmv)。
http://www.silexlabs.org/amfphp/-PHP中的AMF
http://framework.zend.com/manual/1.12/en/zend.amf.htmlZend_Amf库
ActionScript中的Protobuf
http://code.google.com/p/protobuf-actionscript3/PHP Protobuf(抱歉,从未使用过这个,但看起来很好)
https://github.com/drslump/Protobuf-PHP对于老版本的Flash player-这个库有我所知道的最好的JSON解码器。

关于php - 通过PHP从MySQL到AS3检索信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15709535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com