Foros del Web » Programando para Internet » PHP »

Usar correctamente mysql_fetch_array

Estas en el tema de Usar correctamente mysql_fetch_array en el foro de PHP en Foros del Web. Hola. Estoy haciendo un foro y mi problema es el siguiente: Código PHP:         <div class="contenedor">             <div class="contenido">                 <div class="barra_titulo_div">                  <?php                      while ( $FORO  =  mysql_fetch_array ( $consultando ...
  #1 (permalink)  
Antiguo 14/08/2011, 02:22
 
Fecha de Ingreso: abril-2011
Ubicación: España, Mdrid
Mensajes: 89
Antigüedad: 13 años
Puntos: 1
Usar correctamente mysql_fetch_array

Hola. Estoy haciendo un foro y mi problema es el siguiente:

Código PHP:
        <div class="contenedor">
            <div class="contenido">
                <div class="barra_titulo_div">
                <?php
                    
while ($FORO mysql_fetch_array($consultandoMYSQL_ASSOC)) {
                         
$autor $FORO["autor_mensaje"];
                        echo 
'<table class="barra_titulo">
                        <tr>
                            <td><b>Titulo:</b></td>
                            <td>'
.$FORO["titulo_mensaje"].'</td>
                            <td><b>Fecha:</b></td>
                            <td>'
.$FORO["fecha_mensaje"].'</td>
                        </tr>
                    </table>
                </div>
            <p>'
.$FORO["cuerpo_mensaje"].'</p>
            </div>
        </div>'


                            } 
                
$consulta2="SELECT * FROM usuarios WHERE usuario='".$autor."';";
                
$consultando2 mysql_query($consulta2$conectar);
                
mysql_data_seek($consultando0);
                while (
$FORO2 mysql_fetch_array($consultando2MYSQL_ASSOC)) {
        echo 
'
        <div class="usuario">
            <div class="avatar">
            <img src="'
.$FORO2["avatar"].'" alt="Avatar de '.$FORO2["usuario"].'" height="135px" width="150px"/>
            </div>
            <table class="tabla_usuario" cellpadding="3">
                <tr>
                    <td><b>Usuario:</b></td>
                    <td>'
.$FORO2["usuario"].'</td>
                </tr>
                <tr>
                    <td><b>Nivel:</b></td>
                    <td>'
.$FORO2["nivel"].'</td>
                </tr>
                <tr>
                    <td><b>Mensajes:</b></td>
                    <td>'
.$FORO2["numero_mensajes"].'</td>
                </tr>
                <tr>
                    <td><b>Karma:</b></td>
                    <td>'
.$FORO2["puntuacion"].'</td>
                </tr>
            </table>
        </div>'
; }
                    
$consulta="SELECT * FROM respuestas WHERE id_mensaje=$id_mensaje";
                    
$consultando mysql_query($consulta$conectar);
                    
mysql_data_seek($consultando20);
                    while (
$FORO mysql_fetch_array($consultandoMYSQL_ASSOC)) {
                    
$autor_respuesta $FORO["autor_respuesta"];
                        echo 
'
        <div class="contenedor">
            <div class="contenido">
                <div class="barra_titulo_div">
                    <table class="barra_titulo">
                        <tr>
                            <td><b>Titulo:</b></td>
                            <td>'
.$FORO["titulo_respuesta"].'</td>
                            <td><b>Fecha:</b></td>
                            <td>'
.$FORO["fecha_respuesta"].'</td>
                        </tr>
                    </table>
                </div>
                    <p>'
.$FORO["texto_respuesta"].'</p>
            </div>
        </div>'
; }
                
$consulta2="SELECT * FROM usuarios WHERE usuario='".$autor_respuesta."';";
                
$consultando2 mysql_query($consulta2$conectar);
                
mysql_data_seek($consultando0);
                while (
$FORO2 mysql_fetch_array($consultando2MYSQL_ASSOC)) {
        echo 
'
        <div class="usuario">
            <div class="avatar">
            <img src="'
.$FORO2["avatar"].'" alt="Avatar de '.$FORO2["usuario"].'" height="135px" width="150px"/>
            </div>
            <table class="tabla_usuario" cellpadding="3">
                <tr>
                    <td><b>Usuario:</b></td>
                    <td>'
.$FORO2["usuario"].'</td>
                </tr>
                <tr>
                    <td><b>Nivel:</b></td>
                    <td>'
.$FORO2["nivel"].'</td>
                </tr>
                <tr>
                    <td><b>Mensajes:</b></td>
                    <td>'
.$FORO2["numero_mensajes"].'</td>
                </tr>
                <tr>
                    <td><b>Karma:</b></td>
                    <td>'
.$FORO2["puntuacion"].'</td>
                </tr>
            </table>
        </div>'
; }

                
                  
?>


Como podréis observar yo tengo varios mysql_fetch_array en el código de ahí arriba, el problema que tengo, es el que veís en la foto. Los divs de mensajes y respuestas se muestran bien pero los divs del usuarios se muestra únicamente en la última respuesta. Posiblemente sea problema de la varible $autor_respuesta y que con ella solo llamo a un usuario... o quizá sea un mal uso de dicha función.

Gracias de antemano.
  #2 (permalink)  
Antiguo 14/08/2011, 02:43
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: Usar correctamente mysql_fetch_array

No he mirado mucho el código porque no suelo usar las consultas así en php, pero veo que la variable $autor_respuesta está en el segundo bucle y su valor cambia en cada fila, por tanto sólo tendrá el del último usuario.
Así que aunque hagas el siguiente bucle sólo saldrá ese último usuario.

Otra cosa:
No es que esté mal hecho, porque efectivamente te está devolviendo un array asociativo al añadir en el mysql_fetch_array un result_type: MYSQL_ASSOC, pero podrías hecharle un vistazo a esto:

http://www.php.net/manual/es/functio...etch-assoc.php
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #3 (permalink)  
Antiguo 14/08/2011, 03:37
 
Fecha de Ingreso: abril-2011
Ubicación: España, Mdrid
Mensajes: 89
Antigüedad: 13 años
Puntos: 1
Entonces... Qué me recomendais incorporar para que no salga el usuario sólo en la última respuesta.
  #4 (permalink)  
Antiguo 14/08/2011, 06:35
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: Usar correctamente mysql_fetch_array

Principalmente cambiar la estructura, ya que desde mi punto de vista te has complicado...

pero por si te corre prisa y te da igual como lo tengas (cosa mala) podrías:

$autor_respuesta hacerlo un array.
En vez de hacer el bucle con la consulta hacerlo con el número de elementos del array y ahí hacer la consulta.

Código PHP:
foreach ($autor_respuesta as $key => $value)
{
       
$consulta2="SELECT * FROM usuarios WHERE usuario='".$value."';";

       
$consultando2 mysql_query($consulta2$conectar);
       
mysql_data_seek($consultando0);
       if(
$FORO2 mysql_fetch_array($consultando2MYSQL_ASSOC)) { 
        
// Aquí los divs con los datos del usuario.
       
}

De todas formas no sé como estableces la conexión ni nada de eso pero sigo pensando que es innecesario todo del mysql_data_seek(), ponerle la conexión al mysql_query() en cada consulta... usar un fetch_array y depués decirle que use MYSQL_ASSOC teniendo en php mysql_fetch_assoc(); y esas cositas así, pero son consejos, sólo digo que eso se podría simplicar.

Saludos.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #5 (permalink)  
Antiguo 20/08/2011, 09:22
 
Fecha de Ingreso: abril-2011
Ubicación: España, Mdrid
Mensajes: 89
Antigüedad: 13 años
Puntos: 1
Respuesta: Usar correctamente mysql_fetch_array

Cita:
Iniciado por IEKK Ver Mensaje
Principalmente cambiar la estructura, ya que desde mi punto de vista te has complicado...

pero por si te corre prisa y te da igual como lo tengas (cosa mala) podrías:

$autor_respuesta hacerlo un array.
En vez de hacer el bucle con la consulta hacerlo con el número de elementos del array y ahí hacer la consulta.

Código PHP:
foreach ($autor_respuesta as $key => $value)
{
       
$consulta2="SELECT * FROM usuarios WHERE usuario='".$value."';";

       
$consultando2 mysql_query($consulta2$conectar);
       
mysql_data_seek($consultando0);
       if(
$FORO2 mysql_fetch_array($consultando2MYSQL_ASSOC)) { 
        
// Aquí los divs con los datos del usuario.
       
}

De todas formas no sé como estableces la conexión ni nada de eso pero sigo pensando que es innecesario todo del mysql_data_seek(), ponerle la conexión al mysql_query() en cada consulta... usar un fetch_array y depués decirle que use MYSQL_ASSOC teniendo en php mysql_fetch_assoc(); y esas cositas así, pero son consejos, sólo digo que eso se podría simplicar.

Saludos.
No me funciona, me dice que el argumento no es válido para foreach. Ahora he quitado todos los mysql_data_seek(); y he usado el mysql_fetch_assoc... Que alternativas hay, esto me está desesperando
  #6 (permalink)  
Antiguo 20/08/2011, 10:11
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Usar correctamente mysql_fetch_array

Puedes usar JOIN en tus consultas, de manera que no tengas que estar buscando info del usuario en cada iteracion del ciclo.

Ejemplo:
Código MySQL:
Ver original
  1. SELECT mensajes.*, usuarios.* FROM mensajes JOIN usuarios ON usuarios.id = mensajes.autor WHERE mensajes.tema = ### ORDER BY mensajes.fecha
__________________
- León, Guanajuato
- GV-Foto

Etiquetas: mysql_fetch_array
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 02:53.