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.