Foros del Web » Programando para Internet » PHP »

Paginacion de resultados desde un formulario

Estas en el tema de Paginacion de resultados desde un formulario en el foro de PHP en Foros del Web. Hola compañeros, A continuación os explico el problema q me lleva de cabeza... Resulta que tengo un formulario tal que así: Código: <form name="form1" method="post" ...
  #1 (permalink)  
Antiguo 29/11/2010, 04:37
 
Fecha de Ingreso: noviembre-2010
Ubicación: Valencia
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Paginacion de resultados desde un formulario

Hola compañeros,

A continuación os explico el problema q me lleva de cabeza...

Resulta que tengo un formulario tal que así:
Código:
<form name="form1" method="post" action="resultados.php">
<table width="70%" border="0" cellpadding="5" cellspacing="5">
<tr> 
<td bgcolor="#CCCCCC">
<label><input name="compra" type="radio" value="si" checked>compra</label></td>
<td bgcolor="#CCCCCC"><strong>Tipo de inmueble:</td>
</tr>
<tr> 
<td bgcolor="#CCCCCC">
<label><input type="radio" name="compra" value="no">alquiler</label></td>
<td bgcolor="#CCCCCC">
                                    <select name="tipo" id="tipo">
                                         <option value="no">Seleccionar tipo</option>
                                         <option value="Promocion">promociones</option>
                                         <option value="Piso">pisos</option>
                                         <option value="Casa">casas</option>
                                         <option value="Unifamiliar">unifamiliares</option>
                                         <option value="Chalet">chalets</option>
                                         <option value="Nave">naves</option>
                                         <option value="Solar">solares</option>
                                         <option value="Adosado">adosados</option>
                                    </select>
</td></tr>
<tr><td colspan="2"><input type="submit" name="Submit" value="Buscar">
</div></td>
</tr>
</table>
</form>
Pues bien cuando le paso los resultados por el metodo POST me los guardo en variables en la pagina resultados.php

Código:
$tipo=$_POST['tipo'];
$venta=$_POST['compra'];
hago la consulta dependendiendo de lo que ha recibido del formulario y tambien le aplico la orden LIMIT para que me muestre cierta cantidad de registros;

Código:
if ($poblacion<>"no") {
if ($venta=="si") {
	$sql="SELECT * FROM pisos
WHERE ((tipo= "$tipo") AND (venta="$Venta")
) ORDER BY codigo ASC" LIMIT $inicio, $registros;
}
La primera pagina lo hace bien xo en cuanto pasa a la segunda me pone que las variables que obtiene del form está "undefined", que supongo que querra decir, vacias.

Alguna idea?

Gracias
  #2 (permalink)  
Antiguo 29/11/2010, 07:21
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.591
Antigüedad: 14 años, 4 meses
Puntos: 49
Respuesta: Paginacion de resultados desde un formulario

Y donde esta tu paginador?
ahora lo mas seguro que cuando haces
$tipo=$_POST['tipo'];
$venta=$_POST['compra'];

tipo vale lo de POST tipo y tu paginador de seguro esta en GET
entonces puedes pasar los valores de tu formulario por GET y recibir por GET para que tu paginador avance de pagina.

o bien tambien puedes hacer

if ($_POST[tipo] != ""){$tipo = "$_POST[tipo]";}else{$tipo = "$_GET[tipo]";}

a todo esto debes si o si agregar el tipo=$tipo en tu enlace que cambia de pagina, esto en tu paginador, todo esto suponiendo por que no nos has puesto tu codigo del paginador, pero como todos funcionan parecidos lo supongo.

Saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 29/11/2010, 07:39
 
Fecha de Ingreso: noviembre-2010
Ubicación: Valencia
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Paginacion de resultados desde un formulario

Gracias Kaninox por la respuesta,

La verdad que no entiendo mucho de PHP i lo que hice fue intentar adaptar un sript que encontré y no sé si lo estoy haciendo bien. Te pego el codigo de la paginacion y si me puedes resolver mi duda te estaré eternamente agradecido.

Código PHP:
<?php
                              
$existen
=0//Esta varibale sirve para saber si hay registros o no de lo que hemos buscado.
$contador=0//Esta variable sirve para cargar las imagenes en un frame.
                              
  //conexión a la base de datos
  
$db=mysql_connect("localhost","root","");
  
mysql_select_db("anvi_immobiliaria",$db);
  
  
$registros 5;
  
$pagina $_POST['pag'];
  if (
is_numeric($pagina))
      
$inicio =(($pagina-1)*$registros);
      else
      
$inicio 0;
    
  
//Recogemos los datos del formulario de búsqueda.
  
$tipo=$_POST['tipo'];
  
$venta=$_POST['compra'];
  
$poblacion=$_POST['poblaciones'];*/
 
// En el siguiente bucle IF, guardamos la sentencia SQL en $sql dependiendo de la busqueda que haga el usuario.

if ($poblacion<>"no")
    {
    if (
$venta=="si")
      {
    
$sql="SELECT `pisos`. * FROM pisos
        WHERE ((`pisos`.`tipo` = \"$tipo\") AND (`pisos`.`venta` = \"Venta\") AND (`pisos`.`localidad` = \"$poblacion\"))
        ORDER BY `pisos`.`codigo` ASC LIMIT $inicio,$registros"
;
        
$sql_total="SELECT `pisos`. * FROM pisos
        WHERE ((`pisos`.`tipo` = \"$tipo\") AND (`pisos`.`venta` = \"Venta\") AND (`pisos`.`localidad` = \"$poblacion\"))
        ORDER BY `pisos`.`codigo` ASC"
;
      }
      else
      {
        
$sql="SELECT `pisos`. * FROM pisos
        WHERE ((`pisos`.`tipo` = \"$tipo\") AND (`pisos`.`venta` = \"Alquiler\") AND (`pisos`.`localidad` = \"$poblacion\"))
        ORDER BY `pisos`.`codigo` ASC LIMIT $inicio,$registros"
;
        
$sql_total="SELECT `pisos`. * FROM pisos
        WHERE ((`pisos`.`tipo` = \"$tipo\") AND (`pisos`.`venta` = \"Alquiler\") AND (`pisos`.`localidad` = \"$poblacion\"))
        ORDER BY `pisos`.`codigo` ASC"
;
      }
    }
elseif (
$venta=="si")
      {
        
$sql="SELECT `pisos`. * FROM pisos
        WHERE ((`pisos`.`tipo` = \"$tipo\") AND (`pisos`.`venta` = \"Venta\"))
        ORDER BY `pisos`.`codigo` ASC LIMIT $inicio,$registros"
;
        
$sql_total="SELECT `pisos`. * FROM pisos
        WHERE ((`pisos`.`tipo` = \"$tipo\") AND (`pisos`.`venta` = \"Venta\"))
        ORDER BY `pisos`.`codigo` ASC"
;
      }
      else
      {
        
$sql="SELECT `pisos`. * FROM pisos
        WHERE ((`pisos`.`tipo` = \"$tipo\") AND (`pisos`.`venta` = \"Alquiler\"))
        ORDER BY `pisos`.`codigo` ASC LIMIT $inicio,$registros"
;
        
$sql_total="SELECT `pisos`. * FROM pisos
        WHERE ((`pisos`.`tipo` = \"$tipo\") AND (`pisos`.`venta` = \"Venta\"))
        ORDER BY `pisos`.`codigo` ASC"
;
      }


//En esta variable nos guardamos la sentencia antes registrada.
$res=mysql_query($sql,$db) or die ("Error en consulta: "mysql_error());

//Calculamos las paginas a mostrar
$res_total mysql_query($sql_total);
$num_registros mysql_num_rows($res_total);
$paginas ceil($num_registros/$registros);



//Bucle WHILE para recoorer todos los registros, mientras haya, e imprimirlos.
while ($reg=mysql_fetch_array($res)) {
  
  
/*$codigo=$reg[0];
  $venta=$reg[1];
  $tipo=$reg[2];
  $titulo=$reg[3];
  $texto=$reg[4];
  $precio=$reg[5];
  $foto=$reg[6];
  $foto2=$reg[7];
  $foto3=$reg[8];
  $foto4=$reg[9];
  $foto5=$reg[10];
  $localidad=$reg[11];
        
  $referencia=$codigo; //se utiliza más adelante en la maquetación.*/
        
  
$existen=1;//Lo inicializamos a 1 porque hemos entrado en el bucle y quiere decir quehay resultados.

    //Si es el tipo de immueble que busco, entonces entra.        
    
if ($tipo!="no")  {
                
    
//tabla per al tipo y titulo
    
echo "<br>";
    echo 
"<table width=\"570\" border=\"0\" cellspacing=\"2\" cellpadding=\"2\"><tr><td class=tipo colspan=2>";
    echo 
"<p><b>$reg[venta]   $reg[tipo]</b></p>";
    echo 
"</td></tr><tr><td colspan=2>";
    echo 
"$reg[titulo]";
    echo 
"</td></tr>";
        
    
//fila per a la foto i el text
    
echo "<tr><td valign=\"middle\"><div align=\"left\">";
        
//visualitzar el text amb salts de línea
                
$texto="$reg[texto]";
        for (
$i=0;$i<strlen($texto);$i++) {
            if (
$texto[$i]!="\n")
                              echo 
"$texto[$i]";
            else  echo 
"<br>";
                    }
    echo 
"</div></td><td align=\"right\">";
    echo 
"<div align=\"right\">";
        
        
//Si el campo foto no está vacio, entonces entra.
                
$foto="$reg[foto]";
        if (
$foto!=null) {
            echo (
"<IFRAME SRC=\"fotos.php?foto=$foto\" scrolling=no noresize NAME=\"$contador\" HEIGHT=\"300\" WIDTH=\"350\">
                        Su navegador no soporta iFrames.
                        </IFRAME>"
);
        } 
//final if columna foto
    
echo "</div></td></tr>";
    echo 
"</table>";
    
//fi tabla
        
        
    //tabla per a les fotos xicotetes
    
echo "<table width=\"570\" border=\"0\" cellspacing=\"5\" cellpadding=\"0\"><tr>";
    echo 
"<td>";
    echo 
"<div align=\"center\">";
        
//Si el campo foto no está vacio, procedemos a su inclusion en pequeño.
                
if ($foto!=null) {
                        echo 
"<a href=\"fotos.php?foto=$foto\" target=$contador>
                        <img border=0 src=\"fotos/$foto\" width=100></a>"
;
        } 
    echo 
"</div>";
    echo 
"</td>";
        
    echo 
"<td>";
    echo 
"<div align=\"center\">";
        
//Si el campo foto2 no está vacio, procedemos a su inclusion en pequeño.
                
$foto2="$reg[foto2]";
        if (
$foto2!=null) {
                        echo 
"<a href=\"fotos.php?foto=$foto2\" target=$contador>
                        <img border=0 src=\"fotos/$foto2\" width=100></a>"
;
        } 
        echo 
"</div>";
    echo 
"</td>";
    
        echo 
"<td>";
    echo 
"<div align=\"center\">";
        
//Si el campo foto3 no está vacio, procedemos a su inclusion en pequeño.
                
$foto3="$reg[foto3]";
            if (
$foto3!=null) {
                        echo 
"<a href=\"fotos.php?foto=$foto3\" target=$contador>
                        <img border=0 src=\"fotos/$foto3\" width=100></a>"
;
        } 
    echo 
"</div>";
    echo 
"</td>";
    
        echo 
"<td>";
    echo 
"<div align=\"center\">";
        
//Si el campo foto4 no está vacio, procedemos a su inclusion en pequeño.
                
$foto4="$reg[foto4]";
                if (
$foto4!=null) {
                        echo 
"<a href=\"fotos.php?foto=$foto4\" target=$contador>
                        <img border=0 src=\"fotos/$foto4\" width=100></a>"
;
        } 
    echo 
"</div>";
    echo 
"</td>";
    
        echo 
"<td>";
    echo 
"<div align=\"center\">";
        
//Si el campo foto5 no está vacio, procedemos a su inclusion en pequeño.
                
$foto5="$reg[foto5]";
            if (
$foto5!=null) {
                        echo 
"<a href=\"fotos.php?foto=$foto5\" target=$contador>
                        <img border=0 src=\"fotos/$foto5\" width=100></a>"
;
        } 
    echo 
"</div>";
    echo 
"</td>";
    
//Fin de la tabla
        
echo "</tr></table>";
        
        
$contador=$contador+1;
        
    
//tabla per al preu i la localitat
    
echo "<table width=\"570\" border=\"0\" cellspacing=\"2\" cellpadding=\"2\"><tr><td>";
    echo 
"<table width=\"570\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\"><tr><td>";
        
$precio="$reg[precio]";
        if (
$precio!=null) {
            echo 
"$precio";
        }
    echo 
"</td><td>";
    echo 
"$reg[localidad]";
    echo 
"</td>";
    echo 
"</tr></table></td></tr></table>";//Fin tabla
    //echo "<p>$coment</p>";
    
        //tabla per a la referencia i fer reserva
    
echo "<table width=\"570\" border=\"0\" cellspacing=\"2\" cellpadding=\"2\"><tr>";
    echo 
"<td class=\"lineas\">referencia: $reg[codigo]</td></tr></table>";
    }
//Final del if, cuando ya no comprueba que no hay más immuebles.
        
  
}//Final del while. Aqui acaba de mostrar todos los registros buscados. //final tipo!=null

//Aqui imprimimos la paginacion

    
if($pagina>1)
    {
        echo 
"<a href='resultados.php?pag=" . ($pagina-1) . "'>Anterior</a>";
        
//echo "<font face='verdana' size='-2'>anterior</font>";
        //echo "</a>&nbsp;";
    
}

    for(
$cont=1;$cont<=$paginas;$cont++)
    {
        if(
$cont==$pagina)
        {
            echo 
$cont " ";
        }else{
            echo 
"<a href='resultados.php?pag=" $cont "'>$cont</a>";
            
//echo "<font face='verdana' size='-2'>".$i."</font></a>&nbsp;";
        
}
    }
    if(
$pagina<1)
    {
        echo 
"<a href='resultados.php?pag=" . ($pagina+1) . "'>Siguiente</a>";
        
//echo "<font face='verdana' size='-2'>anterior</font>";
        //echo "</a>&nbsp;";
    
}
  #4 (permalink)  
Antiguo 29/11/2010, 08:12
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.591
Antigüedad: 14 años, 4 meses
Puntos: 49
Respuesta: Paginacion de resultados desde un formulario

Bueno como dije tu paginador envia si o si los datos por GET esto quiere decir por URL

cuando haces : href='resultados.php?pag=" . ($pagina+1) . "'
le estas diciendo que pag=2 cuando cambias a pagina 2 pero arriba tu le indicas que pag te reciba los datos por POST. entonces al no recibir nada te vota de la pagina por ello puedes hacer un if arriba como el que te propuse

if ($_POST[tipo] != ""){$tipo = "$_POST[tipo]";}else{$tipo = "$_GET[tipo]";}

en donde le dices que si POST tipo es distinto de vacio tipo valdra POST tipo en tu caso inicial 1
de lo contrario tomara lo que reciba por GET en tu caso 2...3...etc...

para est debes hacer en tus hfref


cuando haces : href='resultados.php?pag=" . ($pagina+1) . "&amptipo=$tipo'
lo mismo para el -1 etc...

con esto estas pasando el valor tipo sea GET o POST ahora solo debes indicarle a tu paginador en donde estas y cuando haces

$pagina = $_POST['pag'];
deberia ser $pagina = $tipo;

entonces en tu formulario pasas siempre tipo=1
y ya luego tu paginador hace el resto, espero se haya entendido.

Saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #5 (permalink)  
Antiguo 29/11/2010, 10:33
 
Fecha de Ingreso: noviembre-2010
Ubicación: Valencia
Mensajes: 3
Antigüedad: 9 años, 1 mes
Puntos: 0
Respuesta: Paginacion de resultados desde un formulario

Hola , he puesto lo que me has dicho pero me sigue pasando lo mismo. En la segunda pagina ya no me muestra nada, solo errores de definicion.
  #6 (permalink)  
Antiguo 30/11/2010, 09:19
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.591
Antigüedad: 14 años, 4 meses
Puntos: 49
Respuesta: Paginacion de resultados desde un formulario

y cuales son los errores que te muestra?
__________________
Gokuh Salvo al mundo. PUNTO!!!!

Etiquetas: paginacion, resultados, formulario
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 23:00.