Ingeniería Informática

Menú Navegación

Archivos

  • Septiembre 2009
  • Julio 2009
  • Abril 2009
  • Marzo 2009
  • Enero 2009
  • Noviembre 2008
  • Octubre 2008

Categorías

  • Equipo de jóvenes
  • General
  • JavaScript
  • jQuery
  • Liderazgo
  • PHP
  • xajax

A cerca de...

Me llamo Eliecer López, soy Ingeniero (e.) en Computación e Informática y estoy dedicado al desarrollo Web.
Espero te ayuden los tutoriales y ejemplos que aquí se encuentran.

Últimas 5…

  • Como agregar filas o rows a una tabla dinamicamente mediante jQuery
  • Como agregar filas o rows a una tabla dinamicamente mediante javaScript
  • Actualizando Wordpress
  • Como utilizar autocompletex (suggest) de jQuery y no morir en el intento.
  • Guardar en Base de Datos las filas agregadas dinamicamente con xajax

Vistas

Etiquetas

actualizar agregar-fila agregar-fila-dinamico-xajax ajax autocompletar autocomplete box cargando combo combobox dependientes dinamico equipo JavaScript jQuery Liderazgo loading organigrama organizacion PHP preload select suggest vision xajax

WP Cumulus Flash tag cloud by Roy Tanck and Luke Morton requires Flash Player 9 or better.

Anuncios Google

2009
10
Mar

Guardar en Base de Datos las filas agregadas dinamicamente con xajax

Para este tutorial utilizaremos el conocimiento adquirido en el tutorial anterior http://prodev.cl/2009/01/como-agregar-filas-rows-tabla-dinamicamente-mediante-xajax/ .
Lo que haremos será guardar los datos necesarios en campos ocultos y luego rescatarlos desde xajax y enviarlos a una función en PHP que los guarde en una Base de Datos.

Para comenzar, debemos modificar el código anterior y agregar en campos ocultos los valores extraídos del formulario añadiendo al nombre el número de línea al que corresponde el detalle de la siguiente manera:

hdn(nombreCampo)_(numeroLinea)

por lo que nuestro código quedaría de la siguiente forma:

$id_campos = $cant_campos = $num_campos+1;
	$str_html_td1 = $txtNombre . '
<input type="hidden" id="hdnNombre_' . $id_campos . '" name="hdnNombre_' . $id_campos . '" value="' . $txtNombre . '"/>' ;
    $str_html_td2 = "$txtEdad" . '
<input type="hidden" id="hdnEdad_' . $id_campos . '" name="hdnEdad_' . $id_campos . '" value="' . $txtEdad . '"/>' ;
    $str_html_td3 = "$txtDireccion" . '
<input type="hidden" id="hdnDireccion_' . $id_campos . '" name="hdnDireccion_' . $id_campos . '" value="' . $txtDireccion . '"/>' ;
    $str_html_td4 = "$selSexo" . '
<input type="hidden" id="hdnSexo_' . $id_campos . '" name="hdnSexo_' . $id_campos . '" value="' . $selSexo . '"/>' ;
    $str_html_td5 = "$selEstCivil" . '
<input type="hidden" id="hdnEstCivil_' . $id_campos . '" name="hdnEstCivil_' . $id_campos . '" value="' . $selEstCivil . '"/>' ;
    $str_html_td6 = '<img src="images/delete.png" width="16" height="16" alt="Eliminar" onclick="if(confirm(\'Realmente desea eliminar este detalle?\')){xajax_eliminarFila('. $id_campos .', proyecto.cant_campos.value);}"/>';

Además debemos agregar un campo oculto que contenga el número de línea correspondiente y le damos el nombre hdnIdCampos[] esto hará que se cree un arreglo de inputs llamados “hdnIdCampos” los cuales accederemos desde PHP. Lo podemos agregar a la última línea.

$str_html_td6 = '<img src="images/delete.png" width="16" height="16" alt="Eliminar" onclick="if(confirm(\'Realmente desea eliminar este detalle?\')){xajax_eliminarFila('. $id_campos .', proyecto.cant_campos.value);}"/>';
    $str_html_td6 .= '
<input type="hidden" id="hdnIdCampos_'. $id_campos .'" name="hdnIdCampos[]" value="'. $id_campos .'" />

Aquí podemos ver el HTML generado dinámicamente por nuestra aplicación.

<table id="tblDetalle" class="listado" width="100%">
<tbody id="tbDetalle">
<tr id="rowDetalle_0">
<th id="tdDetalle_01">Nombre</th>
<th id="tdDetalle_02">Edad</th>
<th id="tdDetalle_03">Direccion</th>
<th id="tdDetalle_04">Sexo</th>
<th id="tdDetalle_05">Estado Civil</th>
<th id="tdDetalle_06">Eliminar</th>
</tr>
<tr id="rowDetalle_1">
<td id="tdDetalle_11">eall
<input id="hdnNombre_1" name="hdnNombre_1" value="eall" type="hidden"></td>
<td id="tdDetalle_12">25
<input id="hdnEdad_1" name="hdnEdad_1" value="25" type="hidden"></td>
<td id="tdDetalle_13">mi casa
<input id="hdnDireccion_1" name="hdnDireccion_1" value="mi casa" type="hidden"></td>
<td id="tdDetalle_14">Hombre
<input id="hdnSexo_1" name="hdnSexo_1" value="Hombre" type="hidden"></td>
<td id="tdDetalle_15">Soltero
<input id="hdnEstCivil_1" name="hdnEstCivil_1" value="Soltero" type="hidden"></td>
<td id="tdDetalle_16"><img src="images/delete.png" alt="Eliminar" onclick="if(confirm('Realmente desea eliminar este detalle?')){xajax_eliminarFila(1, proyecto.cant_campos.value);}" height="16" width="16">
<input id="hdnIdCampos_1" name="hdnIdCampos[]" value="1" type="hidden"></td>
</tr>
</tbody>
</table>

Lo que sigue es crea una función que tome los valores de cada una de las filas o rows agregados y los guarde en la Base de Datos. Para esto aprovecharemos la bondad de PHP que nos permite tener arreglos con índices de tipo string y, construiremos los índices tomando el nombre del campo más el número de línea que guardamos en “hdnIdCampos”.

function guardar($formulario){
//comentaré todo lo que tenga que ver con la Base de Datos
    $flag = 0;
    extract($formulario);
    $respuesta = new xajaxResponse();
//    $conn = new conexionBD ( ); //Genera una nueva coneccion
//	$conn->EjecutarSQL("BEGIN TRANSACTION A1");
 
    foreach($hdnIdCampos as $id){      // Así recorro cada campo en cada linea
//	Guardo la consulta en una cadena
        $Str_SQL = "INSERT INTO PERSONAS(
                        NOMBRE, EDAD, DIRECCION,
                        SEXO, ESTCIVIL)
                        VALUES(
                        " . $formulario['hdnNombre_' . $id] . ", " . $formulario['hdnEdad_' . $id] . ", " . $formulario['hdnDireccion_' . $id] . ",
                        " . $formulario['hdnSexo_' . $id] . ", ". $formulario['hdnEstCivil_' . $id] . ")";
 
//        if(!$conn->EjecutarSQL($Str_SQL)){  //CONTROL DE ERRORES.  muy importante, si no guarda uno, no guarda nada.
//            $conn->EjecutarSQL("ROLLBACK TRANSACTION A1");
//            $flag = 1;
//            $MSG = "Ha ocurrido un error al insertar los datos de la persona.\nPor favor, intentelo nuevamente.";
//        }
    $respuesta->addAlert($Str_SQL);
	}
    if($flag == 0){
//		$conn->EjecutarSQL("COMMIT TRANSACTION A1");
		$MSG = "Datos guardados con exito";
	}
 
    $respuesta->addAlert($MSG);
    return $respuesta;
 
}

Si bien puede que no sea la mejor forma de realizarlo pero es lo mejor que se me ocurrió y lo más importante es que funciona.

Espero que les sirva.

Disfrútenlo y cualquier duda o comentario no teman en escribir.

Éxito.


Este ejemplo lo puedes ver en el siguiente enlace:

Ver Ejemplo ejemplo funcionando de Guardar en Base de Datos las Filas agregadas con xajax y PHP

Tambien puedes decargar estos ejemplos:

Ver Ejemplo archivos de Guardar en Base de Datos las Filas agregadas con xajax y PHP
Si te gustó o te sirvió, ya sabes que hacer ;-)

Esta entrada fue publicada el Martes, 10 de Marzo de 2009 a las 20:01 y está clasificada bajo: PHP, xajax. Puede hacer un seguimiento de los comentarios de esta entrada gracias al feed RSS 2.0. Puede dejar un comentario, o enviar un trackback desde su sitio.

« Como agregar filas o rows a una tabla dinamicamente mediante xajax
Como utilizar autocompletex (suggest) de jQuery y no morir en el intento. »

34 comentarios sobre “Guardar en Base de Datos las filas agregadas dinamicamente con xajax”

cristian dijo:
11 de Marzo, 2009 - 2:29

Muuuchas Gracias….!
Tan perdido no andaba!!!!!

Ricardo dijo:
13 de Abril, 2009 - 7:50

En este ejemplo, ¿se ejecuta la sentencia SQL en algún momento?

No os podéis imaginar cuanto ayuda y conocimiento estoy adquiriendo con vosotros. Muchas gracias

e_all dijo:
13 de Abril, 2009 - 9:30

Claro, en la sentencia $conn->EjecutarSQL($Str_SQL); se ejecuta la consulta guardada en $Str_SQL solo que en el ejemplo estan comentados todos los accesos a la base de datos.

Te recomiendo que descargues los archivos y los analices.

cualquier duda, solo pregunta.

Adios.

Abigail dijo:
27 de Mayo, 2009 - 17:42

Una pregunta… ya está creada la función que realiza la conexión a BD en alguna parte de los archivos descargables? o se tiene que crear aparte?

Gracias!!! :D

e_all dijo:
27 de Mayo, 2009 - 17:54

no está incluido el archivo pero te lo adjunto aquí
http://prodev.cl/archivos/class.conexionDB.inc.php.txt

Abigail dijo:
27 de Mayo, 2009 - 17:58

:D MUUUUCHAS GRACIAS!!!!

Xavier dijo:
28 de Mayo, 2009 - 12:30

Hola e_all el dia de ayer me puse a investigar sobre XAJAX y ne encontre con post me parecio muy interesante, sabes soy un poco lobato aun en esto
y te queria pedir como harias para insertar sin q te salga ese mesaje de alerta al ingresar un nuevo dato.
Gracias por tu tiempo

e_all dijo:
28 de Mayo, 2009 - 12:39

solo tienes que comentar la linea que dice
$respuesta->addAlert($Str_SQL);
la cual imprime la consulta que estoy realizando a la base de datos.

Exito.

Xavier dijo:
28 de Mayo, 2009 - 13:06

Gracias por tu respuesta.
te queria consultar los trabajos q pressentas aqui en que version estan? 2.0 de XAJAX?

e_all dijo:
28 de Mayo, 2009 - 13:12

estan en la versión 0.2.x

pero puedes migrarlas facilmente con el articulo que en la pagina oficial publicaron

http://www.xajaxproject.org/en/docs-tutorials/upgrading-from-xajax-0-2-x-to-0-5/

exito.

Xavier dijo:
28 de Mayo, 2009 - 13:27

Gracias de nuevo te quiero comentar q estoy empezando a realizar un pequeño pryecto un directorio telefonico
mira me descague en la web http://xajaxproject.org/en/download/ la version 0.5 compiled y la 0.5 standar para empezar al descomprimir me vi con la sorpresa q el compiled solo habia dos carpetas q creo son de configuracion y bueno descomprimi la standar y ahi si estaban varias carpetas incluidas los ejemplos mmm mi duda es: no se si estara bien lo q hice cambie las carpetas xajax_core,xajax_js que estaban en la version standar por las de la version compiled la verdad no se la diferencia de ambas ahora para probar los archivos tengo q modificar el nombre de un archivo xajax.inc.php a xajaxAIO.inc.php quisiera saber si hice bien o mal podrias orientarme…

e_all dijo:
28 de Mayo, 2009 - 15:58

Xavier, no quiero mentirte, aun no me he dedicado a usmear la nueva librería de xajax, pero por lo que veo, la diferencia esta en que incluye todas las funcionalidades en un solo archivo AIO (All In One). por lo que para efectos practicos es casi lo mismo.

Te recomiendo para empezar que utilices la standard o la minimal, aunque en realidad será lo mismo con la diferencia que si te interesa ver como funciona, en la compiled te será muuuuuy dificil.
Y con respecto a si esta bien cambiar de xajax.inc.php a xajaxAIO.inc.php, me parece que debería funcionar. De todas formas te repito que debes pasar los códigos desde 0.2 a 0.5
Espero haberte ayudado.

Xavier dijo:
28 de Mayo, 2009 - 16:20

e_all con responderme hiciste mucho te agradesco, estoy optando por la version standar y bueno estuve investigando los cambios entre versiones asi cmo las sintaxis etc.
Bueno ire practicando paso a paso muchas gracias por tu time es un nuevo mundo para alguien q hasta hace poco programaba estructuradamente en php
:D ahora tambien estoy viendo frameworks como zend cake y codeigniter si tengo alguna duda te molestare de nuevo gracias :D .

Neo07 dijo:
29 de Mayo, 2009 - 10:36

Muchas Gracias, muy util este ejemplo con Xajax, la verdad, este framework para PHP es muy bueno, me gustó, pese a que todavia esta en pañales … espero que inserte mas ejemplos …

Saludos …

Cartaier dijo:
21 de Agosto, 2009 - 4:56

Hola:
Al guardar datos me aparece un mensaje de error:
Invalid argument supplied for foreach()en la línea 92 del código. No sé por qué no me recorre el array para guardar los datos :-(
Gracias por adelantado.

e_all dijo:
21 de Agosto, 2009 - 10:44

Eso puede llegar a ocurrir en el caso de que no hayas agregado el campo en forma de arreglo de inputs, en este caso hdnIdCampos. al agregarlo como fila debe llevar corchetes el nombre ( hdnIdCampos[] ) para que sea tomado con un arreglo. Te recomiendo que hagas un dump de la variable antes del foreach para ver de que tipo es y en que casos ocurre el fenomeno.

echo var_dump($hdnIdCampos);

Cualquier cosa me dices.

Cartaier dijo:
25 de Agosto, 2009 - 4:27

En la cadena que genera la fila el nombre del campo va como corchetes, tal cual lo descargué de esta web (pego el código):
$str_html_td7 = ”;
Pero sigue dando error…

e_all dijo:
26 de Agosto, 2009 - 11:33

No se que pasó con el codigo que pegaste, pero me parece que está incompleto. enviamelo a soporte(en)prodev.cl y veré si puedo ayudarte a solucionar tu inconveniente. ;)

kaba dijo:
30 de Agosto, 2009 - 22:24

hola oye yo tengo una pregunta como lo puedo guardar si utilizo como base de datos a postgresql espero me puedas ayudar mil gracias

e_all dijo:
31 de Agosto, 2009 - 9:24

Solo deberías cambiar las instrucciones SQL según el lenguaje que maneja postgres aunque no creo que sea necesario. Lo que si se cambia es la forma de conectar con la base de datos. Pero si utilizas postgres será sencillo para ti.

kaba dijo:
31 de Agosto, 2009 - 11:59

oki gracias lo intentare y te aviso que paso

kaba dijo:
31 de Agosto, 2009 - 15:59

hola oye otravez yo ya lo intente pero no hace ni marca ningun error porfavor dime donde te puedo enviar mi codigo para que lo cheques porfis

e_all dijo:
1 de Septiembre, 2009 - 12:52

Envialos a wordpress(en)prodev.cl y en cuanto pueda te ayudo ;-)

Pedro dijo:
19 de Septiembre, 2009 - 19:18

que tal! como le harias en caso de que la informacion ya estuviera en la base de datos y quisiera actualizarla, como le harias para que apareciera la informacion capturada en los renglones? ojala y me puedas ayudar

e_all dijo:
21 de Septiembre, 2009 - 10:11

bueno lo que hago yo es cargar al inicio las filas que ya se encuentran en la base de datos y luego agrego las nuevas filas. al momento de guardar en la BD borro todos los detalles y agrego los que están en el listdo que definió el usuario. Ahora si no puedes borrar todo, falta solo verificar si el nuevo item que estan agregarndo ya esta y mediante un update modificar los datos de la BD.

espero haberte ayudado.

zerokull dijo:
12 de Diciembre, 2009 - 18:56

hola soy muy novato en esto de xajax y en donde se pone la coneccion a mysq y la sentencias del insert into para insertar a la BD
 

eALL dijo:
15 de Diciembre, 2009 - 8:00

Hola zerokull, si bajas los archivos del tutorial notarás que hay una carpeta (la he añadido hoy) llamada conexion la que contiene una clase que te ayudará a ejecutar el sql y las conexiones para el proyecto. Solo debes configurarlas y listo.
Espero que te ayude.

Manuel dijo:
1 de Febrero, 2010 - 21:07

Xq me aparece este erros nose  me puedes Aclarar La Duda??
Notice: Undefined variable: xajax in C:\wamp\www\agregarfilaxajaxyguardar\agregarfilaxajaxyguardar.php on line 133

Fatal error: Call to a member function printJavascript() on a non-object in C:\wamp\www\agregarfilaxajaxyguardar\agregarfilaxajaxyguardar.php on line 133

Manuel dijo:
3 de Febrero, 2010 - 21:30

hola me podrias sacar de esa   duda que en ajax  nose  trabajar muy  biem soy novato xq me aparece ese error
Notice: Undefined variable: xajax in C:\wamp\www\agregarfilaxajaxyguardar\agregarfilaxajaxyguardar.php on line 133
Fatal error: Call to a member function printJavascript() on a non-object in C:\wamp\www\agregarfilaxajaxyguardar\agregarfilaxajaxyguardar.php on line 133
no me deja guardar en la Bd  nada puro carga en la tabla pero no guarda???..

espero su pronta repuesta  gracias ….

eALL dijo:
5 de Febrero, 2010 - 7:28

Manuel, lo mas probable es que no estés creando el objeto en PHP

$xajax=new xajax();         // Crea un nuevo objeto xajax
$xajax->;processRequests();

Quizá por eso te diga que intentas utilizar algo como un objeto en algo que no es un objeto. Otra causa podría ser que este fallando la inclución de la librería xajax al inicio del documento.
Espero haberte ayudado.

 

Manuel dijo:
6 de Febrero, 2010 - 3:23

La Verdad EL ejemplo es el mismo que descarge de este portal  y no le e hecho niguna modificacion
Xq Da error Nose Xq Con  Ajax Trabaja con Una secuencia Algo Complicada

eALL dijo:
9 de Febrero, 2010 - 9:18

Manuel, no tengo idea porque te falla. Todos estos ejemplos lo pruebo antes de subirlos y todos funcionan. Incluso son los mismos archivos de los ejemplos que puedes ver aqui. Quisas sea tu configuración de apache o php.
Lo siento.

Manuel dijo:
22 de Febrero, 2010 - 19:00

Disculpa que te vuelva a Molestar pero que servidor de apache tu ultiliza

eALL dijo:
8 de Marzo, 2010 - 11:20

Utilizo appServ que contiene Apache, MySql y PHP.

Deje un comentario

Entradas (RSS) y Comentarios (RSS).
ProDev está gestionado con WordPress - Theme created by templatr