nota: vamos a utilizar los mismos archivos del tutorial anterior incluido la tabla de usuarios que creamos asi esque si no entiendes este tutorial te recomiendo leas el primero.
1.-A la clase php que hicimos en el tutorial anterior solo le vamos a agregar los siguientes metodos..
antes que nada para tener mejor control sobre los registros a la tabla usuarios le vamos a agregar un campo que se llame status y que sea booleano ya veremos mas adelante para que..ese campo lo podemos agregar a la tabla mediante phpMyAdmin o con el siguiente codigo:
- ALTER TABLE `usuariosFlex` ADD `status` INT NOT NULL ;
lo declare entero porque my gestor de base de datos no trae el tipo booleano o no lo encontre para el fin es lo mismo cualquiera de los dos nos sirve y se tratan de la misma manera, nunca contraten triara je
bien para que todo funcione bien tendriamos que agregarle esto a la consulta de sql que ya tenemos en la clase de php "where status=1" con lo cual el metodo quedaria asi:
- function getUsuarios()
- {
- $dbhost="xx"; // host del MySQL (generalmente localhost)
- $dbusuario="xx"; // aqui debes ingresar el nombre de usuario
- // para acceder a la base
- $dbpassword="xx"; // password de acceso para el usuario de la
- // linea anterior
- $db="xx"; // 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 where status=1";
- $Result = mysql_query( $sql );
- while ($row = mysql_fetch_object($Result)) {
- $return[] = $row;
- }
- return( $return );//regresamos el arrego como tal..
- }
Para insertar un registro en la base de datos:aqui solo necesitamos un metodo que nos reciba como parametros el nombre y la edad del nuevo usuario ya que los demas campos como el id y el status son los mismos para todos los usuarios nuevos asi que los dejamos como constantes desde el sql
- function addUsuario($nombre,$edad)
- {
- $dbhost="xx"; // host del MySQL (generalmente localhost)
- $dbusuario="xx"; // aqui debes ingresar el nombre de usuario
- // para acceder a la base
- $dbpassword="xx"; // password de acceso para el usuario de la
- // linea anterior
- $db="xx"; // 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 = "INSERT INTO `usuariosFlex` ( `id_usuario` , `nombre_usuario`,
- `edad_usuario` , `status` )VALUES ('', '$nombre', $edad, 1);";
- $Result = mysql_query( $sql );
- }
modificar el registro: para este paso vamos a necesitar el id del registro a modificar este nos lo vamos a ver y a seleccionar desde el dataGrid pero ese ya es codigo de flex por ahora solo lo vamos a recibir como parameto junto con el nombre y la edad que son los que se van a modificar. y quedaria de la siguiente manera:
- function updateUsuario($id, $nombre, $edad)
- {
- $dbhost="xx"; // host del MySQL (generalmente localhost)
- $dbusuario="xx"; // aqui debes ingresar el nombre de usuario
- // para acceder a la base
- $dbpassword="xx"; // password de acceso para el usuario de la
- // linea anterior
- $db="xx"; // 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 = "UPDATE `usuariosFlex` SET `nombre_usuario` = '$nombre',
- `edad_usuario` = $edad WHERE `id_usuario` = $id;";
- }
Eliminar el registro:para realizar esta operacion solo vamos a cambiar el status de dicho registro a un valor falso o cero de esta manera en flex no nos mostrara dicho registro y nosotros sabres que esta marcado como eliminado esto es porque si alguien elimina los registros por error podramos recuperarlos despues..para ello solo vamos a necesitar el Id del registro a eliminar quedaria de la siguiente manera:
- function deleteUsuario($id)
- {
- $dbhost="xx"; // host del MySQL (generalmente localhost)
- $dbusuario="xx"; // aqui debes ingresar el nombre de usuario
- // para acceder a la base
- $dbpassword="xx"; // password de acceso para el usuario de la
- // linea anterior
- $db="xx"; // Seleccionamos la base con la cual trabajar
- $mysql = mysql_connect($dbhost, $dbusuario, $dbpassword);
- mysql_select_db( $db );
- $sql = "UPDATE `usuariosFlex` SET `status` = 0
- WHERE `id_usuario` = $id;";
- }
2.- Con esto tendriamos completa la clase php y los metodos que nos va a servir para modificar la tabla de nuestra base ahora les recomiendo que chequen que todo funcione bien en el browser del amfPHP ya hice las pruevas y todo funciona pueden ver mi browser con dicha clase y los metodos funcionando desde aqui: http://logix.com.mx/robert/amfphp/browser/ y ya que todo funciona en php y en amfPHP pasamos al paso numero 3.
3.-Vamos a retomar el ejemplo del tutorial anterior con el DataGrid y el boton que habiamos puesto le vamos a cambiar el nombre al boton que tenias en lugar de Consultar se va a llamar Actualizar ojo solo el nombre todo el codigo queda igual ahora vamos a agregar otros botones y dos campos de texto como vemos en la siguiente imagen:

4.-Ahora pondre el codigo para las funciones en AS3 y como llamarlas desde flex lo voy a comentar pero ya menos dado que es el mismo proceso del codigo que comente a detalle en el tutorial anterior si algo no entienden y es referente al codigo revisen el tuto anterior y si aun asi no entienden posteen la duda como comentario ok
- <!--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);
- }
- //***********TODO LO ANTERIOR ES PARTE DEL TUTO 1
- //AQUI EMPIEZA CODIGO DE ESTE TUTO
- /*PARA AGREGAR USUARIO RECUERDEN QUE ESTA FUNCION REQUIERE
- PARAMETROS ESTOS LOS TOMAOS DESDE LOS TEXTIMPUT Y SE LOS
- PASAMOS AL PHP DE LA SIGUIENTE MANERA:*/
- public function addUsuarios():void
- {
- miConexion.call( "miClasePHP.addUsuario", new Responder(exitoFuncionAdd,errorFuncion),
- txtUsuario.text, txtEdad.text);
- /*llamamos al metodo de la clase que nos inserta un nuevo usuario
- esta nos recibe dos parametros que son los txt aqui en flex
- y le cambiamos el nombre solo a la funcion de exito porque
- la de error se queda igual y puede utilizarse la misma ya que solo mostramos
- que hay error..*/
- }
- private function exitoFuncionAdd(parametro:String):void
- {
- /*vamos a mostrar un mensaje al usuario de que
- el nuevo registro a sido agregado para ello:*/
- Alert.show("Insercion Exitosa","EjemploFlex");
- }
- public function updateUsuarios():void
- {
- miConexion.call( "miClasePHP.updateUsuario", new Responder(exitoFuncionUpdate,errorFuncion),
- dtaUsuarios.selectedItem.id_usuario,txtUsuario.text, txtEdad.text);
- /*aqui ademas de los parametros de nombre y usuario nos va
- a recibir el id del registro a editar ese lo vamos a tomar
- del DataGrid partiendo de que el registro seleccionado es
- aquel que queremos editar.*/
- }
- private function exitoFuncionUpdate(parametro:String):void
- {
- Alert.show("Edicion Exitosa","EjemploFlex");
- }
- public function deleteUsuarios():void
- {
- miConexion.call( "miClasePHP.deleteUsuario", new Responder(exitoFuncionDelete,errorFuncion),
- dtaUsuarios.selectedItem.id_usuario);
- /*aqui solo necesitamos el id a eliminar*/
- }
- private function exitoFuncionDelete(parametro:String):void
- {
- Alert.show("Registro Eliminado","EjemploFlex");
- }
- ]]>
- </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="170.5" y="207" width="447" dataprovider="{datos}" id="dtaUsuarios">
- <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:controlbar x="206.5" y="357" width="375" horizontalalign="center">
- <mx:button label="Nuevo" width="79" id="btnNuevo" click="addUsuarios();">
- <mx:button label="Editar" id="btnEditar" click="updateUsuarios();">
- <mx:button label="Eliminar" id="btnEliminar" click="deleteUsuarios();">
- <mx:button label="Actualizar" click="cargarUsuarios();" id="btnActualizar">
- </mx:button></mx:button></mx:button></mx:button></mx:controlbar>
- <mx:label x="170" y="157" text="Usuario:">
- <mx:textinput x="243" y="155" id="txtUsuario">
- <mx:textinput x="518" y="155" width="99" id="txtEdad">
- <mx:label x="461" y="157" text="Edad:">
- </mx:label></mx:textinput></mx:textinput></mx:label></mx:application>
ahi esta el codigo flex completamente funcional y de la siguiente manera primero denele actualizar para que vean lo que tienen en la tabla luego ponen nombre y edad y le dan nuevo ya que les salga el mensaje de insercion exitosa le dan actualizar y veran que si funciona y asi si quieren editar seleccionan un registro le ponen los nuevos datos nombre y edad y le dan editar despues que salga el mensaje le dan actualizar y ven que si hace los cambios y para eliminar lo mismo seleccionan la fila a eliminar y pulsan eliminar luego actualizar.. como ven es un poco dificil de manejar pero en la siguiente entrega optimizaremos eso lo importante por ahora es que aprendan el funcionamiento basico de las operaciones a una tabla espero les sirva y no olviden dejar sus comentarios.. enjoy
Genial!!! nadie lo explico tan pero tan bien!!! lo probe local y anduvo de maravilla! Gracias!!! Una pregunta más y no quiero molestarte, si quisiera por ejemplo poder buscar en un txt un id de usuario; ingresar el Número y que después me traiga todos sus datos en unos txts, como sería la función? Para hacer algo así con HTTPService me volví loco y no pude...
ResponderBorrarsi yo tambien tuve problemas en ese aspecto pero lo solucione de una manera que se me ocurio esa fue la siguiente: hago mi funcion en php que me pide el parametro (id) luego consulto con sql y esa funcion me devuelve el array luego ese arra lo muestro en el DataGrid y ya nadams copio los campos al txt como cuando paso el id en las funciones de actualizar y eliminar.. ya de ultimo pongo el DataGrid invisible pero se puede haer desde el arreglo no comas ancias talvez mañana me aviento ese tuto solo talvez jaja gracias por comentar.
ResponderBorrarSi sería buenísimo! Cuando tengas un tiempo... Gracias!
ResponderBorrarTe hago una consulta, estoy viendo el tema de buscar usuario por el id, el php estaría bien así?
ResponderBorrarfunction buscarUsuario($id)
{
$dbhost="localhost";
$dbusuario="yo";
$dbpassword="xxx";
$db="test";
$mysql = mysql_connect($dbhost, $dbusuario, $dbpassword);
mysql_select_db( $db );
$sql = "select * from usuariosflex where status=1";
$Result = mysql_query( $sql );
while ($row = mysql_fetch_object($Result)){
$return[] = $row;
}
return( $return );
}
Me falta algo no?
solo tienes que cambiar la consulta osea el sql y te quedaria de la siguiente manera
ResponderBorrar$sql="select * from usuariosflex where id_usuario=$id";
ya con eso debe funcionar. que te parecen los video tutoriales?
el sql anterior te hace la busqueda tanto en usuarios eliminados como en usuarios activos si quieres que lo haga solo en activos seria asi:
ResponderBorrar$sql="select * from usuariosflex where id_usuario=$id and status=1";
Si me parecen bien los videos, yo estoy un poco mas avanzado, pero para el que recién comienza son muy útiles y se entienden bien. En poco tiempo hiciste una gran web de Flex!!! El tema de los skins también ayuda ya que aveces ni nos fijamos en esos detalles.
ResponderBorrarAl margen te quería consultar algo más, el sql me anduvo lo mas bien, ahora como harías en el Flex para que si no lo encuentra o te trae vacio te mande un mensaje, tipo "no hay usuarios con ese id"? gracias una vez mas y disculpa que te moleste tanto!
Estoy un poco confundido, estoy haciendo la función en Flex para que me busque el id y me lo muestre en la grilla...
ResponderBorrarpublic function buscarUsuario():void{
miConexion.call("usuariosD.buscarUsuario", new Responder(exitoFuncionB, errorFuncion),
txtBuscar.text);
con eso se supone que en el txtBuscar, ingreso el id que estoy buscando, esta bien asi? ahora como hago para que el array que me devuelve el php, me lo muestre en la grilla?
mmm creo que hara falta una nueva continuacion con el tutorial escrito jaja que opinas que sea video tutorial o que sea tutorial ??
ResponderBorrarRealmente creo que si! lo que mas prefieras o te sea mas cómodo, gracias una vez mas!
ResponderBorrarok esta bien hoy hare lo que me pides Chacal nadamas dame tiepo a que este solo en la oficina para poder trabajar sin interrupciones ok esperalo estara para hoy
ResponderBorrarSi si si lo espero, gracias!!!!!
ResponderBorrarUna consulta soy nuevo en flex pero se de php y mysql.
ResponderBorrarquisiera saber como hacen para mostrar la informacion devuelta desde la clase php la muestran en el datagrid. por lo que se se debe de colocar en el datasource del datagrid.
Saludos.
Gracias por el tuto ya pude solucionar mi problema, para los que tambien tenian lo mismo,
ResponderBorrarsolo coloque:
dtaUsuarios.dataProvider=datos;
dentro de la funcion
exitoFuncion()
dedajo de
datos=resultado;
y listo,
saludos.
gracias por el comentario Angel, veo que usaste el amfphp cualquier otra duda posteala y la resolvemos lo mas pronto posible, ayudanos recomendando el blog.
ResponderBorrarok ok, me parece interesante el flex seguire investigando, por ahora utilizare lo que aprendi en estos dias y ya preguntare si algo no entiendo jeje.
ResponderBorrarGracias por la ayuda de antemano
Saludos.
Amigos una consulta me podrian explicar como puedo llenar un combobox con una funcion desde php? algo parecido como se llena el datagrid en este tuto.
ResponderBorrarGracias.
Saludos Angel, mira el combo box se trata de una manera especial y diferente a como se llena la grilla en este ejemplo, por lo que mejor hare el tutorial para que lo veas y espero te sirva tratare de hacerlo hoy
ResponderBorrarGracias entonces espero el tutorial.
ResponderBorrarSaludos AngelLittle espero no haberte echo esperar demaciado ya tienes aca el tutorial para llenar el combo box con datos jalados desde una base de datos http://www.jrlc.aprendiendoflex.com/2010/04/llenar-un-combobox-en-flex/ cualquier duda comentalo y te ayudamos.
ResponderBorrarme funciono perfecto ..muchas gracias con esto podre empezar a trabajar..les comentare las dudas q me vayan surgiendo
ResponderBorrarhola,
ResponderBorrarsoy nuevo en flex (estoy utilizando version 4.5), y necesito saber como declarar la siguiente linea
//******************USO DEL AMFPHP*****************
//declara una variable de la clase conexion remota
private var miConexion : conexionRemota;
el objeto conexionRemota no lo encuentro y no se como buscar el tuto anterior (puedes poner el link de donde explican esto?).
gracias.