Foros del Web » Programando para Internet » PHP »

Ayuda paginacion php

Estas en el tema de Ayuda paginacion php en el foro de PHP en Foros del Web. Hola haber si me podeis echar una mano, estoy intentando paginar con un codigo que encontre por ahi, he cambiado la tabla que estaba fija ...
  #1 (permalink)  
Antiguo 15/03/2011, 10:48
 
Fecha de Ingreso: marzo-2011
Mensajes: 21
Antigüedad: 13 años, 1 mes
Puntos: 0
Ayuda paginacion php

Hola haber si me podeis echar una mano, estoy intentando paginar con un codigo que encontre por ahi, he cambiado la tabla que estaba fija por una variable, consigo que me seleccione la tabla que le clicko pero al pasar a la segunda pagina o tercera...... siempre son las mismas, no encuentro lo que tengo que cambiar.
este es el codigo,gracias
Cita:
<?php
require('conexion.php');
$RegistrosAMostrar=20;


//estos valores los recibo por GET
if(isset($_GET['pag'])){
$RegistrosAEmpezar=($_GET['pag']-1)*$RegistrosAMostrar;
$PagAct=$_GET['pag'];

//caso contrario los iniciamos
}else{
$RegistrosAEmpezar=0;
$PagAct=1;
}
$ciud=$_GET[ciudades];
if($ciud <= " ") {

mysql_select_db("bd_ciudades",$conexion);

$sql_select = "SELECT * FROM ciudades ORDER BY ID DESC LIMIT 1 ";

$sql_select = mysql_query($sql_select);
$registro =mysql_fetch_array($sql_select);
$ciud = $registro[nombre];
$ciudades = str_replace(" ","_",$ciud);
mysql_select_db("bd_ciudades",$conexion);

$verificar = mysql_query("SELECT * FROM $ciudades ");

$numeros = mysql_num_rows($verificar);

$wcontenido = $RegistrosAMostrar * 435 + 435;
echo "<div class='contenidop' style='margin-top: 6px; margin:0 0 0 450px ; position: absolute; height: 600px; width:". $wcontenido ."px; float: left;'>";
echo $PagAct;

}
else{
$ciudades = str_replace(" ","_",$ciud );
mysql_select_db("bd_ciudades",$conexion);

$verificar = mysql_query("SELECT * FROM $ciudades,");

$numeros = mysql_num_rows($verificar);


$wcontenido = $RegistrosAMostrar * 435 + 435;
echo "<div class='contenidop' style='margin-top: 6px; margin:0 0 0 450px ; position: absolute; height: 600px; width:". $wcontenido ."px; float: left;'>";
echo $PagAct;
}



$Resultado=mysql_query("SELECT * FROM $ciudades LIMIT $RegistrosAEmpezar, $RegistrosAMostrar",$con);
$sql_select = "SELECT * FROM ciudades WHERE nombre='". $ciu ."'";

while($registro=mysql_fetch_array($Resultado)){
$url = $registro[url];
$autor = $registro[autor];
$link = $registro[link];
$ciudautor = $registro[ciudad];

echo "<div class='imagenes1'><img style= 'width:396px; height:559px; float:left;' src='".$registro['url']."'><div class='titulo'><div><a target='_blank' href='" .$link . "' >". $autor . " / ". $ciudautor. "</a></div></div></div>";


echo "<div style='background:red; margin-top:20px; float:left;'>";

echo "<img src='img/separador.gif'></img>";
echo "</div>";


}
echo $Resultado;
//******--------determinar las páginas---------******//
$NroRegistros=mysql_num_rows(mysql_query("SELECT * FROM $ciudades",$con));




$PagAnt=$PagAct-1;
$PagSig=$PagAct+1;
$PagUlt=$NroRegistros/$RegistrosAMostrar;

//verificamos residuo para ver si llevará decimales
$Res=$NroRegistros%$RegistrosAMostrar;
// si hay residuo usamos funcion floor para que me
// devuelva la parte entera, SIN REDONDEAR, y le sumamos
// una unidad para obtener la ultima pagina
if($Res>0) $PagUlt=floor($PagUlt)+1;

//desplazamiento
echo "<a onclick=\"Pagina('1')\">Primero</a> ";
if($PagAct>1) echo "<a onclick=\"Pagina('$PagAnt')\">Anterior</a> ";
echo "<strong>Pagina ".$PagAct."/".$PagUlt."</strong>";
if($PagAct<$PagUlt) echo " <a onclick=\"Pagina('$PagSig')\">Siguiente</a> ";
echo "<a onclick=\"Pagina('$PagUlt')\">Ultimo</a>";

?>
  #2 (permalink)  
Antiguo 15/03/2011, 11:30
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Respuesta: Ayuda paginacion php

Buenas!

Pues he probado tu código, y a parte de algunos errores en principio sin importancia, a mí sí me ha funcionado. La sentencia es correcta, LIMIT (A_PARTIR_DE_CUAL), (CUANTOS), y haciendo un echo de tu consulta, y pasándole ?pag=2 por ejemplo, me sale LIMIT 20, 20 (correcto), le pongo 3 y me sale LIMIT 40, 20 (correcto)...

Te recomiendo que efectúes algunos cambios y que verifiques unos temitas, y a ver si te puede servir de algo:

-Los nombres entre corchetes [], ponlos entre comillas simples 'texto', sino se cree que son constantes definidas y no es así
Código PHP:
$url $registro['tipo']; // Y no $url = $registro[tipo]; 

-En casi todas las SELECT haces:
Código PHP:
$verificar mysql_query("SELECT * FROM $ciudades,"); 
Hay una coma al final :S Además, siguiendo con el código, la variable $ciudades está guardando el nombre de una ciudad (sin espacios). Presupongo que tienes tantas tablas como ciudades, ya que la interpretación del código tal y como lo tienes, podría ser:
Código PHP:
SELECT FROM Barcelona,
SELECT FROM San_Sebastian
En mi caso lo cambié por mysql_query("SELECT * FROM ciudades WHERE nombre='". $ciudades ."'"). (Imagino que en tu caso no es así porque sino no dirías que siempre te salen los mismos registros, no te debería salir ninguno si atacas a una tabla que no existe.)

-La línea comentada está mal no? A no ser que tengas la variable $ciu definida más atrás, en todo caso sería $ciud:
Código PHP:
(...)
$Resultado=mysql_query("SELECT * FROM $ciudades LIMIT $RegistrosAEmpezar, $RegistrosAMostrar",$con);
//$sql_select = "SELECT * FROM ciudades WHERE nombre='". $ciu ."'";
$sql_select "SELECT * FROM ciudades WHERE nombre='"$ciud ."'"// Así sí

while($registro=mysql_fetch_array($Resultado)){
$url $registro[url];
$autor $registro[autor];
(...) 

-Inicializa variables a "" o a 0 o a NULL. Añade controles para variables vacías (isset()):
Código PHP:
$ciud="";
if(isset(
$_GET['ciudades'])){
   
$ciud=$_GET['ciudades'];
}
if(
$ciud <= " ") {
   (...) 

Finalmente te recomiendo que debajo de todas las SELECTs hagas un echo para saber qué sentencia te está ejecutando, y compruebes en la BBDD que metiéndole esa consulta te la genera bien. También incluye echos dentro de las condiciones para saber por qué condicionales pasa y por cuáles no, y en que casos.

Y para acabar te sugiero que uses htmlspecialchars() y addslashes() / stripslashes() para controlar un poco la seguridad. Busca anti-injections y protégete un poco porque si subes eso a una web te pueden petar la BBDD mediante el GET.

Espero que sea de ayuda y sorry por el tochopost!
Saludos
  #3 (permalink)  
Antiguo 16/03/2011, 04:06
 
Fecha de Ingreso: marzo-2011
Mensajes: 21
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Ayuda paginacion php

gracias Kamae por la respuesta y la ayuda pa mejorar los codigos, todavia no lo he conseguido, no me explique bien del todo,la cosa es que la ultima ciudad que meto si me pagina bien.
creo que es la que me selecciona este codigo
Cita:
$sql_select = "SELECT * FROM ciudades ORDER BY ID DESC LIMIT 1 ";
el problema esta que tengo un menu y selecciono otra ciudad y la url se me queda
indexphp?ciudades=nombredelaciudadseleccionada
me dice bien las paginas que tiene dependiendo de los registros pero al darle a pagina 2, 3,4...
son siempre las paginas de la ultima ciudad, las del index.
tambien lleva un archivo.js que tiene este codigo[QUOTE
]//junto con un valor que representa el nro de pagina
ajax.open("GET", "paginador2.php?pag="+nropagina);[/QUOTE]
¿que tendria que añadir o cambiar para que me pagine tambien el indexphp?ciudades=nombredelaciudadseleccionada?
  #4 (permalink)  
Antiguo 16/03/2011, 14:22
Avatar de Kamae  
Fecha de Ingreso: abril-2008
Ubicación: Barcelona (Catalunya)
Mensajes: 307
Antigüedad: 16 años
Puntos: 13
Respuesta: Ayuda paginacion php

Mmmmm no lo tienes online para verlo no?

De todas formas, a ver si he entendido el error: tienes un menú y puedes seleccionar ciudades. Pongamos que la primera que te aparece es Barcelona, que tiene X registros que ocupan 12 páginas. Luego cambias a Donosti, que tiene 8 páginas, pero te dice que tiene 12 (las de Barcelona). ¿Es eso lo que te pasa?

Sobre lo de la función javascript (más bien ajax por lo que veo), dónde la llamas? Es la función Pagina()? Imagino que pasándole el parámetro de ciudad y luego añadiéndolo no deberías tener problemas, te pongo un ejemplo "ficticio" hecho rollo javascript y con tu mismo código:

Código PHP:
function Pagina(nropaginaciudad){
   
ajax.open("GET""paginador2.php?pag="+nropagina+"&ciudades="+ciudad);
   
// Devolvería, por ejemplo: paginador2.php?pag=2&ciudades=Antequera

Por otro lado, la llamada a esta función sería:

Código PHP:
//desplazamiento
echo "<a onclick=\"Pagina('1','$ciud')\">Primero</a> ";
if(
$PagAct>1) echo "<a onclick=\"Pagina('$PagAnt','$ciud')\">Anterior</a> ";
echo 
"<strong>Pagina ".$PagAct."/".$PagUlt."</strong>";
if(
$PagAct<$PagUlt) echo " <a onclick=\"Pagina('$PagSig','$ciud')\">Siguiente</a> ";
echo 
"<a onclick=\"Pagina('$PagUlt','$ciud')\">Ultimo</a>"
Aunque lo que no entiendo es porque la primera es index.php y cuando le das a otra página cambia el enlace a paginador2.php. Lo normal sería que llevara al index.php de nuevo, pero con el parámetro pag por GET igual que el parámetro ciudades. Es decir:

Código PHP:
[B]ajax.open("GET""index.php?pag="+nropagina+"&ciudades="+ciudad);[/B]
// Devolvería, por ejemplo: index.php?pag=2&ciudades=Antequera 
Una forma muy fácil de probarlo es poniéndolo tú manualmente en la dirección y a ver qué pasa. Si va bien, a programarlo; si no va bien, almenos te lo habrás ahorrado.

Ya dirás algo!
Saludos!

Última edición por Kamae; 16/03/2011 a las 14:30
  #5 (permalink)  
Antiguo 17/03/2011, 02:31
 
Fecha de Ingreso: marzo-2011
Mensajes: 21
Antigüedad: 13 años, 1 mes
Puntos: 0
Respuesta: Ayuda paginacion php

vale, con esto ya si que funciona, lo cuento un poco, el lio del index y el paginador, viene de que tengo un index con un div"paginar" dentro de ese div hay un include a paginador2.php que es el codigo del primer mensaje y por otro lado tambien hay un archivo ajax.js que es el que tiene la funcion. La cantidad de registros y las paginas si me las decia bien, lo que la pagina 2,3,4 eran siempre las index.php?pag=Nº, claro me faltaba añadir en desplazamiento la variable $ciud y cambiar la funcion.
Código PHP:
Ver original
  1. //esto es lo que tenia
  2. echo "<a onclick=\"Pagina('1')\">Primero</a> ";
  3. //asi es como tenia que ir,me faltaba añadir la variable $ciud en todos onclick de //desplazamiento
  4. echo "<a onclick=\"Pagina('1','$ciud')\">Primero</a> ";
ademas la funcion que estaba en el archivo ajax.js la tenia asi:
Código Javascript:
Ver original
  1. function Pagina(nropagina){
  2.    ajax.open("GET", "paginador2.php?pag="+nropagina);
  3.  
  4. }
  5.  
  6. //asi que esa funcion la cambie por esta que envio kamae en la que se añade ciudad
  7.  
  8. function Pagina(nropagina, ciudad){
  9.    ajax.open("GET", "paginador2.php?pag="+nropagina+"&ciudades="+ciudad);
  10.  
  11. }
con estos cambios ya funciona como queria
  #6 (permalink)  
Antiguo 24/03/2011, 14:26
Avatar de Markgus  
Fecha de Ingreso: junio-2010
Mensajes: 152
Antigüedad: 13 años, 10 meses
Puntos: 5
Respuesta: Ayuda paginacion php

disculpen tengo un problema similar ojala me puedan aportar una idea
tengo un combo select de los meses del año y al seleccionar por ejemplo marzo me manda el valor 3 y se hace la consulta

SELECT * FROM empleado
where MONTH(fecha) =$mes


y pues si me muestra la primera pagina pero ya las siguientes no, me parecio interesante la manera que resolvieron tu problema paik y kamae pero no logro implementarlo en mi proyecto no se si sea xq el valor dl mes me lo traigo de un select y lo paso por el metodo post emm por el get no me devuelve nada
y pues el paginador es igual al tuyo solo cambia la consulta
ojala me pudieran ayudar estaría muy agradecido

Etiquetas: paginacion
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 15:36.