Foros del Web » Programando para Internet » PHP »

Problema con Paginator

Estas en el tema de Problema con Paginator en el foro de PHP en Foros del Web. Buenas tardes. Tengo un problemilla con el paginator de jpinedo. La cuestión es que quiero hacer un buscador. Hago varios campos para definir la búsqueda ...
  #1 (permalink)  
Antiguo 31/05/2005, 06:10
 
Fecha de Ingreso: abril-2005
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Problema con Paginator

Buenas tardes. Tengo un problemilla con el paginator de jpinedo.
La cuestión es que quiero hacer un buscador. Hago varios campos para definir la búsqueda y cuando el usuario le da a aceptar compongo una cadena con todos los criterios de búsqueda y realizo el query.
Le paso los campos por $_POST para realizar dicha cadena.
Sin usar el paginador me funciona perfectamente el filtrado de búsqueda, pero al incluir el Paginator sólo me sale bien la primera página, cuando le doy a la siguiente se pierde todo el filtrado que le pasé con $_POST porque la página se llama a sí misma, y me acaba mostrando todos los resultados.

Esto es el formulario para seleccionar las opciones:

Código PHP:
<form name="buscar" method="post" action="busqueda.php">
  <p align="center">B&uacute;squeda Avanzada</p>
  <div align="center">
    <table width="264" border="0" cellpadding="2" cellspacing="2">
      <tr> 
        <td width="88">Precio:</td>
        <td width="78"><select name="preciomin" id="preciomin">
            <option selected value="">M&iacute;nimo</option>
            <OPTION value=117200>117200 €</OPTION> 
            <OPTION value=117300>117300 €</OPTION> 
            <OPTION value=126200>126200 €</OPTION> 
            <OPTION value=129300>129300 €</OPTION> 
            <OPTION value=156300>156300 €</OPTION> 
            <OPTION value=159300>159300 €</OPTION> 
            <OPTION value=160000>160000 €</OPTION> 
            <OPTION value=165300>165300 €</OPTION> 
            <OPTION value=177200>177200 €</OPTION> 
            <OPTION value=177300>177300 €</OPTION> 
            <OPTION value=189400>189400 €</OPTION> 
            <OPTION value=190000>190000 €</OPTION> 
            <OPTION value=220000>220000 €</OPTION> 
            <OPTION value=270500>270500 €</OPTION> 
            <OPTION value=276500>276500 €</OPTION> 
            <OPTION value=360600>360600 €</OPTION>
          </select></td>
        <td width="78"><select name="preciomax" id="preciomax">
            <option selected value="">M&aacute;ximo</option>
            <OPTION value=117200>117200 €</OPTION> 
            <OPTION value=117300>117300 €</OPTION> 
            <OPTION value=126200>126200 €</OPTION> 
            <OPTION value=129300>129300 €</OPTION> 
            <OPTION value=156300>156300 €</OPTION> 
            <OPTION value=159300>159300 €</OPTION> 
            <OPTION value=160000>160000 €</OPTION> 
            <OPTION value=165300>165300 €</OPTION> 
            <OPTION value=177200>177200 €</OPTION> 
            <OPTION value=177300>177300 €</OPTION> 
            <OPTION value=189400>189400 €</OPTION> 
            <OPTION value=190000>190000 €</OPTION> 
            <OPTION value=220000>220000 €</OPTION> 
            <OPTION value=270500>270500 €</OPTION> 
            <OPTION value=276500>276500 €</OPTION> 
            <OPTION value=360600>360600 €</OPTION>
          </select></td>
      </tr>
      <tr> 
        <td>Habitaciones:</td>
        <td><select name="habitmin" id="habitmin">
            <option selected value="">M&iacute;nimo</option>
            <OPTION value=1>1</OPTION> 
              <OPTION value=2>2</OPTION> <OPTION value=3>3</OPTION> 
              <OPTION value=4>4</OPTION> <OPTION value=5>5</OPTION> 
              <OPTION value=6>6</OPTION> <OPTION value=7>7</OPTION> 
          </select></td>
        <td><select name="habitmax" id="select2">
            <option selected value="">M&aacute;ximo</option>
            <OPTION value=1>1</OPTION> 
              <OPTION value=2>2</OPTION> <OPTION value=3>3</OPTION> 
              <OPTION value=4>4</OPTION> <OPTION value=5>5</OPTION> 
              <OPTION value=6>6</OPTION> <OPTION value=7>7</OPTION> 
          </select></td>
      </tr>
      <tr> 
        <td>Superficie:</td>
        <td><select name="superfmin" id="select4">
            <option selected value="">M&iacute;nimo</option>
            <option value="50">50 m&sup2;</option>
            <option value="60">60 m&sup2;</option>
            <option value="70">70 m&sup2;</option>
            <option value="80">80 m&sup2;</option>
            <option value="90">90 m&sup2;</option>
            <option value="100">100 m&sup2;</option>
            <option value="120">120 m&sup2;</option>
            <option value="150">150 m&sup2;</option>

          </select></td>
        <td><select name="superfmax" id="select5">
            <option selected value="">M&aacute;ximo</option>
            <option value="50">50 m&sup2;</option>
            <option value="60">60 m&sup2;</option>
            <option value="70">70 m&sup2;</option>
            <option value="80">80 m&sup2;</option>
            <option value="90">90 m&sup2;</option>
            <option value="100">100 m&sup2;</option>
            <option value="120">120 m&sup2;</option>
            <option value="150">150 m&sup2;</option>
          </select></td>
      </tr>
      <tr> 
        <td>Localidad:</td>
        <td colspan="2"><select name="localidad" id="localidad">
            <option selected value="">Todas las localidades</option>
<?
    
//Las localidades las he sacado previamente de la BD y las he metido en el array.
         
foreach ($localidades as $loc){
        echo 
"<option>$loc</option>";
    } 
?>
          </select></td>
      </tr>
      <tr> 

      </tr>
      <tr> 
        <td colspan="3"> <div align="center">
            <input name="buscar" type="submit" id="buscar" value="Buscar">
          </div></td>
      </tr>
    </table>
  </div>
</form>
Y aqui el de buscar, la presentación es cutre y eso pero es porque estoy probando nada más :-p

Código PHP:
<?php
$conecta
=mysql_connect($mosConfig_host,$mosConfig_user,$mosConfig_password);
if (!
$conecta){
 echo 
"No se ha podido establecer la conexión con el servidor.";
 }
mysql_select_db($MiBD,$conecta);

//----------------------------------------------------------
$buscar=array();

if(!empty(
$_POST[preciomin]))
{
    
$buscar[] = "precio_v >= '$_POST[preciomin]' ";
}
if(!empty(
$_POST[preciomax]))
{
    
$buscar[] = "precio_v <= '$_POST[preciomax]' ";
}
if(!empty(
$_POST[habitmin]))
{
    
$buscar[] = "nhabit_v >= '$_POST[habitmin]' ";
}
if(!empty(
$_POST[habitmax]))
{
    
$buscar[] = "nhabit_v <= '$_POST[habitmax]' ";
}
if(!empty(
$_POST[superfmin]))
{
    
$buscar[] = "mtrs_v >= '$_POST[superfmin]' ";
}
if(!empty(
$_POST[superfmax]))
{
    
$buscar[] = "mtrs_v <= '$_POST[superfmax]' ";
}
if(!empty(
$_POST[localidad]))
{
    
$buscar[] = "loc_v = '$_POST[localidad]' ";
}
if(!empty(
$buscar))
{
    
$miconsulta implode(" and "$buscar);
    
$miconsulta=" where " $miconsulta;
}

$q="Select * from venta " $miconsulta;

//------------------------------------------------------

$_pagi_sql=$q;
$_pagi_cuantos 2;
include(
"paginator.inc.php");
$datos=mysql_fetch_row($_pagi_result);
if (
$datos==""){
    echo 
"No se encontraron resultados para esta búsqueda.";
}else{
        foreach (
$datos as $val){
            echo 
"-".$val."<BR>";
        }
        echo 
"<BR>--------------------------------------------<BR>";
        while (
$datos mysql_fetch_row($_pagi_result)){
            foreach (
$datos as $val){
                echo 
"-".$val."<BR>";
            }
            echo 
"<BR>--------------------------------------------<BR>";
        }
//endwhile
}//endif
echo"<div align=center><p>".$_pagi_navegacion."</p></div>";
echo
"<div align=center><p>Mostrando Propiedades ".$_pagi_info."</p></div>";
mysql_close($conecta)
?>

¿Qué podría hacer para solucionarlo?
  #2 (permalink)  
Antiguo 31/05/2005, 11:13
Avatar de baccxus  
Fecha de Ingreso: mayo-2005
Ubicación: Panama city, Panama, Panama
Mensajes: 870
Antigüedad: 12 años, 6 meses
Puntos: 17
He usado Pginator y creo que la sintaxis es así:
...
$_pagi_sql = $q
$_pagi_result = mysql_query($_pagi_sql) or die ("No se pudo ejecutar la consulta");
$_pagi_cuantos = 2;
$datos=mysql_fetch_assoc($_pagi_result)
...
  #3 (permalink)  
Antiguo 01/06/2005, 01:58
 
Fecha de Ingreso: abril-2005
Mensajes: 25
Antigüedad: 12 años, 7 meses
Puntos: 0
Si eso lo coloqué bien, pasa que la primera página me la saca perfectamente y el número de resultados según el filtrado que haya hecho también, pero cuando le doy al link para ir a otra página de las que me salen como resultado, la consulta SQL se pierde totalmente porque yo le paso parte de la composición de dicha consulta mediante $_POST de lo que haya seleccionado anteriormente, y entonces los resultados salen erróneos.
  #4 (permalink)  
Antiguo 01/06/2005, 12:00
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Cita:
Iniciado por baccxus
He usado Pginator y creo que la sintaxis es así:
...
$_pagi_sql = $q
$_pagi_result = mysql_query($_pagi_sql) or die ("No se pudo ejecutar la consulta");
$_pagi_cuantos = 2;
$datos=mysql_fetch_assoc($_pagi_result)
...
Te equivocas. No debes hacer el mysql_query(). $_pagi_result es obtenida automáticamente por Paginator.

Saludos
  #5 (permalink)  
Antiguo 01/06/2005, 12:14
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
JoHN_FR:
Habría sido bueno que leas la documentación de Paginator.
En la sección descripción puedes ver una lista de variables entre las que verás una lamada $_pagi_propagar.
En la sección ejemplo avanzado puedes ver una manera de utilizarla.

Saludos
  #6 (permalink)  
Antiguo 01/06/2005, 12:27
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
En general, Paginator propaga las variables que le especifiques en el array $_pagi_propagar. Pero esta propagación se hace vía URL. Entonces hay que tener dos cosas en consideración:
- Definir el array $_pagi_propagar.
Código PHP:
$_pagi_sql=$q;
$_pagi_cuantos 2;
$_pagi_propagar = array('preciomin''preciomax''habitmin''superfmin''localidad');
include(
"paginator.inc.php"); 
---------------------------------------------------
- Verificar primero si las variables vienen por POST. Si no hay POST, entonces buscar en GET.
Código PHP:
if(!empty($_POST['preciomin'])){
    
$buscar[] = "precio_v >= '".$_POST['preciomin']."' ";
}elseif(!empty(
$_GET['preciomin'])){
    
$buscar[] = "precio_v >= '".$_GET['preciomin']."' ";
}
// Y así con todas las variables 
Saludos
  #7 (permalink)  
Antiguo 15/06/2005, 17:13
Usuario no validado
 
Fecha de Ingreso: mayo-2005
Ubicación: Benicàssim
Mensajes: 56
Antigüedad: 12 años, 6 meses
Puntos: 0
Paginator 1.6 Problemas con $_pagi_prograpa

Cita:
Iniciado por JoHN_FR
Si eso lo coloqué bien, pasa que la primera página me la saca perfectamente y el número de resultados según el filtrado que haya hecho también, pero cuando le doy al link para ir a otra página de las que me salen como resultado, la consulta SQL se pierde totalmente porque yo le paso parte de la composición de dicha consulta mediante $_POST de lo que haya seleccionado anteriormente, y entonces los resultados salen erróneos.
A mi también me sucede los mismo. he incluido, entre otros $_pagi_propaga=array("criterio"); pero no me hace caso el script.
  #8 (permalink)  
Antiguo 15/06/2005, 20:51
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
lvwrz:
Leíste la explicación que hice arriba?
Si la variable 'criterio' viene de un formulario, entonces debes hacer lo siguiente:
- Defines el array $_pagi_propagar tal como lo has hecho (siempre antes del include).
- Haces una verificación para saber si la página ha sido generada por el formulario o por hacer clic en un enlace de paginación. Basta con hacer lo siguiente:
Código PHP:
if(!empty($_POST['criterio'])){
    
$criterio $_POST['criterio'];
}else{
    
$criterio =  $_GET['criterio'];

Luego utilizas la variable $criterio para tus consultas.

Saludos
  #9 (permalink)  
Antiguo 16/06/2005, 02:58
Usuario no validado
 
Fecha de Ingreso: mayo-2005
Ubicación: Benicàssim
Mensajes: 56
Antigüedad: 12 años, 6 meses
Puntos: 0
Gracias Jpinedo !!
Cambié las líneas:
$xx = $_POST['xx'] ;
por
$xx = isset($_POST['xx'])?$_POST['xx']:$_GET['xx'];

y enjoy !
Gracias !!!
  #10 (permalink)  
Antiguo 16/06/2005, 03:32
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Exacto.
Para quien no lo sepa, lo que pone Ivwrz es una "forma abreviada" de escribir lo mismo que yo escribí en mi post anterior. El uso de "(condicion)?si_cumple:no_cumple" se llama operador ternario.

Saludos
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 20:16.