viernes, 5 de marzo de 2010

insertar, modificar, eliminar registros de una BD

Hola que tal como estan? continuando con el tutorial anterior donde recuperabamos los registros de la Base de datos con PHP y los mostramos en un DataGrid en Flex ahora lo que sigue es hacer las operaciones basicas como son la alta, la modificiacion y la eliminacion de dichos registros comenzamos..

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







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");
}


]]>



























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

22 comentarios:

  1. 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...

    ResponderBorrar
  2. si 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.

    ResponderBorrar
  3. Si sería buenísimo! Cuando tengas un tiempo... Gracias!

    ResponderBorrar
  4. Te hago una consulta, estoy viendo el tema de buscar usuario por el id, el php estaría bien así?
    function 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?

    ResponderBorrar
  5. solo tienes que cambiar la consulta osea el sql y te quedaria de la siguiente manera


    $sql="select * from usuariosflex where id_usuario=$id";



    ya con eso debe funcionar. que te parecen los video tutoriales?

    ResponderBorrar
  6. 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:

    $sql="select * from usuariosflex where id_usuario=$id and status=1";

    ResponderBorrar
  7. 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.
    Al 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!

    ResponderBorrar
  8. Estoy un poco confundido, estoy haciendo la función en Flex para que me busque el id y me lo muestre en la grilla...
    public 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?

    ResponderBorrar
  9. mmm creo que hara falta una nueva continuacion con el tutorial escrito jaja que opinas que sea video tutorial o que sea tutorial ??

    ResponderBorrar
  10. Realmente creo que si! lo que mas prefieras o te sea mas cómodo, gracias una vez mas!

    ResponderBorrar
  11. ok 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

    ResponderBorrar
  12. Una consulta soy nuevo en flex pero se de php y mysql.
    quisiera 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.

    ResponderBorrar
  13. Gracias por el tuto ya pude solucionar mi problema, para los que tambien tenian lo mismo,
    solo coloque:
    dtaUsuarios.dataProvider=datos;
    dentro de la funcion
    exitoFuncion()
    dedajo de
    datos=resultado;

    y listo,

    saludos.

    ResponderBorrar
  14. 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.

    ResponderBorrar
  15. ok 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.

    Gracias por la ayuda de antemano

    Saludos.

    ResponderBorrar
  16. 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.

    Gracias.

    ResponderBorrar
  17. 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

    ResponderBorrar
  18. Saludos 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.

    ResponderBorrar
  19. me funciono perfecto ..muchas gracias con esto podre empezar a trabajar..les comentare las dudas q me vayan surgiendo

    ResponderBorrar
  20. hola,
    soy 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.

    ResponderBorrar