1.- Creamos la clase php como podremos observar este archivo se debe llamar igual que el nombre de tu clase
"miClasePHP.php"
- <!--php<br /-->
- /**
- * @author Jose Roberto León Cruz
- * @copyright 2010
- */
- class miClasePHP //nombre de mi clase- asi se debe llamar el archivo
- {
- //metodo que se conectara a la base de datos y obtendra el contenido de la tabla usuarios..
- function getUsuarios()
- {
- $dbhost="xxx"; // host del MySQL (generalmente localhost)
- $dbusuario="xxx"; // aqui debes ingresar el nombre de usuario
- // para acceder a la base
- $dbpassword="xxx"; // password de acceso para el usuario de la
- // linea anterior
- $db="tutorialFlex"; // Seleccionamos la base con la cual trabajar
- $mysql = mysql_connect($dbhost, $dbusuario, $dbpassword);
- mysql_select_db( $db ); //acemos que la bd que queremos sea la activa
- $sql = "select * from usuariosFlex";
- $Result = mysql_query( $sql );
- while ($row = mysql_fetch_object($Result)) {
- $return[] = $row;//asignamos cada registro a una fila del arreglo
- }
- return( $return );//regresamos el arrego como tal..
- }
- }
- ?>
como podemos apreciar la clase miClasePHP.php solo cuenta con un metodo: getUsuarios() el cual no recibe parametros pero si devuelve un Array que contendra todas las filas de la tabla Usuarios la ventaja de este framework esque podremos manipular ese arreglo directamente desde Flex!! y para eso simplemente necesitamos crear una clase AS3 que nos dara la MAGIA..
conexionRemota.as
- // Archivo AS3 by Roberts
- package {
- //librerias necesarias para la conexion del amfPHP
- import flash.net.NetConnection;
- import flash.net.ObjectEncoding;
- //clase que hereda de NetConnection
- public class conexionRemota extends NetConnection
- {
- //Metodo que recibe la URL del gateway de nuestro amfPHP
- public function conexionRemota( sURL:String )
- {
- objectEncoding = ObjectEncoding.AMF0;
- if (sURL) connect( sURL );
- }
- public function AppendToGatewayUrl(s:String):void
- {
- }
- }
- }
2.- Ya que tenemos la estructura de las dos clases debemos colocar la clase php en la carpeta services dentro del directorio raiz del amfPHP y la clase conexionRemota.as la debemos incluir en la carpeta src de nuestra aplicacion en flex.
3.- Repaso rapido:
Esta seria la estructuda de mi tabla en sql a la que vamos a accesar desde la funcion getUsuarios de la clase en php liesto ya la tengo creada ahora insertaremos algunos registrods
- CREATE TABLE `usuariosFlex` (
- `id_usuario` INT NOT NULL AUTO_INCREMENT ,
- `nombre_usuario` VARCHAR( 200 ) NOT NULL ,
- `edad_usuario` INT NOT NULL ,
- PRIMARY KEY ( `id_usuario` )
- );)
- INSERT INTO `usuariosFlex` ( `id_usuario` , `nombre_usuario` , `edad_usuario` )
- VALUES (
- '', 'Jose Roberto Leon', '23'
- );
- INSERT INTO `usuariosFlex` ( `id_usuario` , `nombre_usuario` , `edad_usuario` )
- VALUES (
- '', 'Juan Carlos Leon ', '13'
- );
- INSERT INTO `usuariosFlex` ( `id_usuario` , `nombre_usuario` , `edad_usuario` )
- VALUES (
- '', 'Fulanito equis', '53'
- );
bien ahora si ya que tenemos todos los pasos necesarios (la tabla, la clase php que nos accede a esa tabla y su metodo que nos devuelve todos los usuarios de dicha tabla y la clase AS3 que nos permitira enlazar Flex y PHP..
4.- Vamos a Flex y creamos un nuevo proyecto le dejamos como Web Aplication y en Servert Technology lo dejamos en "None" y pulsamos siguiente con lo cual flex nos genera una nueva area de trabajo .
5.- Nos vamos a modo diseño y agregamos un Datagrid y un Boton como se ve en la imagen:

6.- Creamos una variable de tipo conexionRemota y una de tipo Array definida por el atributo [Bindable] <- este es para que esa variable pueda ser reconocida dentro del codigo AS3 y tambien dentro del codigo
- <!--xml version="1.0" encoding="utf-8"?-->
- <mx:application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" initialize="iniciar();">
- <mx:script>
- <!--[CDATA[<br /-->
- import mx.controls.Alert; //para mensajes en ventanitas
- //******************USO DEL AMFPHP*****************
- //declara una variable de la clase conexion remota
- private var miConexion : conexionRemota;
- //arreglo que recibira el contenido devuelto por el metodo php
- //(en este caso el contenido sera todos los registros de la tabla usuariosFlex)
- [Bindable]
- private var datos:Array;
- private function iniciar():void
- {
- //ruta del archivo gateway del amfPHP
- miConexion = new conexionRemota( "http://logix.com.mx/robert/amfphp/gateway.php" );
- }
- public function cargarUsuarios():void
- { //nombre de la clase php "punto" invocamos al metodo deseado
- miConexion.call( "miClasePHP.getUsuarios", new Responder(exitoFuncion,errorFuncion));
- /*podemos ver que dentro de Responder tenemos dos opciones
- exito y error las cuales debemos crearlas aqui en AS y seran
- invocadas dependiendo si tuvo exito o no la llamada al metodo
- getUsuarios*/
- }
- /*funcion que se invoca cuando tenga exito la llamada
- al metodo getUsuarios recibimos un parametro el cual
- debe conicidir con el parametro que regrese php en esa
- funcion en este caso nuestro metodo php nos devuelve
- un arreglo que es el equivalente a Array en Flex*/
- private function exitoFuncion(resultado:Array):void
- {
- /*lo unico que vamos a hacer es asignar ese
- arreglo devuelto por php a nuestro arreglo
- de Flex y magia*/
- datos=resultado;
- }
- /*funcion que se invoca cuando tenga error la llamada
- al metodo getUsuarios aqui tambien recibimos un parametro
- de tipo String que contendra la cadena de error enviada
- por el php en caso de que haya error*/
- private function errorFuncion(error:String):void
- {
- //aqui solo vamos a mostrar el error en un Alert
- Alert.show(error);
- }
- ]]>
- </mx:script>
- <!--para mostrar los datos en la grilla solo bastaria con asignar
- nuestro arreglo a su propiedad dataProvider pero eso tendria un
- incoveniente ya que segun los desarrolladores de flex la manera
- en que los dataGrid cargan los datos es aleatoria en cuanto al orden
- de las columnas por lo que haremos que el orden sea como nosotros
- quieramos asignando manualmente las columnas para ello solo es
- necesario establecer en su propiedad dataField de cada columna el
- nombre del campo que queremos que se muestre-->
- <mx:datagrid x="169" y="79" width="447" dataprovider="{datos}">
- <mx:columns>
- <mx:datagridcolumn headertext="ID " datafield="id_usuario">
- <mx:datagridcolumn headertext="Usuario" datafield="nombre_usuario">
- <mx:datagridcolumn headertext="Edad" datafield="edad_usuario">
- </mx:datagridcolumn></mx:datagridcolumn></mx:datagridcolumn></mx:columns>
- </mx:datagrid>
- <!--************************************
- desde nuetro boton solo vamos a llamar a la funcion cargar usuarios
- ***********************************-->
- <mx:button x="536" y="254" label="Consultar" click="cargarUsuarios();">
- </mx:button></mx:application>
Esto seria todo lo que hay que hacer y NO SE OLVIDEN de llamar a la funcion iniciar al principio de su aplicacion en las tags

Esto es todo para esta entrada en la siguiente veremos como añadir editar y eliminar usuarios para cotinuar con este tutorial dejen sus comentarios y sujerencias..
Sigue, que esta muy interesante!!! muy bueno!
ResponderBorrarprometo terminarlo hoy en la tarde..
ResponderBorrarMuy bueno! mañana lo pruebo, excelente! Gracias! Me hacia falta un tutorial asi ya que no se encuentra mucho de amfphp en la web y en español.
ResponderBorrarLo estuve probando en forma local y me da un error al apretar el botón "consultar":
ResponderBorrar"Error #2044: NetStatusEvent no controlado: level=error, code=NetConnection.Call.Badversion ......"
Tenes idea de que pueda pasar?
Gracias, muy bueno todo!
Estuve investigando un poco y el error puede ser a la version del amfphp, le mande una anterior y ahora me da un mensaje ["object Object"] como si no encontrara datos, puede ser?
ResponderBorrarmmm esta raro pero para salir de dudas al amfphp tiene un brouser desde donde pudes consultar si el problema es el codigo flex o tu clase php ya verificaste que el php te regrese los registros de la tabla que queires consultar??
ResponderBorrarBusque en el browser como me dijiste y tengo este error al seleccionar el PHP: "Fatal error: Uncaught exception 'VerboseException' with message 'Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\amfphp\services\mostrarG.php:22)' in C:\xampp\htdocs\amfphp\core\amf\app\Gateway.php:191
ResponderBorrarStack trace:....."
Será un problema de seteo del amfphp?
mmm puede ser.. modificaste algo del amfPHP?? solo lo tienes que poner la carpeta descomprimida tal cual en tu servidor sin modificar nada.. que version de amfPHP estas usando?? baja la que tengo posteada aqui en tuto es estable y es la que uso luego subela a tu server y mete la clase php al directorio Services y checa con el browser aver si funciona y ya cometas que pasa..
ResponderBorrarYa esta!!! pude! sabes que investigando encontre por ahi que el PHP no tiene que tener espacios despues del cierre, y bueno era eso!!! lo probe con la consola del amf y me tiro los resultados, despues con el Flex y anduvo, despues lo voy a probar en un servidor. Ahora espero la continuación de tutorial!!! Gracias por todo! Si sale bien es mas facil que usar HTTPService!
ResponderBorrarexcelente que bueno que funciono, espero sacar otro tuto hoy pero voy a ver sobre que tema.. sugiere alguno?
ResponderBorrarSi por supuesto, me gustaria saber como sería modificar, eliminar y agregar los datos; la verdad que explicas muy bien! esto me es de mucha utilidad, gracias!!!
ResponderBorrarComo puedo hacer para cargar en una tabla una imagen (por ejemplo un jpg) como blob?
ResponderBorrarAgradeceria alguna idea, hice el php que carga la imagen en el php (en una tabla de firebird); pero desde flex como llamo a esa funcion en php?
Estoy usando amfphp y flex3.
fernando
realmente lo que te sugeriria seria que mejor almacenaras las imagenes en una carpeta luego en tu base de datos nadamas almacenes el nombre de la imagen. ya en codigo solo recuperas el nombre de la imagen del registro seleccionado y la cargas en un componente image de flex. es mejor asi. si te intereza hare un tutorial para que puedas ver mejor lo que explico
ResponderBorrargenial este tutorial esta super funciona
ResponderBorrarcorrectamente grax por todo
hola efra saludos gracias por comentar te comento que sigo con este blog en http://robertoleon.com.mx me alegra que te haya servido, saludos!!!
ResponderBorrarbuenas excelente ejemplo necesito un favor si el resultado fuera un solo valor por ejemplo el nombre del usuario pero quiero cargarlo a una variable no a un grid como seria
ResponderBorrarHola buenas hice tu tutorial, y me da un error similar al del compañero, solo que a mi si me sirve el amfphp los datos en el browser.Sabrias que puede pasar?
ResponderBorrarhola continuo con tu material muchas gracias me salio perfecto y lo esplicas muy bn ..saludos
ResponderBorrarcomo sería si fuera con una clase es decir que tengo que hacer muchas consultas y muchos accesos al PHP me hace falta ahorar codigo necesito una variante donde pues intanciar una clase y entonces solo pasarle el nombre de la clase y el metodo yq ue me devuelva el array o arrayCollection
ResponderBorrar