Foros del Web » Programando para Internet » PHP »

Paginar resultados

Estas en el tema de Paginar resultados en el foro de PHP en Foros del Web. Hola, tengo un script php que me pagina los resultados de una DB, pero el problema que tengo esque no se como paginar los resultados ...
  #1 (permalink)  
Antiguo 22/05/2010, 06:52
 
Fecha de Ingreso: enero-2010
Mensajes: 373
Antigüedad: 14 años, 3 meses
Puntos: 5
Paginar resultados

Hola, tengo un script php que me pagina los resultados de una DB, pero el problema que tengo esque no se como paginar los resultados que muestra una busqueda, en mi script ago la busqueda y me lo pagina bien pero cuando le doy a siguiente, me vuelve a mostrar todos los registros de la DB, y yo quiero que muestre solo los de la busqueda.

Script:
Cita:
<?
extract($_POST);

$host="localhost";
$user="root";
$pass="root";
$db="web";
$tabla="cancion";


$con=mysql_connect($host,$user,$pass);
mysql_select_db($db,$con);


if (!isset($pg))
$pg = 0;
$cantidad = 10;
$inicial = $pg * $cantidad;

$pegar = "SELECT * FROM `cancion` where Nombrec like ('%".$buscar2."%') or Nombre like ('%".$buscar2."%') or Nombred like ('%".$buscar2."%') or Cancion like ('%".$buscar2."%') or estilo like ('%".$buscar2."%') ORDER BY Nombrec DESC LIMIT $inicial,$cantidad";
$cad = mysql_db_query($db,$pegar) or die (mysql_error());


$contar = "SELECT * FROM $tabla where Nombrec like ('%".$buscar2."%') or Nombre like ('%".$buscar2."%') or Nombred like ('%".$buscar2."%') or Cancion like ('%".$buscar2."%') or estilo like ('%".$buscar2."%')";
$contarok = mysql_db_query($db,$contar);
$total_records = mysql_num_rows($contarok);
$pages = intval($total_records / $cantidad);

while ($array = mysql_fetch_array($cad))
{
echo ("

<table width='700' border='0'>
<tr>
<td width='200'>
<script type='text/javascript' src='swfobject.js'></script>


<object type='application/x-shockwave-flash' data='player_mp3_maxi.swf' width='200' height='20'>
<param name='wmode' value='transparent' />
<param name='movie' value='player_mp3_maxi.swf' />
<param name='FlashVars' value='mp3=mp3/" . $array['Cancion'] . "&amp;bgcolor1=ffffff&amp;bgcolor2=cccccc&amp;butt oncolor=999999&amp;buttonovercolor=0&amp;slidercol or1=cccccc&amp;slidercolor2=999999&amp;slideroverc olor=666666&amp;textcolor=0&amp;showvolume=1' />
<p>Texte alternatif</p>
</object>
</td>
<td rowspan='2'><strong>" . $array['Nombre'] . "</strong>-" . $array['Nombrec'] . "</td>
</tr>

<tr><td colspan=2><img src='skin001.png' height='3'/></td></tr>
</table>

\n");
}
echo "<br>";


echo "<center><p>";
if ($pg <>0)
{
$url = $pg - 1;
echo "<font><a href='music.php?id=".$id."&pg=".$url."'>&laquo; Anterior</a>&nbsp;</font>";
}
else {
echo " ";
}
for ($i = 0; $i<($pages + 1); $i++) {
if ($i == $pg) {
echo "<font><b>&nbsp;$i&nbsp;</b></font>";
}
else {
echo "<font><a href='music.php?id=".$id."&pg=".$i."'>".$i."</a>&nbsp;</font>";
}
}
if ($pg < $pages) {
$url = $pg + 1;
echo "<font><a href='music.php?id=".$id."&pg=".$url."'>Siguiente &raquo;</a></font>";
}
else {
echo " ";
}
echo "</p></center>";


?>
  #2 (permalink)  
Antiguo 22/05/2010, 07:37
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Paginar resultados

Creo que deberias propagar $buscar2, es decir, algo asi:

echo "<font><a href='music.php?buscar2=".$buscar2."&id=".$id."&pg =".$url."'>Siguiente &raquo;</a></font>";

Prueba y me dices, que tampoco mire muy a fondo
  #3 (permalink)  
Antiguo 22/05/2010, 08:40
 
Fecha de Ingreso: enero-2010
Mensajes: 373
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Paginar resultados

Haaa, vale ya se por que es, claro al darle a siguiente solo envia la variable de la siguiente pagina, pero no del grupo de la busqueda, Bueno Vun muchisimas gracias por tu ayuda, ya consegui solucionarlo.
Saludos.
  #4 (permalink)  
Antiguo 22/05/2010, 08:53
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Paginar resultados

Genial, me alegro más cuando se entiende la idea! Esto de propagar aveces también es util hacerlo mediante campos ocultos de formulario, e incluso con variables de sesion si no quieres que tal dato aparezca en la URL.

Saludos
  #5 (permalink)  
Antiguo 22/05/2010, 09:28
 
Fecha de Ingreso: enero-2010
Mensajes: 373
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Paginar resultados

Vale gracias por la informacion.
Oye esto ya no es importante es solo algo que me gustaria hacer, es que en la paginacion si hay 50 paginas aparecen los 50 numeros, entonces queria saver de que manera se puede hacer para que sea como google, o youtube (es decir que conforme vas avanzando te van saliendo mas numeros)
  #6 (permalink)  
Antiguo 22/05/2010, 10:32
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Paginar resultados

Bueno, eso seria pura matematica y bucles. Lo primero siempre sería sacar el total de registros, por ejemplo en $paginastotal.

Por poner un ejemplo, imagina que queremos sacar links a las 5 paginas anteriores y 5 posteriores. Entonces hariamos un bucle desde $paginainicial hasta $paginafinal, creando los links pertinentes.

$paginainicial valdria $paginaactual-5, o como minimo 1.
$paginafinal valdria $paginaactual+5, o como maximo $paginastotal.

Luego haces un bucle for ($p=$paginainicial;$p++;$p<=$paginafinal) {.....} enviando en cada numero la $paginaactual que corresponda. Tambien al inicio de tu codigo, comprueba si $paginaactual es 0, entonces lo pones a 1, osea, la primera vez que entra, va a ser la pagina 1.

Espero te sirva.
  #7 (permalink)  
Antiguo 22/05/2010, 12:16
 
Fecha de Ingreso: enero-2010
Mensajes: 373
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Paginar resultados

Bueno te agradeczo mucho la respuesta, he conseguido ponerlo, pero ya no se si lo he puesto bien, porque funcionar funciona pero cuando estoy en la primera pagina me aparecen la -1 -2 -3 ... y cuando voy subiendo de paginas los numeros no terminan de mostrarse y esas paginas no contienen nada.
Cita:
mysql_free_result($resultados);

if($total_registros) {

echo "<center>";

if(($pagina - 1) > 0) {
echo "<a href='music.php?buscar2=".$buscar2."&pagina=".($pa gina-1)."'>< Anterior</a> ";
}

$paginainicial=($pagina-5);
$paginafinal=($pagina+5);

for ($i=$paginainicial;$i<=$paginafinal;$i++) {

if ($pagina == $i) {
echo "<b>".$pagina."</b> ";
} else {
echo "<a href='music.php?buscar2=".$buscar2."&pagina=$i'>$i </a> ";
}
}

if(($pagina + 1)<=$total_paginas) {
echo " <a href='music.php?buscar2=".$buscar2."&pagina=".($pa gina+1)."'>Siguiente> $paginainicial $paginafinal</a>";
}
  #8 (permalink)  
Antiguo 22/05/2010, 16:25
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Paginar resultados

Debería ser asi:

$paginainicial=max(1,$pagina-5); //Toma el valor más alto

Y con $paginafinal igual, creo que ahi en tu primer codigo lo guardas en $pages, el total de paginas, seria asi:

$paginafinal=min(1,$pages+5); //Toma el valor más bajo
  #9 (permalink)  
Antiguo 23/05/2010, 07:18
 
Fecha de Ingreso: enero-2010
Mensajes: 373
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Paginar resultados

Bueno Vun, te agradezco mucho tu ayuda, ya funciona correctamente, no me gusta estar preguntando a no ser que no pueda solucionarlo, pero el script ahora no muestra los numeros, puedo ir pasando de pagina dandole a "siguiente" y "anterior", pero los numeros no aparecen, esto no es muy importante pero si saves como solucionarlo facilmente me gustaria que me dijeses como.
Aqui dejo el script si lo quieres ver, o por si a alguien le sirve de utilidad.
Cita:
<?
if ($buscar2 !="" or $pagina !=""){
function conectar()
{
$base_de_datos = "web";
$db_usuario = "root";
$db_password = "root";

if (!($link = mysql_connect("localhost", $db_usuario, $db_password)))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db($base_de_datos, $link))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}

$db = conectar();


$registros = 8;
if (!$pagina) {
$inicio = 0;
$pagina = 1;
}
else {
$inicio = ($pagina - 1) * $registros;
}


?>


<?

$resultados = mysql_query("SELECT * FROM `cancion` where Nombrec like ('%".$buscar2."%') or Nombre like ('%".$buscar2."%') or Nombred like ('%".$buscar2."%') or Cancion like ('%".$buscar2."%') or estilo like ('%".$buscar2."%') or letra like ('%".$buscar2."%')");
$total_registros = mysql_num_rows($resultados);
$resultados = mysql_query("SELECT * FROM `cancion` where Nombrec like ('%".$buscar2."%') or Nombre like ('%".$buscar2."%') or Nombred like ('%".$buscar2."%') or Cancion like ('%".$buscar2."%') or estilo like ('%".$buscar2."%') or letra like ('%".$buscar2."%') ORDER BY Nombrec DESC LIMIT $inicio, $registros");
$total_paginas = ceil($total_registros / $registros);

if($total_registros) {
while($resultado=mysql_fetch_array($resultados)) {

echo ("

<table width='700' border='0'>
<tr>
<td width='200'>
<script type='text/javascript' src='swfobject.js'></script>


<object type='application/x-shockwave-flash' data='player_mp3_maxi.swf' width='200' height='20'>
<param name='wmode' value='transparent' />
<param name='movie' value='player_mp3_maxi.swf' />
<param name='FlashVars' value='mp3=mp3/" . $resultado['Cancion'] . "&amp;bgcolor1=ffffff&amp;bgcolor2=cccccc&amp;butt oncolor=999999&amp;buttonovercolor=0&amp;slidercol or1=cccccc&amp;slidercolor2=999999&amp;slideroverc olor=666666&amp;textcolor=0&amp;showvolume=1' />
<p>Texte alternatif</p>
</object>
</td>
<td rowspan='2'><strong>" . $resultado['Nombre'] . "</strong>-" . $resultado['Nombrec'] . "</td>
</tr>

<tr><td colspan=2><img src='skin001.png' height='3'/></td></tr>
</table>

\n");

}




} else {
echo "<font color='darkgray'>(sin resultados)</font>";
}

mysql_free_result($resultados);

if($total_registros) {

echo "<center>";

if(($pagina - 1) > 0) {
echo "<a href='paginarmusic.php?buscar2=".$buscar2."&pagina =".($pagina-1)."'>< Anterior</a> ";
}


$paginainicial=max(1,$pagina-5);
$paginafinal=min(1,$pages+5);

for ($i=$paginainicial; $i<=$paginafinal; $i++ ) {

if ($pagina == $i) {
echo "<b>".$pagina."</b> ";
} else {
echo "<a href='paginarmusic.php?buscar2=".$buscar2."&pagina =$i'>$paginafinal</a> ";
}
}

if(($pagina + 1)<=$total_paginas) {
echo " <a href='paginarmusic.php?buscar2=".$buscar2."&pagina =".($pagina+1)."'>Siguiente> </a>";
}

echo "</center>";
}
include 'else.php';
?>
Saludos.
  #10 (permalink)  
Antiguo 23/05/2010, 08:00
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Paginar resultados

Veo que cambiastes $pages por $total_paginas, asi que esta linea seria asi:

$paginafinal=min(1,$total_paginas+5);

Y no te preocupes, tu pregunta, a todos nos han ayudado alguna vez con algo complicado
  #11 (permalink)  
Antiguo 24/05/2010, 04:19
 
Fecha de Ingreso: enero-2010
Mensajes: 373
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Paginar resultados

Primeramento gracias por tu ayuda, pero no lo consigo, lo he puesto como tu me has dicho y de esta manera, sigue sin mostrar los numeros, porque supuestamente $paginafinal vale 1, he probado de 20 maneras y que funcione como yo quiero no lo consigo, si puedes echarlo otro vistazo me ayudaria mucho.
Saludos.
Cita:
<?
if ($buscar2 !="" or $pagina !=""){
function conectar()
{
$base_de_datos = "web";
$db_usuario = "root";
$db_password = "root";

if (!($link = mysql_connect("localhost", $db_usuario, $db_password)))
{
echo "Error conectando a la base de datos.";
exit();
}
if (!mysql_select_db($base_de_datos, $link))
{
echo "Error seleccionando la base de datos.";
exit();
}
return $link;
}

$db = conectar();


$registros = 8;
if (!$pagina) {
$inicio = 0;
$pagina = 1;
}
else {
$inicio = ($pagina - 1) * $registros;
}


?>


<?

$resultados = mysql_query("SELECT * FROM `cancion` where Nombrec like ('%".$buscar2."%') or Nombre like ('%".$buscar2."%') or Nombred like ('%".$buscar2."%') or Cancion like ('%".$buscar2."%') or estilo like ('%".$buscar2."%') or letra like ('%".$buscar2."%')");
$total_registros = mysql_num_rows($resultados);
$resultados = mysql_query("SELECT * FROM `cancion` where Nombrec like ('%".$buscar2."%') or Nombre like ('%".$buscar2."%') or Nombred like ('%".$buscar2."%') or Cancion like ('%".$buscar2."%') or estilo like ('%".$buscar2."%') or letra like ('%".$buscar2."%') ORDER BY Nombrec DESC LIMIT $inicio, $registros");
$total_paginas = ceil($total_registros / $registros);

if($total_registros) {
while($resultado=mysql_fetch_array($resultados)) {

echo ("

<table width='700' border='0'>
<tr>
<td width='200'>
<script type='text/javascript' src='swfobject.js'></script>


<object type='application/x-shockwave-flash' data='player_mp3_maxi.swf' width='200' height='20'>
<param name='wmode' value='transparent' />
<param name='movie' value='player_mp3_maxi.swf' />
<param name='FlashVars' value='mp3=mp3/" . $resultado['Cancion'] . "&amp;bgcolor1=ffffff&amp;bgcolor2=cccccc&amp;butt oncolor=999999&amp;buttonovercolor=0&amp;slidercol or1=cccccc&amp;slidercolor2=999999&amp;slideroverc olor=666666&amp;textcolor=0&amp;showvolume=1' />
<p>Texte alternatif</p>
</object>
</td>
<td rowspan='2'><strong>" . $resultado['Nombre'] . "</strong>-" . $resultado['Nombrec'] . "</td>
</tr>

<tr><td colspan=2><img src='skin001.png' height='3'/></td></tr>
</table>

\n");

}




} else {
echo "<font color='darkgray'>(sin resultados)</font>";
}

mysql_free_result($resultados);

if($total_registros) {

echo "<center>";

if(($pagina - 1) > 0) {
echo "<a href='paginarmusic.php?buscar2=".$buscar2."&pagina =".($pagina-1)."'>< Anterior</a> ";
}


$paginainicial=max(1,$pagina-5);
$paginafinal=min(1,$total_paginas+5);

for ($p=$paginainicial; $p<=$paginafinal; $p++ ) {

if ($pagina == $p) {
echo "<b>".$pagina."</b> ";
} else {
echo "<a href='paginarmusic.php?buscar2=".$buscar2."&pagina =$p'>$p</a> ";
}
}
print "<p>El máximo es ".max(1, $paginafinal)."</p>";

if(($pagina + 1)<=$total_paginas) {
echo " <a href='paginarmusic.php?buscar2=".$buscar2."&pagina =".($pagina+1)."'>Siguiente> </a>";
}

echo "</center>";
}
include 'else.php';

?>
  #12 (permalink)  
Antiguo 24/05/2010, 04:38
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 8 meses
Puntos: 150
Respuesta: Paginar resultados

Prueba a añadir esto para obtener $total_paginas;

Código PHP:
$rtotal mysql_query("SELECT count(Nombrec) as total FROM `cancion` where Nombrec like ('%".$buscar2."%') or Nombre like ('%".$buscar2."%') or Nombred like ('%".$buscar2."%') or Cancion like ('%".$buscar2."%') or estilo like ('%".$buscar2."%') or letra like ('%".$buscar2."%') ORDER BY Nombrec DESC LIMIT $inicio, $registros");
$row=mysql_fetch_array($rtotal);
$total_paginas=$row["total"]; 
  #13 (permalink)  
Antiguo 24/05/2010, 06:38
 
Fecha de Ingreso: enero-2010
Mensajes: 373
Antigüedad: 14 años, 3 meses
Puntos: 5
Respuesta: Paginar resultados

Bueno, no entiendo muy bien para que sirve lo que me as enviado,porque eso es para saver el total de registros, pero no es para obtener el total de las paginas y el valor de total_paginas si esta bien en el script,

Cuando pongo la variable asi $paginafinal=min(1,$total_paginas); me saca el minimo por eso no muestra mas numeros a parte del 1, y si dejo la variable asi $paginafinal=($total_paginas); me va restando numeros pero no los suma, porque no hay nada que lo indique, y si se lo indico con $paginafinal=($pagina+5); asi si funciona bien va sumando y restando numeros pero no logro hacer que termine cuando haya leido todos los registros, porque como esta lo que hace es ir sumando 5 cada vez que subes y nunca para.

Etiquetas: paginar, resultados
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:04.