Foros del Web » Programando para Internet » PHP »

error al listar nombre y puesto

Estas en el tema de error al listar nombre y puesto en el foro de PHP en Foros del Web. Hola, tengo una pagina en la que en una tabla me imprime "titulo""nombre" y "puesto" ejemplo: Nombre---------------Puesto ING. Juan Perez--------Gerente lo que pasa es que ...
  #1 (permalink)  
Antiguo 23/06/2014, 12:00
 
Fecha de Ingreso: abril-2014
Mensajes: 141
Antigüedad: 5 años, 6 meses
Puntos: 1
error al listar nombre y puesto

Hola, tengo una pagina en la que en una tabla me imprime "titulo""nombre" y "puesto"

ejemplo:

Nombre---------------Puesto
ING. Juan Perez--------Gerente

lo que pasa es que a partir de la persona que tiene el id=10009 el puesto que aparece en la tabla no es el correcto, en el apartado para editar la información de la persona aparece todo bien.

esto es como lo tengo:
Código PHP:
Ver original
  1. <div class="derecho">
  2.                        
  3.                        
  4.                      
  5.             <?php include("conecta.php");
  6.            
  7.  
  8.             include("acceso.php");
  9.            
  10.            
  11.             $dr = $_GET['ads'];
  12.            
  13.            
  14.             $link = connectToDB();
  15.            
  16.             $query = "SELECT id_persona, siglas, nombre, paterno, materno
  17.                   FROM dir_titulo
  18.                   LEFT JOIN dir_persona USING (id_titulo)
  19.                   WHERE id_adscripcion LIKE '".$dr."%' order by id_persona;";
  20.                  
  21.             $query2 = "SELECT id_persona, puesto, id_adscripcion
  22.                   FROM dir_puesto
  23.                   LEFT JOIN dir_persona USING (id_puesto)
  24.                   WHERE id_adscripcion LIKE '".$dr."%' order by id_persona";                 
  25.  
  26.  
  27.             $resultados = mysql_query($query)
  28.                     or die ("No se pudo realizar la consulta. " . mysql_error());
  29.                    
  30.             $resul = mysql_query($query2)
  31.                     or die ("No se pudo realizar la consulta. " . mysql_error());      
  32.              
  33.             $clave  = mysql_Result($link, "id_persona");
  34.            
  35.  
  36.             $num1 = 0;
  37.    
  38.             while ($mostrar = mysql_fetch_array($resultados, MYSQL_BOTH)
  39.                     and $cr = mysql_fetch_array($resul, MYSQL_BOTH) ) {
  40.                
  41.                 $clave  = $mostrar['id_persona'];
  42.                 $r1 = $mostrar['siglas'] .' '. $mostrar['nombre'] .' '. $mostrar['paterno'] .' '. $mostrar['materno'];
  43.                 $r2 = $cr['puesto'];
  44.                
  45.                 ?>
  46.                
  47.                 <table class="tabla1">
  48.                     <tr>
  49.                         <?php
  50.                             if($num1 % 2 == 0)
  51.                                 {
  52.                         ?>
  53.                         <td class="td1">                           
  54.                             <?php echo $r1; ?>
  55.                             </a>
  56.                         </td>      
  57.                         <td class="td2">
  58.                             <?php echo $r2; ?>
  59.                         </td>                      
  60.                         <td class="f"><a href="detalles_admin.php?id=<?php echo $clave; ?>">
  61.                         Editar
  62.                          </a>
  63.                         </td>
  64.                         <?php
  65.                                 }
  66.                             else
  67.                             {
  68.                         ?>
  69.                         <td class="td3">                           
  70.                             <?php echo $r1; ?>
  71.                             </a>
  72.                         </td>
  73.                         <td class="td4">
  74.                             <?php echo $r2; ?>
  75.                         </td>
  76.                         <td class="f"><a href="detalles_admin.php?id=<?php echo $clave; ?>">
  77.                         Editar
  78.                          </a>
  79.                         </td>
  80.                     <?php
  81.                     }
  82.                     ?>
  83.                     </tr>
  84.                 </table>
  85.                
  86.                
  87.         <?php
  88.             $num1 ++;          
  89.             }
  90.         ?>
  91.  
  92.                      <br/>
  93.                        <br/>
  94.                      
  95.                      
  96.                    <br/>
  97.  
  98.                        </div>
  #2 (permalink)  
Antiguo 23/06/2014, 17:02
 
Fecha de Ingreso: octubre-2010
Ubicación: España
Mensajes: 1.007
Antigüedad: 9 años, 1 mes
Puntos: 123
Respuesta: error al listar nombre y puesto

comprueba tu base de datos directamente, que no hayas guardado ese id con un puesto equivocado, ya que es estraño que los 10008 registros anteriores funcionen correctamente.
  #3 (permalink)  
Antiguo 23/06/2014, 17:19
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 7 años, 6 meses
Puntos: 319
Respuesta: error al listar nombre y puesto

Código PHP:
Ver original
  1. $query = "SELECT id_persona, siglas, nombre, paterno, materno
  2.                  FROM dir_titulo
  3.                  LEFT JOIN dir_persona USING (id_titulo)
  4.                  WHERE id_adscripcion LIKE '".$dr."%' order by id_persona;";
  5.                  
  6.             $query2 = "SELECT id_persona, puesto, id_adscripcion
  7.                  FROM dir_puesto
  8.                  LEFT JOIN dir_persona USING (id_puesto)
  9.                  WHERE id_adscripcion LIKE '".$dr."%' order by id_persona";

Esas dos consultas son diferentes, tu las usas como si retornaran los mismos valores pero la realidad es que una puede retornar un numero de resultados diferente de la otra.

El problema no es el registro 10009 o el que sea, el problema es que las dos consultas no son consistentes entre si, explota en ese numero pero podria explotar en cualquier otro y es solo una mera casualidad que no halla explotado antes.

Cuando trabajas con dos consultas paralelas que requieren ser consistentes, la mejor alternativa simpre es fucionarlas en una sola, de esta forma, es la base de datos la que revisa toda la integridad y te asegura que no ocurriran cosas como estas.

Código PHP:
Ver original
  1. $query = "SELECT DISTINCT
  2.             id_persona, siglas, nombre, paterno, materno, puesto, id_adscripcion
  3.           FROM
  4.             dir_titulo
  5.           LEFT JOIN
  6.             dir_persona ON dir_titulo.id_titulo = dir_persona.id_titulo
  7.           LEFT JOIN
  8.             dir_puesto ON dir_puesto.id_puesto = dir_persona.id_puesto
  9.           WHERE
  10.             id_adscripcion LIKE '".$dr."%' order by id_persona;";

Con esa consulta obtendrás los datos sin errores, no obstante, podrias considerar usar INNER en lugar de LEFT, desconociendo tus estructuras puede que no sea viable, pero si es posible te convendría hacerlo para evitar valores nulos.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 23/06/2014, 17:27
 
Fecha de Ingreso: abril-2014
Mensajes: 141
Antigüedad: 5 años, 6 meses
Puntos: 1
Respuesta: error al listar nombre y puesto

en el formulario de edición puedes cambiar el puesto, cambie el puesto de varios arriba de 10008 y en la base de datos cambia correctamente pero en la tabla a algunos su puesto se lo pone a la persona 2, 3 o filas abajo.

algunas partes del código ya eraban escritas y tiene varios fallos y errores como ese, voy a intentar ponerlo como dices, después me toca arreglar el desastre que esta hecho en esa web
  #5 (permalink)  
Antiguo 27/06/2014, 14:48
 
Fecha de Ingreso: abril-2014
Mensajes: 141
Antigüedad: 5 años, 6 meses
Puntos: 1
Respuesta: error al listar nombre y puesto

muchas gracias, así quedo bien:

Código PHP:
Ver original
  1. <?php
  2.            
  3.             $dr = $_GET['ads'];
  4.            
  5.            
  6.             $link = connectToDB();
  7.             $query = "SELECT DISTINCT
  8.            id_persona, siglas, nombre, paterno, materno, puesto, id_adscripcion
  9.          FROM
  10.            dir_titulo
  11.          LEFT JOIN
  12.            dir_persona ON dir_titulo.id_titulo = dir_persona.id_titulo
  13.          LEFT JOIN
  14.            dir_puesto ON dir_puesto.id_puesto = dir_persona.id_puesto
  15.          WHERE
  16.            id_adscripcion LIKE '".$dr."%' order by id_persona;";
  17.                          
  18.  
  19.  
  20.             $resultados = mysql_query($query)
  21.                     or die ("No se pudo realizar la consulta. " . mysql_error());
  22.            
  23.             $clave  = mysql_Result($link, "id_persona");
  24.            
  25.             //$i = 0 ;
  26.             $num1 = 0;
  27.    
  28.             while ($mostrar = mysql_fetch_array($resultados, MYSQL_BOTH)) {
  29.                
  30.                 $clave  = $mostrar['id_persona'];
  31.                 $r1 = $mostrar['siglas'] .' '. $mostrar['nombre'] .' '. $mostrar['paterno'] .' '. $mostrar['materno'];
  32.                 $r2 = $mostrar['puesto'];
  33.                
  34.                 ?>

Etiquetas: mysql, nombre, puesto, select, tabla
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:33.