Foros del Web » Programando para Internet » Javascript » Frameworks JS »

listar datos de una consulta a una BD

Estas en el tema de listar datos de una consulta a una BD en el foro de Frameworks JS en Foros del Web. Wenas, el tema es el siguiente: Tengo un formulario desde el cual inserto en una BD con ajax y php y quiero que a la ...
  #1 (permalink)  
Antiguo 28/06/2006, 05:36
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
listar datos de una consulta a una BD

Wenas, el tema es el siguiente:

Tengo un formulario desde el cual inserto en una BD con ajax y php y quiero que a la derecha de este haya una capa en la que haya una capa x cada resultado de una consulta a una BD y que esto se actualice en tiempo real cada vez q inserte en la BD . El tema es que saco los datos con php y genero un xml del siguiente tipo:

Código:
<entrada>
   <titulo>
      titulo
   </titulo>
   <texto>
      texto
   </texto>
</entrada>
.
.
.
El problema es que no se sacar los datos de ese xml y despues hacer q x cada fila ajax inserte una div con el titulo de la entrada dentro de la div que mencione en el parrafo anterior. Espero haberme explicado bien y que puedan responderme. Gracias
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #2 (permalink)  
Antiguo 28/06/2006, 09:24
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
Simplificaré mi pregunta...

Como puedo listar con ajax una tabla de una BD mysql?
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #3 (permalink)  
Antiguo 28/06/2006, 10:18
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
ok ok, antes que neda nececitas definir correctamente la estructura del XML, para que asi sepas como accesar a los nodos. mira, tu XML puede quedar asi.
Código:
<tabla>
<entrada>
   <titulo>
      titulo
   </titulo>
   <texto>
      texto
   </texto>
</entrada>
<entrada>
   <titulo>
      titulo
   </titulo>
   <texto>
      texto
   </texto>
</entrada>
</tabla>
si te das cuenta, existe un NODO llamado tabla, este es el nodo principal, el cual puede tener muchos nodos entrada y entrada a su vez tiene un nodo titulo y uno texto.

ok, ahora lo que tienes que hacer es accesar a cada uno de los nodos en ese orden, primero al padre, luego a sus hijos, y asi te vaz hasta que llegues a donde quieres.

espero te sirva de ayuda.

have funnnnnn
  #4 (permalink)  
Antiguo 28/06/2006, 10:26
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
Si gracias, es una gran aclaracion pero aun tengo una duda, como hago para acceder a esos nodos y mostrar sus datos en un div?
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #5 (permalink)  
Antiguo 28/06/2006, 13:28
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
Por favor alguna buena persona que pueda responder a mi pregunta. ESTOY DESESPERADO!!! no encuentro nada en nigun sitio
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #6 (permalink)  
Antiguo 28/06/2006, 21:06
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
mira, ahorita no tengo mucho tiempo para explicarte a detalle, pero te pongo un ejemplo de como lo hago yo, asi lo analisas y haces el tuyo!

aqui el XML que recibo del servidor
Código:
<producto>
<msg>Inventario</msg>
<concepto>Medicina x</concepto>
<unitario>25.50</unitario>
<inventario>15</inventario>
<contenido>25</contenido>
<residuo>10</residuo>
<producto>
y asi lo tomo:

Código:
   /**
    * Esta funcion solicita la informacion del producto al servidor
    */
   function getProducto() {
   	   var codigo = document.getElementById('codigo');
       if (codigo.value != "") {
           var url = "getProducto?codigo=" + escape(codigo.value);
           var req = initRequest();
           req.onreadystatechange = function() {
	           // if xmlhttp shows "loaded"
               if (req.readyState == 4) {
               		// if "OK"
                   if (req.status == 200) {
                       parseInformacion(req.responseXML);//cuando el server responda....
                   } else if (req.status == 204){
                       alert("error al solicitar informacion al servidor");
                   }
               }
           }
           req.open("GET", url, true);
           req.send(null);
       }
   }
   //cuando responde el server se ejecuta esto
   function parseInformacion(responseXML){
   		var producto = responseXML.getElementsByTagName("producto")[0];//se toma el nodo principal
   		var porcion = document.getElementById('tipo[1]');
//se toman toso los otros nodos
   		var msg = producto.childNodes[0];
   		var con = producto.childNodes[1];
   		var uni = producto.childNodes[2];
   		var inv = producto.childNodes[3];
   		var piz = producto.childNodes[4];
   		var res = producto.childNodes[5];
   		
   		if(msg.childNodes[0]!=null && msg.childNodes[0].nodeValue!=""){
   			alert(msg.childNodes[0].nodeValue);
   		}else{
   			inventario = inv.childNodes[0].nodeValue;
   			piezas = piz.childNodes[0].nodeValue;
   			residuo = res.childNodes[0].nodeValue;
   			var concepto = document.getElementById('concepto');
   			var unitario = document.getElementById('precioUnitario');
   			
   			concepto.value = con.childNodes[0].nodeValue;
   			if(!porcion.checked)
   				unitario.value = uni.childNodes[0].nodeValue;
   			else
   				unitario.value = 1;
   			
   			calculaTotal();
   		}
   }
  #7 (permalink)  
Antiguo 29/06/2006, 02:07
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
muchas gracias! lo voy a analizar y si tengo alguna duda la pongo aki
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #8 (permalink)  
Antiguo 29/06/2006, 02:18
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
¿que hace la funcion initrequest()?
¿donde le digo q xml debe mirar?
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #9 (permalink)  
Antiguo 29/06/2006, 04:10
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
Viendo tu codigo y suponiendo algunas cosas de las q no estoy seguro he hecho esto:

Código:
function getPost() {
        var req = nuevoAjax();
		capatitulos = document.getElementById('capatitulos');
        req.onreadystatechange = function() {
			if (req.readyState == 4) {
				if (req.status == 200) {
					parseInformacion(req.responseXML);
				}else if (req.status == 204){
					capatitulos.innerHTML = 'Error al solicitar informacion al servidor.';
				}
			}
        }
		var url = "insertarpost.php?titulo="titulo);
        req.open("GET", url, true);
        req.send(null);
	}

   function parseInformacion(responseXML){
   		var entradas = responseXML.getElementsByTagName("entradas")[0];//se toma el nodo principal
   		var titulo = entradas.childNodes[0].titulo;
		capatitulos = document.getElementById('capatitulos');
		capatitulos.innerHTML = 'Titulo:'+titulo;
   }
La he ejecutado al final de la funcion que tengo para guardar los datos para q las muestre en una capa nada mas guardar algun dato. La funcion de guardar es esta:

Código:
function enviarForm(){
	var contenedor;
	var titulo;
	var post;
	contenedor = document.getElementById('contenedor');
	cambia_clase('contenedor','capamensaje');
	contenedor.innerHTML = '<center><img src="loading.gif">Loading...</center>';
	posttitulo=document.getElementById('titulo').value;
	posttext=document.getElementById('post').value;
	if (posttitulo=="" || posttext=="") {
		contenedor.innerHTML = '<center>Debe rellenar el titulo y el contenido.</center>';
	}else{
		ajax=nuevoAjax();
		ajax.open("GET","guardarpost.php?post="+posttext+"&titulo="+posttitulo,true);
		ajax.onreadystatechange=function() {
			if (ajax.readyState==4) {
				contenedor.innerHTML = ajax.responseText
			}
		}
		ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		ajax.send(null)
	}
        getPost();
}
pero no funciona, cuando las tengo puestas el formulario se recarga, salen las variables en la url y no sucede nada.
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #10 (permalink)  
Antiguo 29/06/2006, 05:28
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
He conseguido hacerlo sin xml, es decir, que saco directamente los valores con php y ajax de la base de datos y se muestra cada actualizacion sin recargar. Aun asi me gustaria que me aclarases el codigo de arriba para aprender a hacerlo tb con xml.
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #11 (permalink)  
Antiguo 29/06/2006, 17:24
Avatar de stock  
Fecha de Ingreso: junio-2004
Ubicación: Monterrey NL
Mensajes: 2.390
Antigüedad: 19 años, 10 meses
Puntos: 53
que bien que ya solucionaste tu problema...... ok ok, sorry, pero ayer ya estaba saliendo y ya no pude explicarte mejor.....

ammmmm, la funcion initrequest, lo unico que hace es inicilizar o instanciar la clase que usa AJAX para hacer la peticion al server, mira, aqui esta

http://www.forosdelweb.com/showpost....87&postcount=3

como accesas a los nodos despues de que el servidor te respondio? facil y rapidamente, justo asi:

primero tomo el nodo principal, que es el que contiene todos los demas nodos, en este caso <producto></producto>, de esta manera.

var producto = responseXML.getElementsByTagName("producto")[0];

una vez tengo el nodo principal, comienzas a accesar a sus hijos, como?, de esta manera:
Código:
var msg = producto.childNodes[0]; //al primer nodo <mensaje>
   		var con = producto.childNodes[1];//al segundo nodo <concepto></concepto>
   		var uni = producto.childNodes[2];
   		var inv = producto.childNodes[3];
   		var piz = producto.childNodes[4];
   		var res = producto.childNodes[5];
ahora, con eso ya tienes cada nodo separado en variables, lo que sigue es sacar el value de cada nodo, y se ahce asi:

inv.childNodes[0].nodeValue

con esa instruccion estoy accesando al contenido del tag <inventario>Tomo esto</inventario>

si te vas cuenta estoy accesando al nodo 0, esto significa que inclusive puedo tener mas nodos dentro de este nodo, pero como no tengo nada, sino que la informacion, pues acceso al valor unicamente.

bueno, espero quede un poco mas claro....

have funnnnnn

Última edición por stock; 29/06/2006 a las 17:30
  #12 (permalink)  
Antiguo 30/06/2006, 01:25
 
Fecha de Ingreso: abril-2005
Ubicación: Melilla
Mensajes: 120
Antigüedad: 19 años
Puntos: 1
Muchas gracias!!! Gran explicacion stock! solo una cosilla mas (q pesaillo q soy ^^) una vez q tengo el valor de todos los nodos que quiero, x ejemplo:

Código:
<productos>
  <producto>
    <msg>Inventario</msg>
    <concepto>Medicina x</concepto>
    <unitario>25.50</unitario>
    <inventario>15</inventario>
    <contenido>25</contenido>
    <residuo>10</residuo>
  </producto>
  <producto>
    <msg>Inventario</msg>
    <concepto>Medicina x</concepto>
    <unitario>25.50</unitario>
    <inventario>15</inventario>
    <contenido>25</contenido>
    <residuo>10</residuo>
  </producto>
  <producto>
    <msg>Inventario</msg>
    <concepto>Medicina x</concepto>
    <unitario>25.50</unitario>
    <inventario>15</inventario>
    <contenido>25</contenido>
    <residuo>10</residuo>
  </producto>
  .
  .
  .
</productos>
Si quiero coger e ir metiendo los valores dentro de un array, es decir, un array para cada tido de nodo (arraymsg, arraycon, etc) como puedo pasar esos arrays a un php para mostrar los datos por pantalla?
__________________
No soy vago, solo soy tímido ante el esfuerzo...
  #13 (permalink)  
Antiguo 30/06/2006, 07:45
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Para parsear el XML: http://www.magicparser.com
parece sencillo..!! LAstima que hay q comprarlo, pero por ahi debe de haber una versiona pirata. jaja
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:23.