Ver Mensaje Individual
  #5 (permalink)  
Antiguo 09/01/2009, 13:31
Avatar de Triby
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: [S.O.S] Problema para mostrar resultados

Problemas de tu codigo:
1- Estabas haciendo 3 consultas, pudiendo hacer solo 1
2- Despues de cada consulta hacias 1 fetch_assoc innecesario
3- El orden de tus bucles estaba incorrecto

Aqui te dejo algo mas o menos corregido, por favor revisa todos los comentarios, hay cosas que tendras que modificar o no funcionara y, por favor, trata de entender como funciona (o como debiera funcionar ), espero que funcione (valga la rebuznancia).

Código php:
Ver original
  1. <?php
  2. require_once('Connections/cersol.php');
  3. include('connect.php');
  4. // Si vas a usar mucho esta funcion mejor ubicala en otro archivo; ejemplo: include 'rutinas_comunes.php';
  5. if (!function_exists("GetSQLValueString")) {
  6.     function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "") {
  7.         $theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
  8.         $theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
  9.         if($theValue == '') {
  10.             if($theType == 'defined')
  11.                 return $theNotDefinedValue;
  12.             return "NULL";
  13.         }
  14.         switch ($theType) {
  15.             case "date":
  16.             case "text":
  17.                 $theValue = "'$theValue'";
  18.                 break;
  19.             case "long":
  20.             case "int":
  21.                 $theValue = intval($theValue);
  22.                 break;
  23.             case "double":
  24.                 $theValue = "'" . doubleval($theValue) . "'";
  25.                 break;
  26.             case "defined":
  27.                 $theValue = $theDefinedValue;
  28.                 break;
  29.         }
  30.         return $theValue;
  31.     }
  32. }
  33. $colname_Recordset2 = "1";
  34. if (isset($_GET['tipe']))
  35.     $colname_Recordset2 = (get_magic_quotes_gpc()) ? $_GET['tipe'] : addslashes($_GET['tipe']);
  36.  
  37. mysql_select_db($database_cersol, $cersol);
  38. // Leemos las dos tablas en una sola consulta, uniendo por id de marca
  39. $query_Recordset2 = "SELECT i.*, m.* FROM imp_cd i, marca_cd m WHERE i.tipo = $colname_Recordset2 AND m.id = i.id_marca ORDER BY i.id_marca";
  40. $Recordset2 = mysql_query($query_Recordset2, $cersol) or die(mysql_error());
  41. $totalRows_Recordset2 = mysql_num_rows($Recordset2);
  42. if ($totalRows_Recordset2=="")
  43.     echo "No hay datos para mostrar";
  44. else {
  45.     // Variables de Configuraci&oacute;n -----------------------------------
  46.     // Define el numero de Filas
  47.     $n_filas=2;
  48.     $vert=ceil($tottal/$n_filas); // Redondeo hacia arriba siempre ceil(2.1) resulta en 3
  49.  
  50.     $a=0;// Colocando el contador horizontal en 0
  51.     $i=1;// Colocando el contador vertical en 0 // No se usa
  52.     $w=0;//Colocando un contador para el mensaje de "No hay articulos en esta acategoria" // No se usa
  53.  
  54.     $imps = array();
  55.     // Usamos fetch_row porque tienes nombres de campo iguales en ambas tablas
  56.     while($row = mysql_fetch_row($Recordset2))
  57.         $imps = $row;   //Aqui estan las impresoras con las marcas
  58. ?>
  59.     <table width="356" border="0" cellspacing="0" cellpadding="0">
  60.     <tr>
  61.         <td scope="col">
  62. <?php
  63.     $marca_actual = ''; // Solo para iniciar el proceso
  64.     foreach($imps as $imp) {
  65.         // OJO: Asigna los campos en el orden que los tengas en cada tabla, primero los de imp_cd y despues los de marca_cd
  66.         list($imp_id, $imp_nombre, $imp_foto, $imp_mascampos, $marca_id, $marca_nombre, $marca_logo, $marca_mascampos) = $imp;
  67.         if($marca_actual != $imp['nombre']) {   // Solo se imprimiran encabezados al cambiar de marca
  68.             $marca_actual = $imp['nombre'];
  69. ?>
  70.     <table width="480" border="0" align="center" cellpadding="0" cellspacing="0">
  71.     <tr>
  72.         <td width="182" rowspan="2" align="left" valign="top"><table width="157" border="0" cellspacing="0" cellpadding="0">
  73.             <tr>
  74.                 <td><div align="left"><img src="logo/<?php echo $marca_logo; ?>" /></div></td>
  75.             </tr>
  76.         </table></td>
  77.         <td width="298" class="tituloMarca"><div align="left"><?php echo strtoupper($marca_nombre); ?></div></td>
  78.     </tr>
  79.     <tr>
  80.         <td valign="top"><table width="100%" border="0" cellspacing="0" cellpadding="0">
  81.             <tr>
  82. <?php
  83.         } // endif encabezado de marca
  84.         $w++; // $w = $w + 1; // es lo mismo
  85.         if ($a==0)
  86.             echo '<tr>';
  87.                 $a=$a+1;
  88. ?>                
  89.                 <td width="180" height="15" border="0">
  90.                     <p align="left" class="marronlink"><a href="ficha_camioneta.php?id="<?php echo $imp_id; ?>"><?php echo $imp_nombre; ?></a></p>
  91.                 </td>
  92. <?php          
  93.                 $r=$a;// contador remanente para listar imagenes sin exceso // WHAT???
  94.         if ($a >= $n_filas) {
  95.             $a=0;// reiniciando el contador horizontal
  96.             $i=$i+1;// aumentando el contador vertical // No se usa
  97.             echo '</tr>';
  98.                 }
  99.     } // Fin de foreach $imps
  100.     if($a < $n_filas) // Se quedo abierto un <tr> y aqui se cierra
  101.         echo '</tr>';
  102. ?>
  103.         </table></td>
  104.     </tr>
  105.     <!-- Estos espacios para que? un div con height es mas efectivo y mas limpio -->
  106.     <tr>
  107.         <td colspan="2" align="center" valign="top">&nbsp;</td>
  108.     </tr>
  109.     <tr>
  110.         <td colspan="2" align="center" valign="top">&nbsp;</td>
  111.     </tr>
  112.     <!-- Estos espacios para que? un div con height es mas efectivo y mas limpio -->
  113.     </table></td>
  114. </tr>
  115. </table>
  116. <p class="tituloQUIENES">Algun texto aqui</p>
  117.  
  118. <?php
  119.     // La siguiente linea te da error si no hubo resultados en la consulta
  120.     // -->   mysql_free_result($Recordset1);
  121. }
  122. // Mejor cierra la conexion al finalizar el script:
  123. mysql_close($tu_controlador);
  124. ?>
__________________
- León, Guanajuato
- GV-Foto