Foros del Web » Programando para Internet » PHP »

<< anterior / siguiente >> en PHP - Ayuda

Estas en el tema de << anterior / siguiente >> en PHP - Ayuda en el foro de PHP en Foros del Web. Hola, Tengo una página de noticias donde se muestran los títulos, y al hacer click muestra la noticia. Lo que necesitaría, es poner en cada ...
  #1 (permalink)  
Antiguo 10/02/2010, 12:50
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
<< anterior / siguiente >> en PHP - Ayuda

Hola,

Tengo una página de noticias donde se muestran los títulos, y al hacer click muestra la noticia. Lo que necesitaría, es poner en cada noticia un botón de Anterior y otro de Siguiente, para ver el registro anterior o siguiente en la base de datos.

Probé algunos paginadores pero no me funcionaron para lo que necesito hacer.

No se si me expliqué bien, espero me hayan entendido.

¿Cómo podría hacerlo?

Muchísimas gracias desde ya!!

Saludos.
  #2 (permalink)  
Antiguo 10/02/2010, 12:54
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Un boton de anterior y siguiente no es ningun paginador, son dos enlaces simplemente a URLs de otras noticias.

Tienes que arreglartelas con php y msql, para que por ejemplo en la pagina

noticia?id=7

haya enlace a:

noticia?id=6 / noticia?id=8

Tendras que controlar tambien si es la ultima noticia , entonces no habra siguiente... lo mismo con la primera.
  #3 (permalink)  
Antiguo 10/02/2010, 12:58
Avatar de maycolalvarez
Colaborador
 
Fecha de Ingreso: julio-2008
Ubicación: Caracas
Mensajes: 12.120
Antigüedad: 16 años, 3 meses
Puntos: 1532
Respuesta: << anterior / siguiente >> en PHP - Ayuda

el código de un paginador te funciona, lo único que debes de establecer es que te devuelva 1 entrada por página (LIMIT 1 en SQL), porque la desventaja que tiene el método de Vun es que si eliminas físicamente una noticia, creas un vació entre los ID
  #4 (permalink)  
Antiguo 10/02/2010, 12:58
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 15 años, 3 meses
Puntos: 12
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Mira aquí un poco de código

Código PHP:
<a href="programa.php?id=".( $id-1). "\">Anterior</a> / <a href=\"programa.php?id=".($id+1). "\"> Siguiente</a> 
__________________
Juego de navegador online
  #5 (permalink)  
Antiguo 10/02/2010, 13:11
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Muchas gracias por las respuestas a todos!!

Cita:
Iniciado por morior Ver Mensaje
Mira aquí un poco de código

Código PHP:
<a href="programa.php?id=".( $id-1). "\">Anterior</a> / <a href=\"programa.php?id=".($id+1). "\"> Siguiente</a> 
Probé eso y funcionó perfecto. Ahora tendría que hacer lo que dijo Vun, porque en la primer noticia me aparece Anterior y no debería aparecer, y en la última también. ¿Lo tengo que hacer con un if verdad? ¿Alguna idea?

Éste es mi código, es para probar solamente, por eso es tan sencillo. Después lo adaptaré a mi sitio.

Código PHP:
    <?
    
require("conexion.php");
    
$id $_GET['id'];
    
$query=mysql_query("select * from pijeta where id=$id",$connection);
    
$array=mysql_fetch_array($query);
    
    echo 
$array['nombre'];
    
    echo 
"<a href=fotos.php?id=".( $id-1). ">Anterior</a> / <a href=fotos.php?id=".($id+1)."> Siguiente</a>"
    
    
    
?>
  #6 (permalink)  
Antiguo 10/02/2010, 13:13
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Pues meter la etiqueta <a> del anterior en un IF, un condicional que pregunte si es o no la primera noticia, igual con el enlace a siguiente
  #7 (permalink)  
Antiguo 10/02/2010, 13:18
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 15 años, 3 meses
Puntos: 12
Respuesta: << anterior / siguiente >> en PHP - Ayuda

O puedes cambiarle el valor antes de mostrarlo.

Código PHP:
<? 
    
require("conexion.php");
    
$id $_GET['id']; 

if(
$id<=0){$id=1;}//esto es lo que he puesto pero lo puedes ajustar a lo que quieras, incluso le podrías meter un máximo
// if($id >2000){$id=2000;} descomenta esto para el máximo que porsupuesto lo debes ajustar tú mismo.


    
$query=mysql_query("select * from pijeta where id=$id",$connection); 
    
$array=mysql_fetch_array($query); 
     
    echo 
$array['nombre']; 
    

 
    echo 
"<a href=fotos.php?id=".( $id-1). ">Anterior</a> / <a href=fotos.php?id=".($id+1)."> Siguiente</a>";  
     
     
    
?>

Un consejo creo que es mejor el include que el require, que me corrijan porfavor si me equivoco.
__________________
Juego de navegador online
  #8 (permalink)  
Antiguo 10/02/2010, 13:33
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Hola Morior, muchas gracias por la respuesta.

Funcionó, pero tiene dos problemas: el primero es que sigue apareciendo el enlace de "anterior", si bien cuando estoy en el primer registro y hago click en "anterior" no va hacia ningun lado, el link sigue apareciendo.

Y el otro problema es que cada vez que agregue un nuevo artículo, debería modificar el código para que funcione también con el botón "siguiente", ¿no? Ya que el último ID se incrementaría.

Esto lo puse para la última noticia: if($id>=13){$id=12;} (ya que hay 12 registros) , ¿hay alguna manera que se autoincremente sólo cuando agrego un registro? ¿O para que vaya hacia el útimo registro? No se si me explico bien.

Gracias!! Me han ayudado mucho.

Última edición por Federic0; 10/02/2010 a las 13:46
  #9 (permalink)  
Antiguo 11/02/2010, 00:47
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: << anterior / siguiente >> en PHP - Ayuda

Hola,

Posiblemente te sea de ayuda el siguiente pseudo-codigo,

Código PHP:
Ver original
  1. <?php
  2.     $id = (int)$_GET['id'];
  3.    
  4.     $query = mysql_query("
  5.         select
  6.             *,
  7.             (select max(id) from pijeta where id < $id) minimo,
  8.             (select min(id) from pijeta where id > $id) maximo
  9.         from pijeta
  10.         where id = $id", ...);
  11.     $data = mysql_fetch_array($query);
  12.     if ($data) {
  13.         // ...
  14.         if (!is_null($data['minimo'])) echo '<a href=fotos.php?id=' . $data['minimo'] . '>Anterior</a>';
  15.         if (!is_null($data['minimo']) && !is_null($data['maximo'])) echo ' / ';
  16.         if (!is_null($data['maximo'])) echo '<a href=fotos.php?id=' . $data['maximo'] . '>Siguiente</a>';
  17.     } else {
  18.         // scream_loud();
  19.     }
  20. ?>
Saludos,
  #10 (permalink)  
Antiguo 11/02/2010, 15:33
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Gracias por la respuesta!

Ese problema no me preocupa tanto, si bien no lo pude solucionar aún, iré probando hasta que lo solucione.

Otro problema que tengo es que si borro un registro, ese ID quedará vacio y si alguien va hacia "siguiente" y el registro esta borrado, me aparecerá en blanco.

Por ejemplo, si borré el registro con ID 5 y estoy en el registro 4, al hacer click en "siguiente" irá hacia el 5, que está vacio, por lo que me aparecerá en blanco.

¿Se puede solucionar?

Muchas gracias desde ya!
  #11 (permalink)  
Antiguo 11/02/2010, 16:22
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 15 años, 3 meses
Puntos: 12
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Entonces puedes usar el mismo código que te pasé pero en vez de pasar al siguiente id directamente, lo puedes procesar antes de mostrarlo.
Ahora estoy un poco ocupado, pero la verdad es que necesito hacer algo así para mi juego porque se me ha ocurrido una idea con este tema. A ver si luego lo hago, lo pruebo y te dejo el código :)
__________________
Juego de navegador online
  #12 (permalink)  
Antiguo 12/02/2010, 00:33
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: << anterior / siguiente >> en PHP - Ayuda

Cita:
Iniciado por Federic0 Ver Mensaje
... Ese problema no me preocupa tanto, ...
¿ Cual problema ?

Cita:
Iniciado por Federic0 Ver Mensaje
... Otro problema que tengo es que si borro un registro, ese ID quedará vacio y si alguien va hacia "siguiente" y el registro esta borrado, me aparecerá en blanco.

Por ejemplo, si borré el registro con ID 5 y estoy en el registro 4, al hacer click en "siguiente" irá hacia el 5, que está vacio, por lo que me aparecerá en blanco. ...
¿No entendiste el código que mostré? Hubiera sido preferible que lo mencionaras, la consulta SQL extrae el registro anterior y el registro siguiente, aunque solamente tengas 2, 8, 90, si usas el ID = 8, en ['minimo'] tienes el anterior y en ['maximo'] el siguiente.

Por lo tanto te generaría la siguiente estructura:

?id=2 anterior / ?id=90 siguiente.

Y si agregas o eliminas un registro no tienes que modificar nada.

Cita:
Iniciado por Federic0 Ver Mensaje
... ¿Se puede solucionar? ...
Si pones antención a lo que se te muestra, sí.

Saludos,
  #13 (permalink)  
Antiguo 12/02/2010, 01:29
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Respuesta: << anterior / siguiente >> en PHP - Ayuda

Hola,

Posiblemente así está mas claro,
pseudo-codigo:

Código PHP:
Ver original
  1. <?php
  2.     // RECOJES EL VALOR DE ID, PREVIAMENTE REVISAS QUE GET EXISTA
  3.     // Y QUE SEA UN NÚMERO, DE CUALQUIER OTRA FORMA ID DEBE SER IGUAL A 0
  4.     $id = (int)$_GET['id']; // if isset(...
  5.    
  6.     // LA CONSULTA BUSCA EL ID, SACA EL NÚMERO ANTERIOR Y SIGUIENTE,
  7.     $query = mysql_query("
  8.        select
  9.            *,
  10.            (select max(id) from pijeta where id < $id) minimo,
  11.            (select min(id) from pijeta where id > $id) maximo
  12.        from pijeta
  13.        where id = $id", ...);
  14.     $data = mysql_fetch_array($query);
  15.     if ($data) {
  16.         // ...
  17.         // MUESTRA LOS BOTONES DE NAVEGACIÓN CORRESPONDIENTES
  18.         if (!is_null($data['minimo'])) echo '<a href=fotos.php?id=' . $data['minimo'] . '>Anterior</a>';
  19.         if (!is_null($data['minimo']) && !is_null($data['maximo'])) echo ' / ';
  20.         if (!is_null($data['maximo'])) echo '<a href=fotos.php?id=' . $data['maximo'] . '>Siguiente</a>';
  21.     } else {
  22.         // scream_VERY_loud();
  23.        
  24.         // SCREAM !!! ES BROMA. ALGUIEN SIGUIO UN ENLACE INVALIDO O
  25.         // QUISO MANIPULAR EL URL, POR LO QUE EL REGISTRO NO EXISTE
  26.         // BUSCA EL MENOR ID Y REDIRECCIONA PARA BUSCARLO.
  27.         $query = mysql_query("
  28.             select min(id) minimo, count(*) cuenta
  29.             from pijeta", ...);
  30.  
  31.         if ($data) {
  32.             if ($data['cuenta'] != 0)
  33.                 // SI HAY REGISTROS REDIRECCIONA PARA BUSCAR EL MENOR
  34.                 header('Location: http://www.example.com/thisfile.php?id=' . $query['minimo']);
  35.             } else {
  36.                 // LA BASE DE DATOS ESTÁ VACIA
  37.                 // NOW_scream_VERY_loud();
  38.             }
  39.         }
  40.     }
  41. ?>
Saludos,
  #14 (permalink)  
Antiguo 12/02/2010, 04:16
Avatar de morior  
Fecha de Ingreso: agosto-2009
Ubicación: Barcelona
Mensajes: 437
Antigüedad: 15 años, 3 meses
Puntos: 12
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Olé ahí muy bueno HackmanC , eso me ayuda a mí también ya que ahora mismo me iba a poner a hacer algo así para mi web.

Gracias, lo pruebo, lo adapto y a ver si funciona.
__________________
Juego de navegador online
  #15 (permalink)  
Antiguo 15/02/2010, 13:33
 
Fecha de Ingreso: diciembre-2007
Ubicación: Buenos Aires
Mensajes: 328
Antigüedad: 16 años, 11 meses
Puntos: 1
Respuesta: << anterior / siguiente >> en PHP - Ayuda

Funcionó perfecto, era justo lo que necesitaba. Muchísimas gracias!!!

Saludos!!

Etiquetas: siguiente, anteriores
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 01:14.