Foros del Web » Programando para Internet » PHP »

Paginación de resultados

Estas en el tema de Paginación de resultados en el foro de PHP en Foros del Web. Saludos. Escribo casi desde la desesperación. Llevo una semana y un día, como una condena, pero que además es verdad intentando paginar una búsqueda de ...
  #1 (permalink)  
Antiguo 01/05/2004, 14:15
Avatar de senioman  
Fecha de Ingreso: mayo-2004
Mensajes: 13
Antigüedad: 13 años, 7 meses
Puntos: 1
Paginación de resultados

Saludos. Escribo casi desde la desesperación. Llevo una semana y un día, como una condena, pero que además es verdad intentando paginar una búsqueda de una base de datos. El caso es que he encontrado un código bueno por ahí y al no funcionar le he ido modificando cosas. El resultado es que la primera página visiona los resultados del 1 al 10, como quiero, pero al pasar a la segunda aparece el error 404. No se que hacer.

Aquí os paso el código. La primera parte selecciona resultados y los plasma y la segunda corresponde a la paginación propia.

Gracias por vuestra ayuda ante todo. un abrazo.

Código PHP:
///dos////////////muestra los resultados correspondientes a cada página
$image '<href="mostraroracion.php?tema_id=$tema_id"><img src="../imagenes/pastoral/icono' $row['icono'] . '.gif" width="14" height="14" border="0" /></a>';
$link mysql_connect("localhost""senioman"); 
mysql_select_db("foro"$link); 
if (!isset(
$pag)) $pag=1// Si la variable no está definida mostrar la página 1
$tampag 10;
$reg1 = ($pag-1) * $tampag// resta 1 del número de página y lo multiplica por el número de entradas por página. En relación con mysql_data_seek
$result mysql_query("SELECT tema_id, tema_titulo, tema_creador FROM temas_foro "$link); // después de temas_foro añadir "order by tema_id desc" para invertir orden
$total mysql_num_rows($result); //número total de entradas
if (mysql_num_rows($result)){ 
  echo 
"<table border = '0'> \n"
  echo (
$pag-1)*$tampag; echo $pag;//esto puselo yo
  
for ($i=$reg1$i<min($reg1+$tampag$total); $i++) { //
    
mysql_data_seek($result$i); //sitúa el puntero interno en la primera entrada de la serie que toca muestrar
    
$row mysql_fetch_array($result); // muestra las entradas seleccionadas en funcion del tampag y de la situacion del puntero interno
    
echo "<br><a href=\"mostraroracion.php?tema_id=".$row["tema_id"]."\">$image <font size='2' face='Verdana'>".$row["tema_id"]. "<font size='2' face='Verdana'>. <strong>".$row["tema_titulo"].
      
"</strong><br><font size='1' face='Verdana'>Puesto por ".$row["tema_creador"]."</td></tr> \n"
  }
  
  echo 
"</table> \n"
}
else
  echo 
"¡ No se ha encontrado ninguna oración !"
Segunda parte

Código PHP:

/******************************************************/
/* Funcion paginar
 * actual:          Pagina actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * Devuelve un texto que representa la paginacion
 */
function paginar($pag$total$tampag$enlace) {
  
$total_paginas ceil($total/$tampag);
  
$anterior $pag 1;
  
$posterior $pag 1;
  if (
$pag>1)
    
$texto "<a href=\"$enlace$anterior\">&laquo;</a> ";
  else
    
$texto "<b>&laquo;</b> ";
  for (
$i=1$i<$pag$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  
$texto .= "<b>$pag</b> ";
  for (
$i=$pag+1$i<=$total_paginas$i++)
    
$texto .= "<a href=\"$enlace$i\">$i</a> ";
  if (
$pag<$total_paginas)
    
$texto .= "<a href=\"$enlace$posterior\">&raquo;</a>";
  else
    
$texto .= "<b>&raquo;</b>";
  return 
$texto;
}


echo 
paginar($pag$total$tampag"oraciones.php?pag=");

?> 
  #2 (permalink)  
Antiguo 01/05/2004, 18:16
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
A ver si esto te salva la vida

http://www.php-hispano.net/archivos_tmp/98
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #3 (permalink)  
Antiguo 02/05/2004, 16:29
Avatar de senioman  
Fecha de Ingreso: mayo-2004
Mensajes: 13
Antigüedad: 13 años, 7 meses
Puntos: 1
Ya he conseguido solucionar el problema. Los enlaces que se decen crear a la páginas estaban mal formulados, pues era "oracion" en lugar de "oraciones".

También faltaba definir la variable pagina de la forma:

Código PHP:
$pag = ($_GET['pag']); 
Gracias pro su ayuda. No se imagina los priblemas que me dio.

saludos
  #4 (permalink)  
Antiguo 02/05/2004, 16:52
Avatar de Gerald  
Fecha de Ingreso: julio-2003
Mensajes: 1.356
Antigüedad: 14 años, 5 meses
Puntos: 2
Te funciono el enlace que te di o no? dinos en que estabas fallando para que todos aqui en foro nos enteremos y asi aprendamos todos ;) no crees
__________________
Solo por Hoy: Trataré de fortalecer mi mente. Estudiaré y aprenderé algo útil
Hoteldipity
Arte Caracol
  #5 (permalink)  
Antiguo 05/05/2004, 17:00
Avatar de senioman  
Fecha de Ingreso: mayo-2004
Mensajes: 13
Antigüedad: 13 años, 7 meses
Puntos: 1
siento decierte que el link no me funcionó, por eso no comenté nada. Os adjunto aquí el código definitivo. La página que quería hacer consistía en una lista donde se mostraban las 10 últimas entradas a la base de datos en orden invertido, y así de 10 en 10.
A su derecha aparecen los 200 primeros caracteres del ultimo añadido. El problema es que si se borra algun texto dejará de mostrarse el ultimo porque como no sabía decir "el último" puse que mostrara aquel cuya id era igual a la suma de todas la entradas. Se que me explico mal, si os puedo ayudar preguntáis. El código no es mío, es adaptación de varios sitios. Me gustaría incluir el nombre del autor pero no lo sé. Un saludo.



Parte primera:
Código PHP:
///muestra los resultados correspondientes a cada página
$image '<href="mostraroracion.php?tema_id=$tema_id"><img src="../imagenes/pastoral/icono' $row['icono'] . '.gif" width="14" height="14" border="0" /></a>';
$link mysql_connect("localhost""senioman"); 
mysql_select_db("foro"$link); 
$pag = ($_GET['pag']); // esta linea hay que añadir
if (!isset($pag)) $pag=1// Si la variable no está definida mostrar la página 1
$tampag 10;
$reg1 = ($pag-1) * $tampag// resta 1 del número de página y lo multiplica por el número de entradas por página. En relación con mysql_data_seek
$result mysql_query("SELECT tema_id, tema_titulo, tema_creador FROM temas_foro order by tema_id desc"$link); // después de temas_foro añadir "order by tema_id desc" para invertir orden
$total mysql_num_rows($result); //número total de entradas
if (mysql_num_rows($result)){ 
  echo 
"<table border = '0'> \n"
  for (
$i=$reg1$i<min($reg1+$tampag$total); $i++) { //
    
mysql_data_seek($result$i); //sitúa el puntero interno en la primera entrada de la serie que toca muestrar
    
$row mysql_fetch_array($result); // muestra las entradas seleccionadas en funcion del tampag y de la situacion del puntero interno
    
echo "<br><a href=\"mostraroracion.php?tema_id=".$row["tema_id"]."\">$image <font size='2' face='Verdana'>".$row["tema_id"]. "<font size='2' face='Verdana'>. <strong>".$row["tema_titulo"].
      
"</strong><br><font size='1' face='Verdana'>Puesto por ".$row["tema_creador"]."</td></tr> \n"
  }
  
  echo 
"</table> \n"
}
else
  echo 
"¡ No se ha encontrado ninguna oración !"
Parte segunda


Código PHP:
/******************************************************/
/* Funcion paginar
 * actual:          Pagina actual
 * total:           Total de registros
 * por_pagina:      Registros por pagina
 * enlace:          Texto del enlace
 * Devuelve un texto que representa la paginacion
 */
function paginar($pag, $total, $tampag, $enlace) {
  $total_paginas = ceil($total/$tampag);
  $anterior = $pag - 1;
  $posterior = $pag + 1;
  if ($pag>1)
    $texto = "<a href=\"$enlace$anterior\" class='Estilo20'>&laquo;</a> ";
  else
    $texto = "<b>&laquo;</b> ";
  for ($i=1; $i<$pag; $i++)
    $texto .= "<a href=\"$enlace$i\" class='Estilo20'>$i</a> ";
  $texto .= "<b>$pag</b> ";
  for ($i=$pag+1; $i<=$total_paginas; $i++)
    $texto .= "<a href=\"$enlace$i\" class='Estilo20'>$i</a></font> ";
  if ($pag<$total_paginas)
    $texto .= "<a href=\"$enlace$posterior\" class='Estilo20'>&raquo;</a>";
  else
    $texto .= "<b>&raquo;</b>";
  return $texto;
}
echo paginar($pag, $total, $tampag, "oracion.php?pag=");
?>
<?php print $display_block;?>
Parte tercera: Para mostrar los primeros caracteres de la ultima entrada, auqnue ya digo que mal formulado:
Código PHP:
 <?php




///muestra la ultima entrada
//verify the topic exists
$verify_topic "select tema_titulo from temas_foro where tema_id = $total";
$verify_topic_res mysql_query($verify_topic$link) or die(mysql_error());

if (
mysql_num_rows($verify_topic_res) < 1) {
    
//this topic does not exist
    
$display_block "<P><font size='2' face='Arial, Helvetica, sans-serif'><b>Ha seleccionado un tema incorrecto. Por favor <a href=\"listatemas.php\">vuelva a intentarlo</a>.</b></font></p>";
} else {
    
//get the topic title
   
$tema_titulo stripslashes(mysql_result($verify_topic_res,0'tema_titulo'));

   
//gather the posts
   
$get_posts "select tema_titulo, tema_autor, LEFT(tema_oracion,200) as resumentema_oracion, tema_fecha, date_format(tema_fecha, '%b %e %Y at %r') as fmt_tema_fecha, tema_creador from temas_foro where tema_id = $total"///el comando LEFT sirve para seleccionar el numero de caracteres que queremos hacer visibles de una variable
   
$get_posts_res mysql_query($get_posts,$link) or die(mysql_error());


   while (
$posts_info mysql_fetch_array($get_posts_res)) {
       
$tema_titulo $posts_info['tema_titulo'];
       
$tema_id $posts_info['tema_id'];
       
$tema_autor $posts_info['tema_autor'];
       
$tema_oracion stripslashes($posts_info['resumentema_oracion']); 
       
$tema_fecha $posts_info['tema_fecha'];
       
$tema_creador stripslashes($posts_info['tema_creador']);
       

       
//add to display
       
$display_block "
       <font size='4' face='Verdana'color='#009900'>$tema_titulo</strong></font><br>
   <font size='2' face='Verdana'><em>$tema_autor</em></p></p></font><font size='3' face='Times New Roman' align='centre'><div align='justify'><em>$tema_oracion [...]</div></em>
   <table width=100% cellpadding=0 cellspacing=0 border=0>
   <tr height='26' bgcolor='#CCCCCC'>
   </tr>"
;
   }

  
}
?>                  <?php print $display_block;?>
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 03:05.