Foros del Web » Programando para Internet » PHP »

Anterior, siguiente y random en cada post.-

Estas en el tema de Anterior, siguiente y random en cada post.- en el foro de PHP en Foros del Web. Hola, tengo un sitio web desarrollado en Php, lo que necesito es estar en un post y que tenga una opción de siguiente post y ...
  #1 (permalink)  
Antiguo 09/04/2012, 13:02
Avatar de BekoxD  
Fecha de Ingreso: mayo-2008
Ubicación: Perú
Mensajes: 220
Antigüedad: 15 años, 11 meses
Puntos: 11
Anterior, siguiente y random en cada post.-

Hola, tengo un sitio web desarrollado en Php, lo que necesito es estar en un post y que tenga una opción de siguiente post y post anterior.

Por ejemplo:

Estamos dentro de miweb.com/post/12/ y que la opción de anterior marque /post/11/ y la de siguiente /post/13/ .

Ahora si por ejemplo no existe la id /13/ puede mandar a un random, ahora por ejemplo si la id /11/ aya sido eliminada automáticamente mande a la id /10/ y si la 10 también esta eliminada sucesivamente mandarse a la 9 .

Si quieren un claro ejemplo pueden ver en esta pagina

http://www.damnlol.com

se podrán fijar en las flechas.-

Muchas gracias.
Un saludo.-
__________________
Si tú sabes lo que vales, ve y consigue lo que mereces.
  #2 (permalink)  
Antiguo 09/04/2012, 13:14
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Anterior, siguiente y random en cada post.-

Es fácil, solo sumas o restas 1 al id del post luego usando el id obtenido seleccionas en el data base el post y así obtienes el url para ir al post anterior o al siguiente, luego si el post no existe usas un condicional.
Saludos...
  #3 (permalink)  
Antiguo 09/04/2012, 13:50
Avatar de BekoxD  
Fecha de Ingreso: mayo-2008
Ubicación: Perú
Mensajes: 220
Antigüedad: 15 años, 11 meses
Puntos: 11
Respuesta: Anterior, siguiente y random en cada post.-

algun codigo de ejemplo? tengo el código de mi paginador, no se si lo puedo hacer eso eso?

Código PHP:
<?
include ("config.php");
$page $_REQUEST["page"];
if (!isset(
$page)) { $page 1; }
$imageperpage 10;
$unox = (($page-1)*10);

$sq3 "SELECT COUNT(*) FROM pagina";
$resp3 mysql_query($sq3);
$total_count =mysql_result($resp30);
$cuantos_total =$total_count;#Ultimo ID registrado
$totpages $cuantos_total $imageperpage;
$totpages ceil($totpages);
if(
$page>1){
$anterior $page-1;
echo 
"<a href=\"sem/?page=$anterior\">« Pagina anterior</a>";

}
 if (
$totpages == 0) { $totpages 1; }
$siguiente $page+1;
if(
$siguiente<=$totpages){

echo 
"<a href=\"sem/?page=$siguiente\"> Siguiente pagina » </a>";

}
?>
__________________
Si tú sabes lo que vales, ve y consigue lo que mereces.
  #4 (permalink)  
Antiguo 09/04/2012, 14:17
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Anterior, siguiente y random en cada post.-

Yo pondría en la página del artículo en la que te encuentras algo de este tipo, suponiendo que las quieras ordenar por id

Código PHP:
$id_actual /*la id de la página */
$prev mysql_fetch_assoc(mysql_query("SELECT id FROM tutabla WHERE id < '".$id_actual."' ORDER BY id DESC LIMIT 0,1"));
$next mysql_fetch_assoc(mysql_query("SELECT id FROM tutabla WHERE id > '".$id_actual."' ORDER BY id ASC LIMIT 0,1"));

if(
$prev['id'] > 0) echo "<a href=\"sem/?page=$prev\">« Pagina anterior</a>"
if(
$next['id'] > 0) echo "<a href=\"sem/?page=$next\"> Siguiente pagina » </a>"
  #5 (permalink)  
Antiguo 09/04/2012, 14:38
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Anterior, siguiente y random en cada post.-

Alternativa a lo que publico zalito12

1) Aprende PHP porque si no sabes hacer esto no sabes PHP y porque no es bueno que los demás hagan tu trabajo

Ahora cuando entras a un post de seguro tienes el id por get ejemplo: $_GET['id']

para obtener el id anterior y siguiente haces asi:

Código PHP:
$anterior $_GET['id'] - 1;
$siguiente $_GET['id'] + 1;
//para imprimir el enlace anterior y siguiente
echo "<a href=\"http://dominio.com/post/".$anterior."/\">Anterior</a><br>";
echo 
"<a href=\"http://dominio.com/post/".$siguiente."/\">Siguiente</a>"
Ahora si el post no existe haces un condicional que diga si no resives datos del data base el post no existe luego usas el id le restas 1 y haces un header location para redirecionar al post alternativo.
Esto lo vas a descubrir tu así aprendes un poco.

Saludos...
  #6 (permalink)  
Antiguo 09/04/2012, 15:09
Avatar de BekoxD  
Fecha de Ingreso: mayo-2008
Ubicación: Perú
Mensajes: 220
Antigüedad: 15 años, 11 meses
Puntos: 11
Respuesta: Anterior, siguiente y random en cada post.-

Muchas gracias @ILuzbel me funciona perfectamente el codigo en (anterior y siquiente) pero ahora tengo problemas cuando entras a la id eliminada.-
__________________
Si tú sabes lo que vales, ve y consigue lo que mereces.
  #7 (permalink)  
Antiguo 09/04/2012, 17:09
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Anterior, siguiente y random en cada post.-

Bueno, lo que decía ILuzbel también es una solución:
Añadir al principio del documento php una comprobación de que existe dicho artículo y si no aumentar o disminuir uno.
Si prefieres esa solución podría hacer esa parte de código, pero prueba el código que te puse, debería funcionar perfectamente, sólo falta cambiar:
Código PHP:
$id_actual intval($_GET['id']); 
  #8 (permalink)  
Antiguo 10/04/2012, 05:52
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Anterior, siguiente y random en cada post.-

Bueno terminare de ayudarte XD

Código PHP:
Ver original
  1. //ahora para el condicional primero tienes que hacer un select para verificar si el post existe
  2. $sql="SELECT COUNT(*) FROM posts WHERE id=".$_GET['id'];
  3. //hacemos un condicional
  4. if($resultado != 0):
  5.     //si es difente de 0 mostramos el post
  6. else:
  7.     //si es igual a 0 lo redireccionamos
  8.     $anterior = $_GET['id'] - 1;
  9.     if($anterior != 0):
  10.         //si el id obtenido es diferente de 0 redireccionamos
  11.         header ("Location: http://dominio.com/post/".$anterior."/");
  12.     else:
  13.         //si el id obtenido es igual a 0 redireccionamos al siguiente
  14.         $siguiente = $_GET['id'] + 1;
  15.         header ("Location: http://dominio.com/post/".$siguiente."/");
  16.     endif;
  17. endif;

Saludos...
  #9 (permalink)  
Antiguo 10/04/2012, 07:34
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Anterior, siguiente y random en cada post.-

La solución de @zalito12 es la óptima. No os compliquéis con consultas inútiles de si existe la id o si no existe, pues imaginaos que del id 20 al 25 no hay ninguno, son cuatro consultas para comprobar si existe una maldita id, cuando esto se hace directamente con SQL.

Saludos.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #10 (permalink)  
Antiguo 10/04/2012, 07:46
 
Fecha de Ingreso: septiembre-2011
Mensajes: 106
Antigüedad: 12 años, 6 meses
Puntos: 19
Respuesta: Anterior, siguiente y random en cada post.-

Cita:
Iniciado por CHuLoSoY Ver Mensaje
La solución de @zalito12 es la óptima. No os compliquéis con consultas inútiles de si existe la id o si no existe, pues imaginaos que del id 20 al 25 no hay ninguno, son cuatro consultas para comprobar si existe una maldita id, cuando esto se hace directamente con SQL.

Saludos.
La mia es una de las posibles soluciones, se que la de zalito12 es la mas optima. y si yo quisiera perderia tiempo con las consultas que tu dices inutiles, porque al final daria el mismo resultado.

..::EDITADO::..

Ok ya termine los creditos son de zalito12, asi serian los botones para ir adelante y atras:

Código PHP:
Ver original
  1. $prev = mysql_fetch_assoc(mysql_query("SELECT id FROM tutabla WHERE id < '".$_GET['id']."' ORDER BY id DESC LIMIT 0,1"));
  2. $next = mysql_fetch_assoc(mysql_query("SELECT id FROM tutabla WHERE id > '".$_GET['id']."' ORDER BY id ASC LIMIT 0,1"));
  3.  
  4. echo ($prev['id'] > 0)? "<a href=\"http://dominio.com/post/".$prev."/\">« Pagina anterior</a>" : "<a>« Pagina anterior</a>" ;
  5. echo ($next['id'] > 0)? "<a href=\"http://dominio.com/post/".$next."/\"> Siguiente pagina » </a>" : "<a>Siguiente pagina »</a>";

Y este seria el codigo que te permite verificar si existe o no el post
Código PHP:
Ver original
  1. //ahora para el condicional primero tienes que hacer un select para verificar si el post existe
  2. $res=mysql_fetch_assoc(mysql_query("SELECT COUNT(*) FROM posts WHERE id=".$_GET['id']));
  3. //hacemos un condicional
  4. if($res != 0):
  5.     //si es difente de 0 mostramos el post
  6. else:
  7.     //si es igual a 0 lo redireccionamos
  8.     $anterior = mysql_fetch_assoc(mysql_query("SELECT id FROM posts WHERE id < '".$_GET['id']."' ORDER BY id DESC LIMIT 0,1"));
  9.     if($anterior['id'] != 0):
  10.         //si el id obtenido es diferente de 0 redireccionamos
  11.         header ("Location: http://dominio.com/post/".$anterior['id']."/");
  12.     else:
  13.         //si el id obtenido es igual a 0 redireccionamos al siguiente
  14.         $siguiente = mysql_fetch_assoc(mysql_query("SELECT id FROM posts WHERE id > '".$_GET['id']."' ORDER BY id ASC LIMIT 0,1"));
  15.         header ("Location: http://dominio.com/post/".$siguiente['id']."/");
  16.     endif;
  17. endif;

Saludos...

Última edición por ILuzbel; 10/04/2012 a las 08:28
  #11 (permalink)  
Antiguo 10/04/2012, 14:27
Avatar de zalito12  
Fecha de Ingreso: noviembre-2011
Ubicación: Coruña, España
Mensajes: 430
Antigüedad: 12 años, 5 meses
Puntos: 67
Respuesta: Anterior, siguiente y random en cada post.-

Bueno no quería causar polémica :D
Es que alguna vez he tenido que hacer algo así y lo hice así, la otra ni se me ocurrió, es cierto que si hay varias id vacías andaría redireccionando, como ya digo ni me la llegue a plantear, cuando se me ocurrió esa la apliqué.

Etiquetas: post, random
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 19:26.