Comunidad de diseño web y desarrollo en internet online

while mysql_fetch_assoc no me muestra el último registro :(

Citar            
MensajeEscrito el 30 Mar 2008 06:32 pm
voy directo al grano con un ejemplo simplificado de mi problema:

tengo una tabla con 6 registros cargados
hago la consulta
"SELECT * FROM tabla ORDER BY id_registro DESC"
y luego:

Código :

while($datos=mysql_fetch_assoc($consulta)){ 
echo $datos['id_registro']."<br>";
}


y anda todo bien, con la excepción que el último registro cargado (o sea, el primero que debería traer, el registro nro 6 ) no lo muestra... empieza a partir del anteúltimo cargado (el numero 5)

...se puede solucionar de alguna forma que no sea poniendo echo $datos['id_registro']."<br>"; antes del while? o esa es la única solucion? o hay algo mal en mi código? :S

saludos y gracias! :D

Por angel_eskarlata

68 de clabLevel



Genero:Femenino  

Baires City

opera
Citar            
MensajeEscrito el 31 Mar 2008 01:20 pm
En ves de usar mysql_fetch_assoc deber usar mysql_fetch_array.-

Código :

     $query = "select * from Tabla";
     $query .= ' order by `id` Asc ';
     $result = mysql_query($query,$link);
        while($row = mysql_fetch_array($result)){
                 echo $datos['id_registro']."<br>";
            };


Mysql_fetch_assoc: Devuelve una matriz asociativa que corresponde a la fila recuperada y mueve el apuntador de datos interno hacia adelante.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 01 Abr 2008 02:00 pm
gracias por responder york3rs, pero me da exactamente el mismo resultado =/

Por angel_eskarlata

68 de clabLevel



Genero:Femenino  

Baires City

opera
Citar            
MensajeEscrito el 01 Abr 2008 02:19 pm
es tonto no, perooooooooo...

si ejecutas esa sentencia en la "consola" si muestra los 6 registros.?

Por mauril26

161 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Abr 2008 03:02 pm

york3rs escribió:


Código :

     $query = "select * from Tabla";
     $query .= ' order by `id` Asc ';
     $result = mysql_query($query,$link);
        while($row = mysql_fetch_array($result)){
                 echo $datos['id_registro']."<br>";
            };




Reemplazaste tu codigo por el que puse, deberia funcionar.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 01 Abr 2008 03:06 pm
Ahora si, pon este codigo:

Código :

     $query = "select * from Tabla";
     $query .= ' order by `id_registro` Desc';
     $result = mysql_query($query,$link);
        while($row = mysql_fetch_array($result)){
                 echo $row['id_registro']."<br>";
            };

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 01 Abr 2008 03:07 pm

mauril26 escribió:

si ejecutas esa sentencia en la "consola" si muestra los 6 registros.?


sip, perfectamente =/

igual ya solucioné el problema de otra forma (menos mal que es para una página familiar y no hay problema en hacer algunos cambios imprevistos :P)

y también descubrí que se puede hacer con un do...while y anda bien... pero no entiendo por qué con el while solo no anda, por qué se come el último registro =/

de todos modos, el do...while tampoco funciona bien en mi caso (estoy haciendo una paginación), porque en las páginas siguientes queda fijo el último registro siempre (es decir, el primero que aparece, ya que los llamo ORDER BY id DESC), y los demás cambian correctamente...
@_@

Por angel_eskarlata

68 de clabLevel



Genero:Femenino  

Baires City

opera
Citar            
MensajeEscrito el 01 Abr 2008 03:15 pm

york3rs escribió:

Ahora si, pon este codigo:

Código :

     $query = "select * from Tabla";
     $query .= ' order by `id_registro` Desc';
     $result = mysql_query($query,$link);
        while($row = mysql_fetch_array($result)){
                 echo $row['id_registro']."<br>";
            };


es lo mismo, y no hace diferencia -.-''''
la unica diferencia que haces es poner el orden concatenado y cambiar el nombre de las variables... debería hacer alguna diferencia eso? porque no la hace....

Just in case, este es mi código:

Código :

$sql="SELECT * FROM imagen ORDER BY id_img DESC";
$consulta=mysql_query($sql, $con);
$imagenes=mysql_fetch_array($consulta);
while($imagenes=mysql_fetch_assoc($consulta)){
echo $imagenes['archivo'];

Por angel_eskarlata

68 de clabLevel



Genero:Femenino  

Baires City

opera
Citar            
MensajeEscrito el 01 Abr 2008 03:18 pm
El problema lo tiene tu codigo, por quen o pones todo el codigo, al parecer estas ya has pasado el primer dato antes de hacer el while.-
El Do while no deberia funcionar, por que como muestra algo si no le has pasado el arreglo a la variable "$datos";, por ello si es que te funciona es que le estas pasando la variabla antes de hacer el do while.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 02 Abr 2008 05:23 am
...no te entendí muy bien lo que dijiste yoek3rs....

pero *puede ser* que haya pasado el primer dato... aunque en realidad no...
el código es un poco largo y se reparte entre unos 4 archivos diferentes... se me complica un poco ponerlo
por un lado tengo el index.php que contiene las funciones y las llamadas a las páginas con include
entre ellas, tengo la galeria.php de imágenes (donde tengo el problema), y dentro de la de la galeria.php, va un include de menu.php, en cuyo codigo HAY también una llamada a la tabla imagen... pero no al primer registro (esta impresión lo que hace es llamar a un registro random del campo 'archivo'...)...
si mi lógica no me falla: o no debería estar sucediendo lo que sucede, o el primer registro que arroja la consulta en galeria.php debería ser el siguiente al que sale en menu.php, y no necesariamente el segundo/(anteúltimo).

....puede llegar a ser eso? :S

(vale aclarar que menu.php se incluye en todas las otras páginas, por eso requiero que tenga la llamada a la bdd)

Por angel_eskarlata

68 de clabLevel



Genero:Femenino  

Baires City

opera
Citar            
MensajeEscrito el 02 Abr 2008 01:13 pm
El error esta en tu codigo:

angel_eskarlata escribió:


Código :

$sql="SELECT * FROM imagen ORDER BY id_img DESC";
$consulta=mysql_query($sql, $con);
$imagenes=mysql_fetch_array($consulta);
while($imagenes=mysql_fetch_assoc($consulta)){
echo $imagenes['archivo'];



Tu tomas todos los datos de la DB en orden Desendente, osea desde el ultimo dato al primero, luego con "$imagenes=mysql_fetch_array($consulta);" tomas el primer dato que te retorla la DB y luego con "$imagenes=mysql_fetch_assoc($consulta)" tomas el segundo dato sucesibamente dentro del while. Por eso que pierdes el primer dato.-

Pdta.: A eso me referia en el Msj anterior, disculpa si no fui muy claro.-

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie7
Citar            
MensajeEscrito el 02 Abr 2008 01:37 pm
es decir, o usas el "array", o el "assoc"...

Código :

$sql="SELECT * FROM imagen ORDER BY id_img DESC";
$consulta=mysql_query($sql, $con);
while($imagenes=mysql_fetch_array($consulta)){
    echo $imagenes['archivo'];
}

y directamente en el while...

Por mauril26

161 de clabLevel



 

firefox
Citar            
MensajeEscrito el 03 Abr 2008 07:03 am
ap... no lo había entendido asi, y ahora sí tiene sentido :P
en cuanto pueda lo probaré y les cuento, gracias! :D

Por angel_eskarlata

68 de clabLevel



Genero:Femenino  

Baires City

opera

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.