Comunidad de diseño web y desarrollo en internet online

mods de clase AMFPHP

Citar            
MensajeEscrito el 31 Ene 2006 04:16 am
Estoy empezando con esto de remoting, estuve viendo la clase AMFPHP que publico maikel en los tutoriales, la vi muy bien y la empece a utilizar tambien tomando el otro tutorial posteado por maikel de bases de datos con flash y AMFPHP.

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.

Por gparis

112 de clabLevel



 

Uruguay

opera
Citar            
MensajeEscrito el 04 Feb 2006 03:35 am
Los datos de conexión no deberían estar nunca del lado cliente, o almenos eso dicen los sabios...

Por [Sheer]

Claber

283 de clabLevel

1 tutorial

Genero:Masculino  

Barcelona

opera
Citar            
MensajeEscrito el 04 Feb 2006 05:13 am
tomando nota

Por gparis

112 de clabLevel



 

Uruguay

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.