Foros del Web » Programando para Internet » PHP »

Paginacion urgente!

Estas en el tema de Paginacion urgente! en el foro de PHP en Foros del Web. PD: lo estoy necesitando con urgencia Aca les mando lo que tengo echo para que me asesoren: estoy tratando de armar un sistema de altas, ...
  #1 (permalink)  
Antiguo 09/02/2004, 19:10
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta Paginacion urgente!

PD: lo estoy necesitando con urgencia

Aca les mando lo que tengo echo para que me asesoren:
estoy tratando de armar un sistema de altas, bajas y modificaciones de mascotas perdidas para que luego el usuario final pueda encontrar su mascota mediante un formulario de busqueda con varios criterios, por ejemplo, en el formulario se puede buscar coincidencias eligiendo los valores de varios cuadros de listas (los valores de estos cuadros de listas estan ingresados no estan tomados de tablas anexas, ya que arme todo con una sola tabla) y la idea es que me muestre los resultados paginados, les mando el codigo, para que me asesoren en donde estoy cometiendo un error y me ayuden a solucionarlo ya que no se como seguir.
Si hubo algo que no les quedo claro mandenme un mail y les respondo.
Espero con ansia sus respuestas.

Al fina esta el form de busqueda:

==================================
Resultados paginados:
==================================
<body>
<?
// Datos de conexión a la base
$base="Mascotas";
$con=mysql_connect("localhost","usuario","pass");
mysql_select_db($base,$con);
//if (!isset($pg))
//$pg = 0; // $pg es la pagina actual
//$cantidad= 4; // cantidad de resultados por página
//$inicial = $pg * $cantidad;
if (!isset($pg))
$pg = 0;
$cantidad=4;
$inicial = $pg * $cantidad;
$pegar = "SELECT * FROM tb_mascotas WHERE tb_mascotas.Tipo like '$tipo' && tb_mascotas.Tamaño like '$taman' && tb_mascotas.Sexo like '$sexo' && tb_mascotas.Color like '$color' && tb_mascotas.Estado like '$estado' order by Codigo DESC LIMIT $inicial,$cantidad";
$cad = mysql_db_query($base,$pegar) or die (mysql_error());

$contar = "SELECT * FROM tb_mascotas WHERE tb_mascotas.Tipo like '$tipo' && tb_mascotas.Tamaño like '$taman' && tb_mascotas.Sexo like '$sexo' && tb_mascotas.Color like '$color' && tb_mascotas.Estado like '$estado' order by Codigo DESC ";
$contarok= mysql_db_query($base,$contar);
$total_records = mysql_num_rows($contarok);
$pages = intval($total_records / $cantidad);
// Creando los enlaces de paginación
if ($pg <> 0)
{
$url = $pg - 1;
echo "<a href='buscador.php?pg=".$url."'><font face='verdana' size='-2'>« Anterior</font></a> ";
}
else {
echo " ";
}
for ($i = 0; $i<($pages + 1); $i++) {
if ($i == $pg) {
echo "<font face='verdana' size=3 color='#FFCC00'><b> $i </b></font><font face='verdana' color='#CC9900' size='-2'>l </font>";
}
else {
echo "<a href='buscador.php?pg=".$i."'><font face='verdana' size='-2'>".$i."</font></a> <font face='verdana' color='#CC9900' size='-2'>l</font> ";
}
}
if ($pg < $pages) {
$url = $pg + 1;
echo "<a href='buscador.php?pg=".$url."'><font face='verdana' size='-2'>Siguiente »</font></a>";
}
else {
echo "";
}
echo "<hr>";
//Imprimiendo los resultados
while ($row = mysql_fetch_array($cad)) {
printf ("<table cellpadding='3' cellspacing='2'>
<tr>
<td nowrap bgcolor='#8DA795'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>FECHA: %s</font></td>
<td align='right' nowrap bgcolor='#8DA795'><strong><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>CODIGO: %s</font></strong></td>
</tr>
<tr>
<td width='150' valign='top' nowrap bgcolor='#8DA795'>
<p><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>TIPO:
%s</font></p>
<p><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>TAMAÑO:
%s</font></p>
<p><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>COLOR:
%s</font></p>
<p><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>CARACTERISTICAS:<br>
%s</font></p>
</td>
<td><img src='caniles6.jpg' width='367' height='274'></td>
</tr>
<tr>
<td nowrap bgcolor='#8DA795'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'>ESTADO: %s</font></td>
<td align='right' nowrap bgcolor='#8DA795'><font size='1' face='Verdana, Arial, Helvetica, sans-serif'><a href='mailto:[email protected]?subject= Cod. {$row['Codigo']} - LaMascota.com'>Contáctese aquí</a></font></td>
</tr>
</table><hr>"
,$row["Fecha"], $row["Codigo"], $row["Tipo"], $row["Tamaño"], $row["Color"], $row["Caracteristicas"], $row["Estado"]);
}
// Cerramos la conexión a la base
$con=mysql_close($con);
// Creando los enlaces de paginación
if ($pg <> 0)
{
$url = $pg - 1;
echo "<a href='buscador.php?pg=".$url."'><font face='verdana' size='-2'>« Anterior</font></a> ";
}
else {
echo " ";
}
for ($i = 0; $i<($pages + 1); $i++) {
if ($i == $pg) {
echo "<font face='verdana' size=3 color='#FFCC00'><b> $i </b></font><font face='verdana' color='#CC9900' size='-2'>l </font>";
}
else {
echo "<a href='buscador.php?pg=".$i."'><font face='verdana' size='-2'>".$i."</font></a> <font face='verdana' color='#CC9900' size='-2'>l</font> ";
}
}
if ($pg < $pages) {
$url = $pg + 1;
echo "<a href='buscador.php?pg=".$url."'><font face='verdana' size='-2'>Siguiente »</font></a>";
}
else {
echo "";
}
echo "</p>";
?>
</body>

===================================
Formulario:
===================================
<form name=buscador method=post action="buscador.php">
<table width="40%" border="0" align="center" cellpadding="5">
<tr bgcolor="#507C6D">
<td width="32%">
<div align="right"><font color="#006600"><strong><font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Tipo:</font></strong></font></div></td>
<td width="68%">
<select name="tipo" id="tipo">
<option value="Perro">Perro</option>
<option value="Gato">Gato</option>
</select>
<input name="estado" type="hidden" id="estado" value="Perdido">
</td>
</tr>
<tr bgcolor="#507C6D">
<td>
<div align="right"><font color="#006600"><strong><font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Tama&ntilde;o:</font></strong></font></div></td>
<td>
<select name="taman" id="select2">
<option value="Chico">Chico</option>
<option value="Mediano">Mediano</option>
<option value="Grande">Grande</option>
</select> </td>
</tr>
<tr bgcolor="#507C6D">
<td>
<div align="right"><font color="#006600"><strong><font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Sexo:</font></strong></font></div></td>
<td>
<select name="sexo" id="select3">
<option value="Hembra">Hembra</option>
<option value="Macho">Macho</option>
</select> </td>
</tr>
<tr bgcolor="#507C6D">
<td>
<div align="right"><font color="#006600"><strong><font color="#CCCCCC" size="2" face="Verdana, Arial, Helvetica, sans-serif">Color:</font></strong></font></div></td>
<td>
<select name="color" id="select4">
<option value="Blanco">Blanco</option>
<option value="Marron">Marron</option>
<option value="Negro">Negro</option>
<option value="Gris">Gris</option>
<option value="Atigrado">Atigrado</option>
<option value="Blanco c/ manchas">Blanco c/ manchas</option>
<option value="Marron c/ manchas">Marron c/ manchas</option>
<option value="Negro c/ manchas">Negro c/ manchas</option>
<option value="Tricolor">Tricolor</option>
<option value="Otro">Otro</option>
</select> </td>
</tr>
<tr bgcolor="#507C6D">
<td colspan="2">
<div align="right">
<input type=submit name=buscar value=buscar>
</div></td>
</tr>
</table>
</form>
  #2 (permalink)  
Antiguo 09/02/2004, 22:50
Avatar de ||Dj||  
Fecha de Ingreso: enero-2002
Mensajes: 2.349
Antigüedad: 15 años, 10 meses
Puntos: 1
Pero cual es el error concretamente?
Tendrias que identificar mas o menos donde esta el inconveniente para que el que intente ayudarte sepa donde mirar.
Si hay alguien que se pone a buscar entre 200 lineas de codigo mezclado con html, en verdad le debe sobrar el tiempo.
Un saludo.
  #3 (permalink)  
Antiguo 10/02/2004, 02:50
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Dos cosas:

Primero, esto:
Código PHP:
$pages intval($total_records $cantidad); 
seria mejor como:
Código PHP:
$pages ceil($total_records $cantidad); 
Tendrias luego que repasar los limites de los for que muestran los enlaces.

Y segundo, el script recibe del formulario unos valores. Pero en tus links de paginacion no propagas esos valores. Te en cuenta que esos links son como si llamaran a otro script, no tendran conocimiento de los parametros recibidos del formulario. Por eso en esos links desde propagar los valores recibidos del formulario. Añade los parametros a los links.

Si buscas un poco, en la firma del usuario jpinedo hay un link a un script suyo de paginacion. Y tambien puedes buscar la clase de paginado de webstudio. Y tambien busca por "paginacion" en el buscador del foro.

Suerte.

PD: No me he leido todo el codigo. Pero el tema de la paginacion se ha tratado tantas veces en este foro, que ya se donde mirar
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 10/02/2004, 06:29
Avatar de xavivars  
Fecha de Ingreso: enero-2002
Ubicación: Benissa - la Marina Alta
Mensajes: 212
Antigüedad: 15 años, 11 meses
Puntos: 1
Si, el Paginator de jpinedo es excelente, te lo recomiendo.

PAGINATOR
  #5 (permalink)  
Antiguo 10/02/2004, 07:19
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta Paginacion urgente!

||Dj||: Pido disculpas por tanto codigo, les mando fragmentos en donde considero que esta mi problema.
Creo que el problema esta en el armado del where:
cuando pongo esto:
------------------------------------------------------------
$pegar = "SELECT * FROM tb_mascotas order by Codigo DESC LIMIT $inicial,$cantidad";
$cad = mysql_db_query($base,$pegar) or die (mysql_error());

$contar = "SELECT * FROM tb_mascotas order by Codigo DESC ";
$contarok= mysql_db_query($base,$contar);
$total_records = mysql_num_rows($contarok);
$pages = intval($total_records / $cantidad);
---------------------------------------------------------------

Funciona, pero cuando pongo esto, no, lo que hace es mostrarme la primer pagina cuando linkeo a la segunda o tercera o vuelvo a la primera no muestra nungun resultado:
------------------------------------------------------------------
$pegar = "SELECT * FROM tb_mascotas WHERE tb_mascotas.Tipo like '$tipo' and tb_mascotas.Tamaño like '$taman' and tb_mascotas.Sexo like '$sexo' and tb_mascotas.Color like '$color' and tb_mascotas.Estado like '$estado' order by Codigo DESC LIMIT $inicial,$cantidad";
$cad = mysql_db_query($base,$pegar) or die (mysql_error());

$contar = "SELECT * FROM tb_mascotas WHERE tb_mascotas.Tipo like '$tipo' and tb_mascotas.Tamaño like '$taman' and tb_mascotas.Sexo like '$sexo' and tb_mascotas.Color like '$color' and tb_mascotas.Estado like '$estado' order by Codigo DESC ";
$contarok= mysql_db_query($base,$contar);
$total_records = mysql_num_rows($contarok);
$pages = intval($total_records / $cantidad);
---------------------------------------------------------------------

estoy construyendo mal la sentencia where??
como tendria que hacerlo??
Porque la verdad estoy un poco perdida dado mi escasos conocimientos. Desde ya gracias por su ayuda.


josemi: voy a probar lo que me sugeris en el primer punto y despues te cuento. Pero creo que el problema esta en la sentencia where.
  #6 (permalink)  
Antiguo 10/02/2004, 08:37
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Relee mi punto 2.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 10/02/2004, 11:28
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 14 años, 3 meses
Puntos: 0
Josemi:
disculpa mi insistencia y mi ignorancia, por lo que me decis deberia cambiar los parametros a los links??
Como añado los parametros a los links??
dame un ejemplo.
Quiere decir que la sentencia where esta bien construida???
Espero tu respuesta y gracias
  #8 (permalink)  
Antiguo 10/02/2004, 12:53
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Mira, cuando pinchas en un link de la paginacion, es lo mismo que si escribieras esa URL directamente en la barra de direcciones. Es decir, NO RECIBE los parametros del formulario. Por eso debes pasar (propagar) esos valores en los links, junto con el numero de pagina.

En tu caso, un link debe ser algo como:
Código PHP:
echo "<a href='buscador.php?pg=".$i."&tipo=".$tipo."&sexo=".$sexo."'><font face='verdana' size='-2'>".$i."</font></a> <font face='verdana' color='#CC9900' size='-2'>l</font> "
Y asi con todos los demas campos de tu formulario y en todos los links (incluido anterior y siguiente).

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 10/02/2004, 14:21
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 14 años, 3 meses
Puntos: 0
Josemi:
hice lo que me dijiste y no funciona en los links de siguiente y anterior, y encima agrega un links de mas (es decir muestra 4 resultados por pagina con un total de 8, tendria que mostrarme 2 paginas de resultados, pero me muestra 2.

Si funciona en los numeros de paginas

te paso el codigo para que te fijes en donde me equivoque:

tendra que ver con la sentencia for, si es asi decime como lo arrglo

Espero que me haya explicado bien
_____________________________________________
// Creando los enlaces de paginación
if ($pg <> 0)
{
$url = $pg - 1;
echo "<a href='buscador.php?pg=".$url."tipo=".$tipo."&estad o=".$estado."&taman=".$taman."&sexo=".$sexo."&colo r=".$color."'><font face='verdana' size='-2'><font face='verdana' size='-2'>« Anterior</font></a> ";
}
else {
echo " ";
}

for ($i = 0; $i<($pages + 1); $i++) {
if ($i == $pg) {
echo "<font face='verdana' size=3 color='#FFCC00'><b> $i </b></font><font face='verdana' color='#CC9900' size='-2'>l </font>";
}
else {
echo "<a href='buscador.php?pg=".$i."&tipo=".$tipo."&estado =".$estado."&taman=".$taman."&sexo=".$sexo."&color =".$color." '><font face='verdana' size='-2'>".$i."</font></a> <font face='verdana' color='#CC9900' size='-2'>l</font> ";
}
}

if ($pg < $pages) {
$url = $pg + 1;
echo "<a href='buscador.php?pg=".$url."tipo=".$tipo."&estad o=".$estado."&taman=".$taman."&sexo=".$sexo."&colo r=".$color."'><font face='verdana' size='-2'>Siguiente »</font></a>";
}
else {
echo "";
}
_______________________________________________
  #10 (permalink)  
Antiguo 10/02/2004, 14:34
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Fijate que tienes esto

?pg=".$url."tipo=".

para anterior y siguiente, pero para los links tienes

?pg=".$i."&tipo=".

con el & para tipo. Añadeselo a anterior y siguiente.

Y sobre las paginas de mas, el limite del for debe ser <$pages y el if de siguiente, <($pages-1). Suponiendo que lo hagas con ceil():

$pages=ceil(8/4)=2;
for mientras <2 (0,1)
siguiente <(2-1)


$pages=ceil(9/4)=3;
for mientras <3 (0,1,2)
siguiente <(3-1)

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 10/02/2004, 15:30
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 14 años, 3 meses
Puntos: 0
Josemi:
no entendi lo del for

Yo lo tengo asi:

for ($i = 0; $i<($pages + 1); $i++) {
if ($i == $pg) {
echo "<font face='verdana' size=3 color='#FFCC00'><b> $i </b></font><font face='verdana' color='#CC9900' size='-2'>l </font>";
}
else {
echo "<a href='buscador.php?pg=".$i."&tipo=".$tipo."&estado =".$estado."&taman=".$taman."&sexo=".$sexo."&color =".$color." '><font face='verdana' size='-2'>".$i."</font></a> <font face='verdana' color='#CC9900' size='-2'>l</font> ";
}
}

como lo modifico.

Lo demas funciono a la perfeccion.
  #12 (permalink)  
Antiguo 10/02/2004, 15:35
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Código PHP:
for ($i 0$i<$pages$i++) { 
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #13 (permalink)  
Antiguo 10/02/2004, 15:50
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 14 años, 3 meses
Puntos: 0
Josemi:

disculpa el ultimo mensaje, despues de que te lo mande, lo entendi, lo que pasa es que estoy haciendo varias cosas a la ves.

Te agradesco por tu ayuda todo funciona a la perfeccion.
SOS UN CAPO TOTAL

chau y hasta la proxima consulta (sin ser pesada)
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 11:20.