Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Mi for() me devuelve datos innecesarios

Estas en el tema de Mi for() me devuelve datos innecesarios en el foro de PHP en Foros del Web. Hola amigos, esto es algo muy básico, pero la verdad me esta rompiendo la cabeza por que no encuentro la solución al problema. Tengo una ...
  #1 (permalink)  
Antiguo 24/08/2014, 08:59
Avatar de dario_sanz  
Fecha de Ingreso: marzo-2010
Mensajes: 94
Antigüedad: 14 años
Puntos: 3
Busqueda Mi for() me devuelve datos innecesarios

Hola amigos, esto es algo muy básico, pero la verdad me esta rompiendo la cabeza por que no encuentro la solución al problema.
Tengo una simple, pero tan simple consulta a la base datos:

Código:
Select * from 'nombre de tabla'
A esta consulta la guardo en una variable que esta dentro de un método, a su vez dentro de una clase.

Código PHP:
class madre{
public function 
ID(){

        
$sql1 "select * from nombre de tabla";  
        
        
//echo $sql1;
        
$res =  mysql_query($sql1,class_con::conection());
        if(
mysql_num_rows($res) == 0){ echo "Hay un problema en la consulta";}else{
        while(
$res_array mysql_fetch_array($res)){
                
                
$this->variable[] = $res_array;
                
                }
            return 
$this->variable;
        }
    
    
    }

Inicializo y llamo al método para luego mostrar los datos

Código PHP:
$madre= new madre();
$id $madre->ID(); 
Código PHP:
<?php for($p=0;$p<sizeof($id);$p++){?>
    <table width="703" border="0" id="id_pet_0" cellpadding="2" cellspacing="2" >
      <tr>
        <td width="537" bgcolor="#CAF1FF"><h6><?=$id[$p]["id"]?></h6></td>
        <td width="145" rowspan="2" align="center" bgcolor="#CAF1FF"><h6>imagen</h6></td>
      </tr>
      <tr>
        <td bgcolor="#CAF1FF"><a href="">
          <h6>Ver datos</h6>
        </a></td>
        </tr>
    </table>
    <?php }?>
A todo esto me muestra los siguientes datos adjuntados en la imagen



Como podrán ver los datos reales comienzan a verse desde el numero 7, los datos anteriores son falsos, osea que el sistema debe mostrarme los datos desde el 7 en adelante no los anteriores.
Aclaro que la consulta funciona bien con en el motor de pueba SQL de Mysql y he probado de varias forma, por eso es mi decision de poner esta pregunta en PHP.

Saludos y gracias de ante mano!


Última edición por dario_sanz; 24/08/2014 a las 09:07
  #2 (permalink)  
Antiguo 24/08/2014, 10:54
 
Fecha de Ingreso: abril-2014
Mensajes: 37
Antigüedad: 10 años
Puntos: 2
Respuesta: Mi for() me devuelve datos innecesarios

No entendi muy bien tu pregunta, pero intenta con un foreach en vez de un for.

Código PHP:
Ver original
  1. foreach ($results as $key => $value) {
  2.     echo $value["VALOR"];
  3. }
  #3 (permalink)  
Antiguo 24/08/2014, 11:06
 
Fecha de Ingreso: mayo-2012
Mensajes: 49
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Mi for() me devuelve datos innecesarios

No debería ser, pero pregunto ..., ¿no puede ser que esos registros, por algún extraño motivo no tengan el id?, un poco raro, pero los datos no aparecen si no están.

El código está bien, saludos.
__________________
Puedes visitarme en uno-de-piera
  #4 (permalink)  
Antiguo 24/08/2014, 11:36
Avatar de dario_sanz  
Fecha de Ingreso: marzo-2010
Mensajes: 94
Antigüedad: 14 años
Puntos: 3
Respuesta: Mi for() me devuelve datos innecesarios

Cita:
Iniciado por israel965 Ver Mensaje
No debería ser, pero pregunto ..., ¿no puede ser que esos registros, por algún extraño motivo no tengan el id?, un poco raro, pero los datos no aparecen si no están.

El código está bien, saludos.
Si tiene el ID, es auto incrementable
  #5 (permalink)  
Antiguo 24/08/2014, 11:48
 
Fecha de Ingreso: mayo-2012
Mensajes: 49
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Mi for() me devuelve datos innecesarios

El código copiado y pegado con otra tabla funciona 100%
__________________
Puedes visitarme en uno-de-piera
  #6 (permalink)  
Antiguo 24/08/2014, 11:53
Avatar de dario_sanz  
Fecha de Ingreso: marzo-2010
Mensajes: 94
Antigüedad: 14 años
Puntos: 3
Respuesta: Mi for() me devuelve datos innecesarios

Cita:
Iniciado por robertty55 Ver Mensaje
No entendi muy bien tu pregunta, pero intenta con un foreach en vez de un for.

Código PHP:
Ver original
  1. foreach ($results as $key => $value) {
  2.     echo $value["VALOR"];
  3. }
Funciona igual que el for();
El tema esta en que si lo hago fuera de la tabla, por ejemplo en la linea 1, antes de los tag HTML y lo ejecuto solo con PHP, funciona a la perfección; pero ahora si le agrego una estructura HTML o lo ejecuto dentro de ella me repiten esos datos que son falsos o datos sin ID.

Código PHP:

for($p=0;$p<sizeof($id);$p++){
    echo 
' <table  >
      <tr>
        <td width="537"><h6>'
.$id[$p]["id_var"].'</h6></td>
        <td width="145" ><h6>qr</h6></td>
      </tr>
      <tr>
        <td><a href="">
          <h6>Ver datos</h6>
        </a></td>
        </tr>
    </table>'
;

  #7 (permalink)  
Antiguo 24/08/2014, 12:13
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Mi for() me devuelve datos innecesarios

Cita:
Select * from 'nombre de tabla'
Supongo que no tienes una tabla que se llama 'nombre de tabla' ¿Verdad? ¿Costaría mucho poner el nombre real de la tabla?

Mas alla de eso, puedes probar este codigo:
Código PHP:
Ver original
  1. <?php
  2. class madre{
  3.     public function ID()
  4.    {
  5.         // No es buena practica usar el '*', solo trae los campos que necesites.
  6.         $sql = "SELECT id FROM madres";          
  7.         if(!($res =  mysql_query($sql, class_con::conection())))
  8.             echo "Hay un problema en la consulta";
  9.         else
  10.         {
  11.             $this->variable = []; // Inicializar la variable.
  12.             // No hay razon para usar MYSQL_BOTH (el valor por defecto) si solo vas a usar las claves asociativas.
  13.             while($this->variable[] = mysql_fetch_array($res, MYSQL_ASSOC));
  14.             return $this->variable;
  15.         }
  16.     }
  17. }
  18.  
  19. $madre= new madre();
  20. ?>
  21.  
  22.     <table width="703" border="0" id="id_pet_0" cellpadding="2" cellspacing="2" >
  23. <?php
  24. foreach($madre->ID() as $id)
  25. {
  26. ?>
  27.       <tr>
  28.         <td width="537" bgcolor="#CAF1FF">
  29.               <h6>
  30.                      <?=$id["id"]?>
  31.                      <br>
  32.                      <a href="">Ver datos</a>
  33.                </h6>
  34.         </td>
  35.         <td width="145" align="center" bgcolor="#CAF1FF"><h6>imagen</h6></td>
  36.       </tr>
  37. <?php
  38. }
  39. ?>
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #8 (permalink)  
Antiguo 24/08/2014, 12:45
Avatar de dario_sanz  
Fecha de Ingreso: marzo-2010
Mensajes: 94
Antigüedad: 14 años
Puntos: 3
Respuesta: Mi for() me devuelve datos innecesarios

Cita:
Iniciado por NSD Ver Mensaje
Supongo que no tienes una tabla que se llama 'nombre de tabla' ¿Verdad? ¿Costaría mucho poner el nombre real de la tabla?

Mas alla de eso, puedes probar este codigo:
Código PHP:
Ver original
  1. <?php
  2. class madre{
  3.     public function ID()
  4.    {
  5.         // No es buena practica usar el '*', solo trae los campos que necesites.
  6.         $sql = "SELECT id FROM madres";          
  7.         if(!($res =  mysql_query($sql, class_con::conection())))
  8.             echo "Hay un problema en la consulta";
  9.         else
  10.         {
  11.             $this->variable = []; // Inicializar la variable.
  12.             // No hay razon para usar MYSQL_BOTH (el valor por defecto) si solo vas a usar las claves asociativas.
  13.             while($this->variable[] = mysql_fetch_array($res, MYSQL_ASSOC));
  14.             return $this->variable;
  15.         }
  16.     }
  17. }
  18.  
  19. $madre= new madre();
  20. ?>
  21.  
  22.     <table width="703" border="0" id="id_pet_0" cellpadding="2" cellspacing="2" >
  23. <?php
  24. foreach($madre->ID() as $id)
  25. {
  26. ?>
  27.       <tr>
  28.         <td width="537" bgcolor="#CAF1FF">
  29.               <h6>
  30.                      <?=$id["id"]?>
  31.                      <br>
  32.                      <a href="">Ver datos</a>
  33.                </h6>
  34.         </td>
  35.         <td width="145" align="center" bgcolor="#CAF1FF"><h6>imagen</h6></td>
  36.       </tr>
  37. <?php
  38. }
  39. ?>
Ese código hace lo mismo que el mio, el problema está cuando le agregas HTML.... es como si creara 8 espacios en la memoria y los mostrara como datos vacíos. Osea que si tiene que mostrar 16 ID distintos muestra primero los 8 datos vacíos (8 espacios "</br>") y luego después los 16 datos separados, por ejemplo:

Sin HTML

Código PHP:

 <?php for($p=0;$p<sizeof($id);$p++){?>


    <?=$id[$p]["id"]?>

    <?php }?>

Resultado en pantalla : 7 8 9 10 11 12 13 .....

Con HTML (agregamos al [echo] echo "- </br>" el la linea anterior antes de mostrar el ID)

Código PHP:

 <?php for($p=0;$p<sizeof($id);$p++){?>

  <?php echo '-</br>'?>

    <?=$id[$p]["id"]?>

    <?php }?>
Resultado en pantalla
-
-
-
-
-
-
-
-
-7
-8
-9
-10
etc..........

Saludos y muchas gracias....sigo buscando la solución
  #9 (permalink)  
Antiguo 24/08/2014, 16:01
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: Mi for() me devuelve datos innecesarios

El problema no es el html, el problema es que la consulta (o algo que ya hay en el array) esta anteponiendo 8 registros vacios, si no muestras html, igual esta mostrando 8 registros vacios, solo que no los ves justamente porque estan vacios.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #10 (permalink)  
Antiguo 25/08/2014, 03:28
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 13 años, 6 meses
Puntos: 123
Respuesta: Mi for() me devuelve datos innecesarios

Comprueba el contenido del array con print_r para ver que contiene y como lo contiene.

Si la primera clave del array es 7, que es lo que creo, es normal que te imprima los primeros registros vacios, ya que tal y como esta el for empiezas a recorrer el array en la clave 0 y no en la 7 que es don esta el primer valos, por lo que de 0 a 6 se imprime vacio.

Comprueba que no sea esto lo que esta pasando.
  #11 (permalink)  
Antiguo 25/08/2014, 09:41
Avatar de dario_sanz  
Fecha de Ingreso: marzo-2010
Mensajes: 94
Antigüedad: 14 años
Puntos: 3
Respuesta: Mi for() me devuelve datos innecesarios

Cita:
Iniciado por xerifandtomas Ver Mensaje
Comprueba el contenido del array con print_r para ver que contiene y como lo contiene.

Si la primera clave del array es 7, que es lo que creo, es normal que te imprima los primeros registros vacios, ya que tal y como esta el for empiezas a recorrer el array en la clave 0 y no en la 7 que es don esta el primer valos, por lo que de 0 a 6 se imprime vacio.

Comprueba que no sea esto lo que esta pasando.
Gracias por la idea, la verdad que no se me había ocurrido aplicar el print_r para seguir el array y por algún motivo,que no estoy seguro, pero creo que se creaba una redundancia de clases, me estaba bajando datos que si existían pero no era lo que la consulta sql estaba pidiendo, RARO!!
La solución fue crear una clase distinta y colocar el método sin heredar nada.
Muchas gracias a todos por la ayuda!!

Etiquetas: devuelve, mysql, select, sql, tabla, variable
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 22:46.