Hola.
Les agradeceria mucho me pudieran ayudar.
Tengo un buscador el cual muestra los resultados en varias páginas (segun numero de resultados).
Se puede pinchar en uno de los productos del listado y verlo en detalles.
El problema es el siguiente:
Cuando estoy en la primera página de resultados y paso a ver uno de los productos que lista y luego quiero volver a la pagina de resultados con la flecha del navegador me sale el siguiente error:
Confirmar reenvío del formulario
Esta página web necesita los datos introducidos anteriormente para mostrarse correctamente. Puedes volver a enviar los datos, pero se repetirán las acciones que la página haya realizado anteriormente. Pulsa la opción Volver a cargar para enviar los datos de nuevo y mostrar esta página.
Sin embargo si el producto que se muestra esta en otra pagina que no es la primera, o regreso a la primera pagina despues de haber visto otras paginas de resultados me funciona perfectamente las flechas del navegador.
Creo que es un problema con las sesiones pero ni idea.
aqui les pongo el codigo
<?php
session_start();
if (isset($_SESSION['idCat']))
$_SESSION['idCat'];
if (isset($_SESSION['local']))
$_SESSION['local'];
if (isset($_SESSION['idPro']))
$_SESSION['idPro'];
?>
OMITO LA CABECERA DE HTML
<div id="resultado-anuncio">
<br />
<h2 class="verde">Resultados</h2>
<?php
if(!isset($_GET['page']))
{
$page=1;
$idCategoria=$_POST['idCategoria'];
$localidad=$_POST['localidad'];
$idProvincias=$_POST['idProvincias'];
$_SESSION['idCat'] = $idCategoria;
$_SESSION['idPro'] = $idProvincias;
$_SESSION['local'] = $localidad;
}
else
{
$page= $_GET['page'];
@$idCategoria = $_SESSION['idCat'];
@ $idProvincias=$_SESSION['idPro'];
@ $localidad=$_SESSION['local'];
}
trim ($localidad);
$localidad = htmlspecialchars($localidad);
include ('php/includes.php');
$conn = db_connect();
echo "<div id='central' class='izquierda'>";
$categoria=get_categoria_name($idCategoria);
echo "<p>Categoria: ";
echo ucfirst($categoria);
echo "</p>";
$provincia=get_provincia_name($idProvincias);
echo "<p>Provincia: $provincia</p>";
$consulta="SELECT COUNT(*) cant FROM `anuncios` WHERE anuncios.idCategoria=$idCategoria and anuncios.idProvincias=$idProvincias";
if (!empty($localidad)) { $query .= " AND anuncios.localidad LIKE '%$localidad%'"; }
$datos=mysql_query($consulta,$conn);
$fila = mysql_fetch_array($datos, MYSQL_ASSOC);
$num_rows=$fila["cant"];
echo "<hr />";
//ACA SE DECIDE CUANTOS RESULTADOS MOSTRAR POR PÁGINA , EN EL EJEMPLO PONGO 2
$rows_per_page= 2;
//CALCULO LA ULTIMA PÁGINA
$lastpage= ceil($num_rows/ $rows_per_page);
//COMPRUEBO QUE EL VALOR DE LA PÁGINA SEA CORRECTO Y SI ES LA ULTIMA PÁGINA
$page=(int)$page;
if($page > $lastpage){
$page= $lastpage;
}
if($page < 1){
$page=1;
}
//CREO LA SENTENCIA LIMIT PARA AÑADIR A LA CONSULTA QUE DEFINITIVA
$limit= 'LIMIT'. ($page -1) * $rows_per_page . ',' .$rows_per_page;
$que = ($page -1) * $rows_per_page . ',' .$rows_per_page;
//REALIZO LA CONSULTA QUE VA A MOSTRAR LOS DATOS (ES LA ANTERIO + EL $limit)
$query = "SELECT anuncios.localidad, anuncios.titulo, anuncios.idAnuncio, anuncios.precio, anuncios.subtitulo FROM `anuncios` WHERE anuncios.idCategoria=$idCategoria and anuncios.idProvincias=$idProvincias";
if (!empty($localidad)) { $query .= " AND anuncios.localidad LIKE '%$localidad%'"; }
$query .= " ORDER BY anuncios.precio DESC LIMIT $que";
$result = @mysql_query($query);
if (!$result)
{
//SI FALLA LA CONSULTA MUESTRO ERROR
die('Invalid query: ' . mysql_error());
}else{
//SI ES CORRECTA MUESTRO LOS DATOS
while($row=mysql_fetch_assoc($result))
{
//$var1=utf8_decode($row['tipo']);
//echo $var1."<br>";
echo "<div id='central'>";
echo "<p>";
$title=utf8_decode($row["titulo"]);
echo ucfirst($title);
if ($row["subtitulo"])
{
echo " (";
$subtitulo=utf8_decode($row["subtitulo"]);
echo $subtitulo;
if ($row["localidad"])
{
echo ". ";
$localidad=utf8_decode($row["localidad"]);
echo ucfirst($localidad);
}
echo ")";
}
else
{
if ($row["localidad"])
{
echo ". ";
$localidad=utf8_decode($row["localidad"]);
echo ucfirst($localidad);
}
}
?>
</p>
</div>
<div id="central">
<?php
echo "<a href =\"anuncio.php?idAnuncio=$row[idAnuncio]\"><h4>Ver anuncio</h4></a>";
echo "<br />";
echo "</div>";
}
}
?>
</div>
</div>
<?php
//UNA VEZ Q MUESTRO LOS DATOS TENGO Q MOSTRAR EL BLOQUE DE PAGINACIÓN SIEMPRE Y CUANDO HAYA MÁS DE UNA PÁGINA
if($num_rows != 0){
$nextpage= $page +1;
$prevpage= $page -1;
?>
<ul id="pagination-digg">
<?php
//SI ES LA PRIMERA PÁGINA DESHABILITO EL BOTON DE PREVIOUS, MUESTRO EL 1 COMO ACTIVO Y MUESTRO EL RESTO DE PÁGINAS
if ($page == 1) {
?>
<li class="previous-off">« Previous</li>
<li class="active">1</li>
<?php
for($i= $page+1; $i<= $lastpage ; $i++)
{
?>
<li><a href="resultado1.php?page=<?php echo $i;?>"><?php echo $i;?></a></li>
<?php
}
//Y SI LA ULTIMA PÁGINA ES MAYOR QUE LA ACTUAL MUESTRO EL BOTON NEXT O LO DESHABILITO
if($lastpage >$page )
{
?>
<li class="next"><a href="resultado1.php?page=<?php echo $nextpage;?>" >Next »</a></li>
<?php
}
else
{
?>
<li class="next-off">Next »</li>
<?php
}
}
else {
//EN CAMBIO SI NO ESTAMOS EN LA PÁGINA UNO HABILITO EL BOTON DE PREVIUS Y MUESTRO LAS DEMÁS
?>
<li class="previous"><a href="resultado1.php?page=<?php echo $prevpage;?>" >« Previous</a></li>
<?php
for($i= 1; $i<= $lastpage ; $i++){
//COMPRUEBO SI ES LA PÁGINA ACTIVA O NO
if($page == $i){
?> <li class="active"><?php echo $i;?></li>
<?php
}else{
?> <li><a href="resultado1.php?page=<?php echo $i;?>" ><?php echo $i;?></a></li>
<?php
}
}
//SI NO ES LA ÚLTIMA PÁGINA ACTIVO EL BOTON NEXT
if($lastpage >$page ){ ?>
<li class="next"><a href="resultado1.php?page=<?php echo $nextpage;?>">Next »</a></li>
<?php
}else{
?> <li class="next-off">Next »</li>
<?php
}
}
?></ul></div>
<?php
}
?>
</body>
</html>
Todo me funciona bien, es un codigo que encontre en la red para paginar, repito el problema es que si estoy por primera vez en la pagina 1 o solo tengo una pagina al ver uno de los productos si quiero volver atras me sale error, sin embargo desde otras paginas, pagina 2, pagina 3... si veo uno de sus productos y luego quiero regresar a los resultados no me da problemas.
Muchas gracias!!!