Foros del Web » Programando para Internet » PHP »

Problemas al leer registros de una base

Estas en el tema de Problemas al leer registros de una base en el foro de PHP en Foros del Web. Hola gente el tema es que tengo una base la cual leo y esos datos los grabo en un xml, pero no se por que ...
  #1 (permalink)  
Antiguo 09/12/2005, 08:59
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 14 años, 10 meses
Puntos: 1
Problemas al leer registros de una base

Hola gente el tema es que tengo una base la cual leo y esos datos los grabo en un xml, pero no se por que razon no me lee el primer registro de la base, seguro que es un tema con ewl while pero no logro resolverlo.
Código PHP:
<?php require_once('../Connections/cnx.php'); ?> 
<?php 
mysql_select_db
($database_cnx$cnx); 
$query_rsd_noticias "SELECT * FROM noticia"
$rsd_noticias mysql_query($query_rsd_noticias$cnx) or die(mysql_error()); 
$row_rsd_noticias mysql_fetch_assoc($rsd_noticias); 
$totalRows_rsd_noticias mysql_num_rows($rsd_noticias); 
$documento "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><noticia >"
while(
$datos_b mysql_fetch_array($rsd_noticias)){ 
     
$documento.= "<datos id='".$datos_b['id_noticia']."' fecha='".$datos_b['fecha']."'/>"

$documento.= "</noticia>"
$mi_XML fopen('data.xml''w'); 
fwrite($mi_XML$documento); 
fclose($mi_XML); 
header('Content-Type: text/xml'); 
echo 
$documento
?> 
<?php 
mysql_free_result
($rsd_noticias); 
?>
Ademas se aceptan sugerencias en cuanto a la sintaxis utilizada.
Desde ya muchas gracias
__________________
Claudio Caldareri
diseñador Multimedial
www.disemedios.com.ar
  #2 (permalink)  
Antiguo 09/12/2005, 09:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
NO te lee el primer registro por qué haces:

$row_rsd_noticias = mysql_fetch_assoc($rsd_noticias);

Y luego:

while($datos_b = mysql_fetch_array($rsd_noticias)){

Las funciones xxx_fetch_xxx() lo que hacen es obtener el resultado desde donde está el puntero interno del resultado y lo mueven una posición hacia adelante. Por eso tu "mysql_fetch_array()" del "while()" que usas para recorrer los resultados obtenidos, empieza desde el 2° resultado que pudiera obtenerse.

Solución:
Elimina ese: $row_rsd_noticias = mysql_fetch_assoc($rsd_noticias);


Un saludo,
  #3 (permalink)  
Antiguo 09/12/2005, 11:18
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 14 años, 10 meses
Puntos: 1
ok, lo pruebo y te cuento

gracias!!!
__________________
Claudio Caldareri
diseñador Multimedial
www.disemedios.com.ar
  #4 (permalink)  
Antiguo 12/12/2005, 07:01
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 14 años, 10 meses
Puntos: 1
Hola, probe lo que me paso cluster y funciona, ahora bien necesito hacerle algunas modificaciones a esto y no logro que funcione, necesito que imprima esto

Código HTML:
- <noticiero>
- <noticia dia="29 de Mayo de 2005">
  <datos id="1" cabecera="%26Coria: no mostró lo esperado" url="fotografias/1.jpg" /> 
  </noticia>
- <noticia dia="30 de Mayo de 2005">
  <datos id="2" cabecera="Gaudio: perdido en su laberinto" url="fotografias/2.jpg" /> 
  <datos id="3" cabecera="Cañas: una luz para un luchador" url="fotografias/3.jpg" /> 
  <datos id="4" cabecera="Puerta: el regreso más soñado" url="no" /> 
  </noticia>
- <noticia dia="31 de Mayo de 2005">
  <datos id="5" cabecera="Intruso en el court central" url="fotografias/5.jpg" /> 
  </noticia>
- <noticia dia="08 de Disciembre del 2005">
  <datos id="6" cabecera="Federer v. Nadal, la final anticipada" url="fotografias/6.jpg" /> 
  </noticia>
  </noticiero> 
Pero me imprime esto

Código HTML:
 <?xml version="1.0" encoding="iso-8859-1" ?> 
- <noticiero>
- <noticia dia="29 de Mayo de 2005">
  <datos cabecera="Coria: no mostró lo esperado" url="fotografias/1.jpg" /> 
  <datos cabecera="Gaudio: perdido en su laberinto" url="fotografias/2.jpg" /> 
  </noticia>
  <noticia dia="30 de Mayo de 2005" /> 
  <noticia dia="31 de Mayo de 2005" /> 
  <noticia dia="08 de Disciembre del 2005" /> 
  </noticiero> 
Osea no entiendo por que razon en el if solo lee los datos que se relacionana con el primer registro de la otra tabla.

El codigo que tengo es este

Código PHP:
<?php require_once('../Connections/cnx.php'); ?>
<?php
mysql_select_db
($database_cnx$cnx);
$query_rsd_noticias "SELECT * FROM noticia";
$rsd_noticias mysql_query($query_rsd_noticias$cnx) or die(mysql_error());
$totalRows_rsd_noticias mysql_num_rows($rsd_noticias);

mysql_select_db($database_cnx$cnx);
$query_rsd_datos "SELECT * FROM datos";
$rsd_datos mysql_query($query_rsd_datos$cnx) or die(mysql_error());
$totalRows_rsd_datos mysql_num_rows($rsd_datos);

$documento "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><noticiero>"
for(
$i=0;$i<=$rsd_noticias;$i++){
    
$datos_b mysql_fetch_array($rsd_noticias);
        
$documento.="<noticia dia='".$datos_b['fecha']."'>";
          for(
$j=0;$j<=$rsd_datos;$j++){
            
$datos_c mysql_fetch_array($rsd_datos);
                   if(
$datos_b['id_noticia']==$datos_c['id_noticia_da']){
                 
$documento.= "<datos cabecera='".$datos_c['cabecera']."' url='".$datos_c['url']."'/>"
                }
            }
        
$documento.= "</noticia>"

$documento.= "</noticiero>"
$mi_XML fopen('data.xml''w'); 
fwrite($mi_XML$documento); 
fclose($mi_XML); 
header('Content-Type: text/xml'); 
echo 
$documento;
?>
<?php
mysql_free_result
($rsd_noticias);

mysql_free_result($rsd_datos);
?>
Pasando en limpio tengo dos tablas una que guarda los datos de la fecha y otra que guarda las noticias con una relacion en el campo id_noticia_da al id_datos de la otra tabla.

Se que es un tema en el if pero no logro sacarlo, ¿lguien me puede dar una mano?
__________________
Claudio Caldareri
diseñador Multimedial
www.disemedios.com.ar
  #5 (permalink)  
Antiguo 12/12/2005, 09:59
cmc
 
Fecha de Ingreso: febrero-2003
Ubicación: Capital
Mensajes: 1.317
Antigüedad: 14 años, 10 meses
Puntos: 1
Listo solucionado, me faltaba colocar el

$datos_c= mysql_data_seek($rsd_datos,0);

Para que vuelve al primer registro luego de lerlos en la primera vuelta.

De toda formas gracias
__________________
Claudio Caldareri
diseñador Multimedial
www.disemedios.com.ar
  #6 (permalink)  
Antiguo 12/12/2005, 10:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Si dices que hay una relación de ambas tablas por ID's .. deberías hacer una consulta SQL tipo:

Código:
SELECT datos.*,noticias.* FROM datos, noticias WHERE id_noticia_da.noticia = id_datos.datos
o Bien con INERT JOIN o equivalentes.

De esta forma generas un sólo resultado que recorrer, mucho más optimo que intentar "anidar" una consulta en otra (sub-consulta) como pretendes hacerlo.

En ese caso .. usa esta técnica de "acomulador" para representar los datos como buscas (noticia -> datos ... noticia -> datos ....)

http://www.forosdelweb.com/f18/problema-con-while-anidado-339398/
http://www.forosdelweb.com/f18/como-listo-estos-registros-mysql-319669/

(presta atención al orden que debes emplear como para "agrupar" esos datos y que todo esto funcione correctamente).

Un saludo,
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 05:34.