Foros del Web » Programando para Internet » PHP »

volver atras usando las flechas del navegador

Estas en el tema de volver atras usando las flechas del navegador en el foro de PHP en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 19/12/2012, 13:45
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
volver atras usando las flechas del navegador

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 ".&nbsp;&nbsp;";
$localidad=utf8_decode($row["localidad"]);
echo ucfirst($localidad);
}
echo ")";
}
else
{
if ($row["localidad"])
{
echo ".&nbsp;&nbsp;";
$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">&laquo; 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 &raquo;</a></li>
<?php
}
else
{
?>
<li class="next-off">Next &raquo;</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;?>" >&laquo; 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 &raquo;</a></li>
<?php
}else{
?> <li class="next-off">Next &raquo;</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!!!
  #2 (permalink)  
Antiguo 19/12/2012, 13:48
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 15 años, 11 meses
Puntos: 2534
Respuesta: volver atras usando las flechas del navegador

En realidad el problema es que estás usando POST para el formulario, lo cual no es necesario, si cambias a GET debería ir bien.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 19/12/2012, 13:50
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 18 años, 11 meses
Puntos: 839
Respuesta: volver atras usando las flechas del navegador

Porque la búsqueda se procesa por POST, entonces el navegador pregunta si reenviar los datos.

Podrías inmediatamente después de guardar los datos recibidos por POST en las variables de sesión enviar una cabecera Location para redireccionar a la primera página de resultados.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 19/12/2012, 14:04
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: volver atras usando las flechas del navegador

Hola David, lo he intentado, pero no me ha funcionado posiblemente no lo supe hacer bien.
La primera pagina de resultados es "resultado1.php"
Si regreso de una pagina de resultados a la primera pagina de resultados es "resultado1.php?page=1" y en este caso si funciona.
Por favor me podrias decir el codigo, con header no puedo porque ya hay codigo html antes.
y en session_start() me crea un bucle indefinido
Muchas graicas!!!
  #5 (permalink)  
Antiguo 19/12/2012, 14:08
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 18 años, 11 meses
Puntos: 839
Respuesta: volver atras usando las flechas del navegador

¿Y si envías el formulario por GET como te indicó pateketrueke?
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #6 (permalink)  
Antiguo 19/12/2012, 14:10
 
Fecha de Ingreso: diciembre-2011
Mensajes: 14
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: volver atras usando las flechas del navegador

Millones de gracias a pateketrueke y a David!!!!!!
Con GET lo he solucionado!!!!!!!!

Etiquetas: atras, flechas, formulario, html, mysql, navegador, resultados, sql, usando, volver
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 00:45.