Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Atascado de verdad

Estas en el tema de Atascado de verdad en el foro de Mysql en Foros del Web. Atascado de verdad -------------------------------------------------------------------------------- Hola a todos, soy nuevo en este foro y necesito ayuda. He hecho una pagina simple que lee 2 tablas una ...
  #1 (permalink)  
Antiguo 09/02/2012, 15:55
 
Fecha de Ingreso: febrero-2012
Ubicación: N/A
Mensajes: 54
Antigüedad: 12 años, 2 meses
Puntos: 0
Atascado de verdad

Atascado de verdad

--------------------------------------------------------------------------------

Hola a todos, soy nuevo en este foro y necesito ayuda.
He hecho una pagina simple que lee 2 tablas una lleva los nombres de las poblaciones y la otra los nombres comerciales de unas empresas esta información la presento en una tabla, hasta aqui bien, he añadido posteriormente un buscador y un select para filtrar por poblaciones y funciona bien y ahora viene el problema he añadido un paginador el "Zebra_pagination.php" con la tabla completa sin filtrar el paginador funciona ya que cuento los registros totales con Select Count(*), pero con el buscador y el select una vez filtrado no consigo averiguar el total de registros que ha encontrado para que el paginador me los pagine valga la rebundancia, y por lo tanto no me funciona.
Creo que estoy obligado a utilizar estas dos instrucciones:
SQL_CALC_FOUND_ROWS
SELECT FOUND_ROWS
pues bien lo hago y no funciona.

Os aseguro que lo he intentado todo durante mas de 30 horas casi sin interrupcion, ya no se ni lo que he probado o he dejado de probar y a pesar de todo no lo consigo hacer funcionar, tengo que aclarar que soy muy novato en esto y algo mayor pero me encantaria poderlo hacer funcionar.

Os pongo el código que tengo hecho a continuación y os pediria que me ayudarais, si necesitais algo o alguna aclaración os la dare con mucho gusto.

Gracias a tod@s.


Código PHP:
<?php 
$conexion 
mysql_connect('localhost''root'''); 
mysql_select_db('general'); 
?> 

 <?php 
  


  
  
 $records_per_page 
3;  
     
         
// Incluye la clase de paginación 
        
require '../Zebra_Pagination.php'

        
// Instancia del objeto paginación 
        
$pagination = new Zebra_Pagination(); 
         
         
  
  
// Recuperar el número total de registros en la tabla 
       
       
$rows mysql_fetch_assoc(mysql_query('SELECT FOUND_ROWS() AS rows'));     
       
         

        
// Pasar el número total de registros a la clase de paginación 
        
$pagination->records($rows['rows']); 

        
// Registros por página 
        
$pagination->records_per_page($records_per_page); 
  

  
 
?> 


<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Reporte de Propiedades</title> 

<!--Enlaces a los css necesarios--> 
        <link rel="stylesheet" href="../reset.css" type="text/css"> 

        <link rel="stylesheet" href="../style.css" type="text/css"> 

        <link rel="stylesheet" href="../Zebra_Pagination.css" type="text/css"> 






</head> 
<body> 

 <table width="765" height= 30 border="1"> 
  <tr> 
    <td><?php $pagination->render();?></td> 
  </tr> 
</table> 
    
         
         

<table width="765" height="30" border="0"> 
<td> 
<form name="form1" method="post" action="PaginadorLocal.php"> 
<font color="#800000">Buscar:&nbsp;&nbsp;&nbsp;</font><input name="txtBusqueda" type="text" size="30" style="border-width: 2px;  font-size:13pt; font-weight:bold;color: #800000;"> 
       
<font color="#800000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Población: &nbsp;&nbsp;&nbsp;</font>  
    <select name="selCiudad" id="selCiudad" style class="Guias2"> 
        <option value="-1" selected>Todas las poblaciones</option> 
         
<?php 
    $tablapoblaciones 
mysql_query("SELECT * FROM poblaciones ORDER BY poblacion ASC"); // Seleccionamos las ciudades de la tabla ciudades 
    
while ($registropoblacion mysql_fetch_array($tablapoblaciones)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla 
?> 

<option value="<?php echo $registropoblacion['Id']; ?>"><?php echo $registropoblacion['Poblacion']; ?></option> 

<?php 
    
// termina la zona de repeticion 
    
mysql_free_result($tablapoblaciones); // se libera la memoria usada por la tabla 
?> 
    </select> 
    
    </label> 
    <input type="submit" name="cmdBuscar" id="cmdBuscar" value="BUSCAR"> 
      
</form> 

</td> 
</table> 

  <table width="765" height="80" border="0"> 
  <?php 
$sql 
"SELECT SQL_CALC_FOUND_ROWS * FROM actividades, poblaciones WHERE actividades.Actividades = 'Hosteleria' and actividades.idpoblacion = poblaciones.id "
if (isset(
$_POST['txtBusqueda'])) { 
    
$sql .= " AND actividades.NombreComer LIKE '%" $_POST['txtBusqueda'] . "%' "
    if (
intval($_POST['selCiudad']) > 0) { 
        
$sql .= " AND actividades.idpoblacion = '" intval($_POST['selCiudad']) . "'"
    } 

$sql .= " ORDER BY NombreComer LIMIT 
. (($pagination->get_page() - 1) * $records_per_page) . ', ' $records_per_page 
        '

     
$tabla mysql_query($sql); 





while (
$registro mysql_fetch_assoc($tabla)) { 
?> 
        <tr> 
          <td><a href="<?php echo $registro['Url']; ?>"><?php echo $registro['NombreComer']; ?>"></a></td> 
        </tr> 
        <tr> 
          <td width="765" height="0"></td> 
        </tr> 
        <?php 

mysql_free_result($tabla); 
mysql_close($conexion); 
?> 
         
    </table> 
     


</body> 
</html>
Gracias a tod@s.
  #2 (permalink)  
Antiguo 10/02/2012, 06:06
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Atascado de verdad

Me van a retar por dar una solucion php en el foro de mysql....

http://php.net/manual/en/function.mysql-num-rows.php

mira esta funcion php y quita SQL_CALC_FOUND_ROWS....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 10/02/2012, 14:26
 
Fecha de Ingreso: febrero-2012
Ubicación: N/A
Mensajes: 54
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Atascado de verdad

MEDIO SOLUCIONADO: Muchas gracias por tu ayuda ya estoy mas contento he aplicado tu solución y funciona a medias ya que de momento el paginador ya aparece lo veo y me cambia de pagina y aparentemente funciona aunque como te he dicho a medias ya que me hace una paginación de todos los resultados y no de los resultados que obtengo al aplicar la busqueda y el select que me filtra por población que es lo que necesito, se que es abusar de ti pero podrias mirar el código que adjunto una vez rectificado con tu solución y decirme porque me falla el páginador y que deberia de hacer, te advierto que soy muy novato en esto.
Gracias por tu ayuda.

Código PHP:
Ver original
  1. <?php
  2. $conexion = mysql_connect('localhost', 'root', '');
  3. mysql_select_db('general');
  4. ?>
  5.  
  6.  <?php
  7.  
  8.  
  9.            $records_per_page = 3;
  10.    
  11.         // Incluye la clase de paginación
  12.         require '../Zebra_Pagination.php';
  13.  
  14.         // Instancia del objeto paginación
  15.         $pagination = new Zebra_Pagination();
  16.        
  17.        
  18.  
  19.   // Recuperar el número total de registros en la tabla
  20.        $result = mysql_query("SELECT * FROM actividades", $conexion);
  21.          $num_rows = mysql_num_rows($result);
  22.  
  23.  
  24.  
  25.  
  26.        
  27.        
  28.  
  29.         // Pasar el número total de registros a la clase de paginación
  30.         $pagination->records($num_rows);
  31.  
  32.         // Registros por página
  33.         $pagination->records_per_page($records_per_page);
  34.  
  35.  
  36.  
  37.  ?>
  38.  
  39.  
  40. <html>
  41. <head>
  42. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  43. <title>Reporte de Propiedades</title>
  44.  
  45. <!--Enlaces a los css necesarios-->
  46.         <link rel="stylesheet" href="../reset.css" type="text/css">
  47.  
  48.         <link rel="stylesheet" href="../style.css" type="text/css">
  49.  
  50.         <link rel="stylesheet" href="../Zebra_Pagination.css" type="text/css">
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57. </head>
  58. <body>
  59.  
  60.  <table width="765" height= 30 border="1">
  61.   <tr>
  62.     <td><?php $pagination->render();?></td>
  63.   </tr>
  64. </table>
  65.    
  66.        
  67.        
  68.  
  69. <table width="765" height="30" border="0">
  70. <td>
  71. <form name="form1" method="post" action="PaginadorLocal.php">
  72. <font color="#800000">Buscar:&nbsp;&nbsp;&nbsp;</font><input name="txtBusqueda" type="text" size="30" style="border-width: 2px;  font-size:13pt; font-weight:bold;color: #800000;">
  73.      
  74. <font color="#800000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Población: &nbsp;&nbsp;&nbsp;</font>
  75.     <select name="selCiudad" id="selCiudad" style class="Guias2">
  76.         <option value="-1" selected>Todas las poblaciones</option>
  77.        
  78. <?php
  79.     $tablapoblaciones = mysql_query("SELECT * FROM poblaciones ORDER BY poblacion ASC"); // Seleccionamos las ciudades de la tabla ciudades
  80.     while ($registropoblacion = mysql_fetch_array($tablapoblaciones)) { // Vamos a repetir una Option (opcion), de la Lista Desplegable, por cada ciudad en la tabla
  81. ?>
  82.  
  83. <option value="<?php echo $registropoblacion['Id']; ?>"><?php echo $registropoblacion['Poblacion']; ?></option>
  84.  
  85. <?php
  86.     } // termina la zona de repeticion
  87.     mysql_free_result($tablapoblaciones); // se libera la memoria usada por la tabla
  88. ?>
  89.     </select>
  90.    
  91.     </label>
  92.     <input type="submit" name="cmdBuscar" id="cmdBuscar" value="BUSCAR">
  93.      
  94. </form>
  95.  
  96. </td>
  97. </table>
  98.  
  99.   <table width="765" height="80" border="0">
  100.   <?php
  101. $result = "SELECT * FROM actividades, poblaciones WHERE actividades.Actividades = 'Hosteleria' and actividades.idpoblacion = poblaciones.id ";
  102. if (isset($_POST['txtBusqueda'])) {
  103.     $result .= " AND actividades.NombreComer LIKE '%" . $_POST['txtBusqueda'] . "%' ";
  104.     if (intval($_POST['selCiudad']) > 0) {
  105.         $result .= " AND actividades.idpoblacion = '" . intval($_POST['selCiudad']) . "'";
  106.     }
  107. }
  108. $result .= " ORDER BY NombreComer LIMIT
  109. " . (($pagination->get_page() - 1) * $records_per_page) . ', ' . $records_per_page . '
  110.        ';
  111.  
  112. $tabla = mysql_query($result);
  113.  
  114.  
  115.  
  116.  
  117.  
  118. while ($registro = mysql_fetch_assoc($tabla)) {
  119. ?>
  120.         <tr>
  121.           <td><a href="<?php echo $registro['Url']; ?>"><?php echo $registro['NombreComer']; ?>"></a></td>
  122.         </tr>
  123.         <tr>
  124.           <td width="765" height="0"></td>
  125.         </tr>
  126.         <?php
  127. }
  128. mysql_close($conexion);
  129.  
  130.  echo "$num_rows Rows\n"; // esto lo he puesto para comprobar cuantos registros me encuentra
  131.  
  132. ?>
  133.        
  134.     </table>
  135.    
  136.  
  137.  
  138. </body>
  139. </html>
  #4 (permalink)  
Antiguo 13/02/2012, 02:55
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Atascado de verdad

Código MySQL:
Ver original
  1. SELECT * FROM actividades INNER JOIN ON poblaciones actividades.idpoblacion = poblaciones.id WHERE actividades.Actividades = 'Hosteleria'

Cambia esto en la linea 101... pero este no es el problema.

El problema lo tienes en la linea 30 donde le das al objeto paginación el numero de total de registros sin seleccionar nada.

Esto es php y no es el mejor foro para que te ayudemos... pero deberias hacer la seleccion ver el numero de registros pasarlos al objeto paginacion y luego paginar....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 13/02/2012, 16:05
 
Fecha de Ingreso: febrero-2012
Ubicación: N/A
Mensajes: 54
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Atascado de verdad

Gracias quimfv ya funciona, solucione el problema con la ayuda de alguno de tus compañeros en el foro de PHP.

Estoy contigo de que esto lo debia de consultar en el foro de php y asi lo hice lo que pasa es que nada mas ponerlo en dicho foro alguien me dijo que era un tema del foro de mysql y no de php, posiblemente me esplique mal y creyerón que era un problema de Mysql por eso me aconsejarón este foro, como acababa de registrarme y no conocia muy bien como mover un tema o como anularlo, lo que hice fue duplicarlo en este foro y eso me ha costado nada mas llegar a forosdelweb una infracción por duplicar un tema, por lo tanto procurare no equivocarme la proxima vez, lo que ocurre que a veces cuando tienes un problema en un código yo por lo menos no se si esta en la parte de la base de datos o en el código PHP. ¿Entonces que hago?

Bueno gracias de nuevo y un saludo.
  #6 (permalink)  
Antiguo 14/02/2012, 02:05
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Atascado de verdad

Preguntar el que te parezca pero no dupliques....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Etiquetas: atascado, php, query, registros, select, sql, 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 22:34.