Ver Mensaje Individual
  #6 (permalink)  
Antiguo 25/04/2009, 10:53
hIUG
 
Fecha de Ingreso: abril-2009
Mensajes: 18
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: AYUDA función compleja en Flex, php y MySQL

Cita:
Iniciado por jahepi Ver Mensaje
Hola hIUG !

No es eso, amfphp y webord te dan la posibilidad de llamar a métodos remotos de clases en PHP desde Flex.

Por ejemplo, hacemos una clase en php llamada usuario, esta tiene un método getById, que te devuelve un usuario de acuerdo al id que tiene en la base de datos:

Usuario.php
Código PHP:
class Usuario
{
    private 
$_link;

    public function 
__construct()
    {
        
$this->_link mysql_connect('localhost''root''');
        
mysql_connect_db('basededatos'$this->_link);
    }

    public function 
getById($id
    {
        return 
mysql_query('SELECT * FROM usuarios WHERE id_usuario = ' $id$this->_link);
    }

El constructor se encarga de conectarnos a la base de datos, y en el cuerpo del método getById retornamos el resultado de la consulta, esto es lo que se va a mandar a flex.

Ahora en la parte de flex:

Código actionscript:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application
  3.     xmlns:mx="http:/adobe.com/2006/mxml"
  4.     layout="absolute"
  5.     creationComplete="init()"
  6.     >
  7.  
  8.     <mx:RemoteObject
  9.         id="remoteObject"
  10.         destination="GenericDestination"
  11.         source="Usuario"
  12.         showBusyCursor="true"              
  13.         result="onResult(event);"
  14.         fault="onFault(event);"
  15.     />
  16.  
  17.     <mx:Script>
  18.         <![CDATA[
  19.            
  20.             import mx.rpc.events.FaultEvent;
  21.             import mx.rpc.events.ResultEvent;
  22.            
  23.             private function onResult(event:ResultEvent):void{
  24.                 trace(event.result)
  25.             }
  26.            
  27.             private function onFault(event:FaultEvent):void{
  28.                 trace(event.fault.faultString)
  29.             }
  30.            
  31.             private function init():void{
  32.                 remoteObject.getById(1);
  33.             }
  34.         ]]>
  35.     </mx:Script>
  36.  
  37. </mx:Application>

La clase RemoteObject es responsable de llamar a los métodos de clases en servidores remotos, así que creamos una instancia de RemoteObject, el atributo id indica el nombre de la instancia, source indica el nombre de nuestra clase en php a la cual llamaremos, en este caso Usuario, result y fault hacen referencia a eventos, cuando llamemos al método remoto getById, se ejecutará el método al cual hace referencia, si se llama de manera exitosa se ejecutaría onResult en caso contrario onFault.

Por último en el método init, llamamos al método getById de la clase Usuario para obtener el usuario con el id 1, si todo sale bien, se llamara al método onResult avisando que se han obtenido los datos, event.result contiene esos datos.

Si quieres ver el contenido del atributo result, puedes colocar un breakpoint, dando doble click en el número de línea donde se encuentra, va a aparecer un puntito rojo, corres el proyecto en modo de depuración (botón del insecto verde) y cuando se ejecute el método onResult, el depurador nos avisará, te vas a la opción de variables, y buscas el objeto event, luego vas a su atributo result y exploras los valores que contiene.

Antes de esto tienes que instalar weborb, así que te dejo un tutorial:
http:/cristalab.com/tutoriales/conectar-flex-3-con-php-usando-weborb-c243l/

Un saludote !


Hola jahepi:

Gracias, mira ya cheque lo de weborb pero no me acomode y opte por seguir con mi metodo que ya estaba intentando, de hecho creia ya tener la respuesta pero el resultado no es nada que ver con lo que deseo, mira te explico como lo hice:

Primeramente mi php para la conexión, como es una prueba lo simplifique:

Código PHP:
<?php
//Conectar con MySQL
$MySQLConnection mysql_connect"127.0.0.1""root""pass" ) or die(mysql_error());
//load the database
mysql_select_db"acda" );
//Obtener información de la tabla cursos
$Query "SELECT nom_curso from cursos WHERE cat_curso='Docentes'";
$Result mysql_query$Query );
/* Imprimir el XML para Flex */
print "<doce>\n";
while( 
$Row mysql_fetch_object$Result ) )
{
   print 
"<nom_curso>".$Row->nom_curso."</nom_curso>\n";
}
print 
"</doce>";
?>
Y en mi mxml puse lo siguiente, igual como prueba, simplificado:

Código actionscript:
Ver original
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <mx:Application xmlns:mx="http:/adobe.com/2006/mxml" layout="absolute" creationComplete="rest_service.send()" width="100%" height="100%">
  3.  
  4.     <mx:HTTPService id="rest_service" result="recibe()" url="http:/127.0.0.1/ACDA/ACDA-debug/Prueba9.php" showBusyCursor="true"/>
  5.  
  6.    <mx:Script>
  7.       <![CDATA[
  8.          import mx.collections.*;
  9.          import mx.controls.*;
  10.  
  11.          [Bindable]
  12.          private var arr:ArrayCollection = new ArrayCollection;
  13.          
  14.          private function recibe():void
  15.          {
  16.             while(rest_service.lastResult)
  17.             {
  18.                arr.addItem(rest_service.lastResult.doce.nom_curso);
  19.                
  20.                var lin:LinkButton = new LinkButton;
  21.                var laba:Label = new Label;
  22.                
  23.                for(var i:int = 0 ; i<arr.length ; i++)
  24.                {
  25.                   lin.label = String(arr.getItemAt(i));
  26.                  
  27.                   lin.x = 424;
  28.                   lin.y = i*50;
  29.                   lin.name="lin";
  30.                   lin.id = String(arr.getItemAt(i));
  31.                  
  32.                   canv.addChild(lin);
  33.                  
  34.                   laba.text = String(arr.length);
  35.                   laba.y = i*50;
  36.                   canv.addChild(laba);
  37.                }
  38.             }
  39.          }
  40.       ]]>
  41.    </mx:Script>
  42.    <mx:Canvas id="canv" left="0" top="0" bottom="0" right="0"/>
  43. </mx:Application>

Y tengo mi tabla cursos en la base de datos asi:
[IMG]http:/pruebacorreo.webcindario.com/imagenes/cursos.jpg[/IMG]

Entonces, supuesta mente me debería de crear cinco botones que corresponden a docentes, cada uno respectivamente con las etiquetas curso 1d, curso 2d, curso 3d, curso 4d y curso 5d. Y cinco etiquetas con los números del 1 al cinco correspondientemente.

Pero lo que pasa es que me devuelve 343 botones con la etiqueta "curso1d,curso2d,curso3d,curso4d,curso 5d" e igual 343 labels con textos del 1 al 343, algo asi:
[IMG]http:/pruebacorreo.webcindario.com/imagenes/resultado.jpg[/IMG]

No se si tu tengas idea de por que me sucede esto, estoy ya preocupado pues tengo que entregar el proyecto en mi escuela y como siempre había desarrollado en HTML y pocas veces en Flash, Flex me esta costando trabajo

Si sabes por que me sucede esto, te agradecería pusieras un ejemplo de mi código corregido o como utilizo las funciones correctamente, gracias

Cita:
Nota: Les quite diagonales(/) y www a los enlaces e imagenes por que si no, no me permite postear la respuesta

Última edición por hIUG; 25/04/2009 a las 10:59