Estos tutos estan muy buenos, pero se me ocurrio que se podria crear uno que tenga en cuenta varias tablas y bds y empece a elaborar una clase en flash que cree, mediante una matriz como parametro, la consulta sql para que el php solo ejecute la consulta y devuelva datos, de tal modo que pueda manejar todos mis proyectos con un solo php y con una sola clase flash.
Aqui les muestro lo que hay de codigo hasta ahora, se escuchan ideas, aportes, criticas, batasos, etc
conexion.as
Código :
import mx.remoting.Service;
import mx.rpc.RelayResponder;
import mx.rpc.FaultEvent;
import mx.rpc.ResultEvent;
class conexion {
private var capturaRespuesta:RelayResponder;
private var Servicio:Service;
private var Llamadas:Array;
public var eventos:Object;
public var bd:String;
public var usuario:String;
public var clave:String;
function conexion(slGateway:String, slServicio:String, base:String, usr:String, pass:String) {
capturaRespuesta = new RelayResponder(this, "onRespuesta", "onError");
Servicio = new Service(slGateway, null, slServicio, null, capturaRespuesta);
Llamadas = new Array();
eventos = new Object();
bd = base;
usuario = usr;
clave = pass;
}
function onRespuesta(data) {
eventos["on"+Llamadas[0].funcion].apply(eventos.Padre, [data.result]);
Llamadas.shift();
if (Llamadas.length>0) {
procesa("prueba",1,Llamadas[0].parametros, true);
}
}
function onError(fault):Void {
trace("Error en el Metodo: "+Llamadas[0].funcion);
trace(fault.fault.faultstring);
}
function procesa(tabla, tipo, parametros, Automatico) {
var param = new Array();
param = [creaConsulta(tabla, tipo, parametros), tabla, usuario, clave, bd];
if (Llamadas.length == 0 or Automatico) {
Servicio["consultar"].apply(this, param);
}
if (!Automatico) {
var miObjeto = new Object();
miObjeto.funcion = "consultar";
miObjeto.parametros = param;
Llamadas.push(miObjeto);
}
}
private function creaConsulta(tabla, tipo, args):String {
var i = new Number(1);
var sql:String = new String();
switch(tipo){
case 1:
sql += "select * from " + tabla;
if(args.length > 0)
sql += " where " + args[0].c + "='" + args[0].v + "'";
if(args.length > 1){
for (i=1; i<args.length; i++){
sql += " and " + args[i].c + "='" + args[i].v + "'";
}
}
break;
case 2:
sql += "delete from " + tabla;
if(args.length > 0)
sql += " where " + args[0].c + "='" + args[0].v + "'";
if(args.length > 1){
for (i=1; i<args.length; i++){
sql += " and " + args[i].c + "='" + args[i].v + "'";
}
}
break;
case 3:
sql += "insert into " + tabla + "(";
trace(args.length);
if(args.length > 1){
for (i=0; i<args.length; i++){
if(i>0)
sql += ","
sql += args[i].c;
}
sql += ") values(";
for (i=0; i<args.length; i++){
if(i>0)
sql += ","
sql += "'" + args[i].v + "'";
}
sql += ")";
}
break;
case 4:
sql += "update " + tabla + " set ";
for (i=1; i<args.length; i++){
if(i>1)
sql += ",";
sql += args[i].c + "='" + args[i].v + "'";
}
sql += "where " + args[0].c + "='" + args[0].v + "'";
break;
}
return sql;
}
}
conexion.php
Código :
<?php
class conexion{
function conexion (){
$this->methodTable = array(
"consultar" => array (
"description" => "inserta un registro",
"access" => "remote",
"arguments" => array("sql", "tabla", "usr", "pass", "base")
),
"query" => array (
"description" => "ejecuta un query en MySQL",
"access" => "private",
"arguments" => array ("sql","tabla", "usr", "pass", "base","accion")
)
);
}
function consultar($sql, $tabla, $usr, $pass, $base){
if(substr($sql,0,1)=="i")
return $this->query($sql, $tabla, $usr, $pass, $base, 1);
else
return $this->query($sql, $tabla, $usr, $pass, $base, 0);
}
function query ($sql, $tabla, $usr, $pass, $base, $accion){
$conex= mysql_connect("localhost", $usr, $pass) or die("no se puede conectar porque ".mysql_error());
mysql_select_db($base);
$result= mysql_query($sql,$conex);
if ($accion && result){
$result= mysql_insert_id();
}
mysql_close($conex);
return $result;
}
}
?>
ejemplo de consulta desde flash
Código :
Servidor = new conexion("../gateway.php", "servicio","base","usuario","pass");
Servidor.eventos.Padre = this;
var datos = new Array();
datos.addItem({c:"nombre", v:nombretxt.text});
Servidor.procesa("tabla",1,datos); // todos los registros donde "nombre"=nombretxt.text
ejemplo de inserción desde flash
Código :
Servidor = new conexion("../gateway.php", "servicio","base","usuario","pass");
Servidor.eventos.Padre = this;
var datos = new Array();
datos.addItem({c:"nombre", v:nombretxt.text});
datos.addItem({c:"comentarios", v:comentariostxt.text});
Servidor.procesa("tabla",3,datos);
como veran por ahora solo toma en cuenta consultas basicas pero creo que se puede pensar en algo mas general todavia.
