Foros del Web » Programando para Internet » PHP »

AYUDA: Paginación

Estas en el tema de AYUDA: Paginación en el foro de PHP en Foros del Web. Hola amigos, He utilizado el codigo que viene en desarrolloweb.com para dar paginación a una SQL que toma parametros para el web de un formulario. ...
  #1 (permalink)  
Antiguo 07/05/2003, 07:43
 
Fecha de Ingreso: mayo-2003
Mensajes: 125
Antigüedad: 14 años, 7 meses
Puntos: 0
AYUDA: Paginación

Hola amigos,

He utilizado el codigo que viene en desarrolloweb.com para dar paginación a una SQL que toma parametros para el web de un formulario. Esto es, relleno un formulario en una página con apellidos y nombre y me manda a una pagina que tiene el codigo de paginación y hasta ahi perfecto. Me encuentra el numero de registros, me calcula el numero de paginas, ... PROBLEMA: cuando paso a otra pagina parece como si reseteara las variables a las que hace referencia el SQL y toma la SQL sin clausula where. He probado con variables globales y nada.

Os paso el codigo por si me podeis ayudar, muchas gracias :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>Resultado de la búsqueda</title>
<link REL="StyleSheet" href="../css/estilo.css" type="text/css">
</head>

<body>
<div align="center">

<?

// Nos conectamos con el servidor MySQL
$conexion = mysql_connect("localhost", "root", "")
or die("¡No se ha podido establecer la conexión con el servidor local!");

// Seleccionamos la Base de Datos
$resp = mysql_select_db("test")
or die("¡No se ha podido seleccionar la base de datos yyy!");

// Limito la busqueda
$tamano_pagina = 10;

// Examino la página a mostrar y el inicio del registro a mostrar

$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $tamano_pagina;
}


$criterio = "";
if ($_POST["apellidos"]!=""){
$txt_criterio = $_POST["apellidos"];
$criterio = "where APELLIDO like '%".$txt_criterio."%' order by idContacto";
}

$sqlquery = "SELECT * FROM pilp2003 " . $criterio;

echo $sqlquery;
/* Notificamos fallo si se produce */
$queryresult = mysql_query($sqlquery) or die("¡No se puede ejecutar la sentencia select!");


$num_total_registros = mysql_num_rows($queryresult);
// Calculo el total de páginas
$total_paginas = ceil($num_total_registros / $tamano_pagina);

// Número de registros total, tamaño de página y la página que se muestra
echo "Número de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran páginas de " . $tamano_pagina . " registros cada una<br>";
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";

// Miro a ver el número total de campos que hay en la tabla con esa búsqueda
$sqlquery = "SELECT * FROM pilp2003 " . $criterio . " limit " . $inicio . "," . $tamano_pagina;


echo $sqlquery . "<p>";
/* Notificamos fallo si se produce */


$queryresult = mysql_query($sqlquery) or die("¡No se puede ejecutar la sentencia select!");


$num_total_registros = mysql_num_rows($queryresult);
echo "<table border = '1'> \n";
echo "<tr> \n";

// Para los del ejemplo
echo "<td>IdContacto</td> \n";
echo "<td>Nombre</td> \n";
echo "<td>Apellido</td> \n";
echo "<td>DNI</td> \n";
echo "<td>Teléfono</td> \n";
echo "<td>Teléfono1</td> \n";
echo "<td>Móvil</td> \n";
echo "</tr> \n";

while ($fila = mysql_fetch_object($queryresult))
{
echo "<td>".$fila->IdContacto."</td> \n";
echo "<td>".$fila->NOMBRE."</td> \n";
echo "<td>".$fila->APELLIDO."</td> \n";
echo "<td>".$fila->DNI."</td> \n";
echo "<td>".$fila->TELEFONO."</td> \n";
echo "<td>".$fila->TELEFONO1."</td> \n";
echo "<td>".$fila->TELMOVIL."</td> \n";
echo "</tr> \n";
}
echo "</TABLE>";


// Liberamos
mysql_free_result($queryresult);

// Cerramos la conexión con la BD
mysql_close($conexion);


echo "<p>";


//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){

for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='busqueda.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
//echo "<a href='busqueda.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
}
}




?>

</div>
</body>
</html>
  #2 (permalink)  
Antiguo 07/05/2003, 10:58
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 15 años, 10 meses
Puntos: 5
Tu problema está aqui:

$criterio = "";
if ($_POST["apellidos"]!=""){
$txt_criterio = $_POST["apellidos"];
$criterio = "where APELLIDO like '%".$txt_criterio."%' order by idContacto";
}

Ya que tu link de conexión es a través del metodo GET y no POST, por lo que el "criterio" se elimina al pasar a la siguiente pagina...

Una posible solución sería sustituir lo anterior por esto:

Código PHP:
$criterio "";
if (
$_POST["apellidos"]!=""){
$txt_criterio $_POST["apellidos"];
} elseif (
$_GET["criterio"]!="") {
$txt_criterio $_GET["criterio"];
}

$criterio "where APELLIDO like '%".$txt_criterio."%' order by idContacto"
Saludos!
__________________
Manoloweb
  #3 (permalink)  
Antiguo 09/05/2003, 06:23
 
Fecha de Ingreso: mayo-2003
Mensajes: 125
Antigüedad: 14 años, 7 meses
Puntos: 0
Varios criterios en la paginación

Muchas gracias por tu respuesta, me ha ayudado bastante. Ahora tengo otro problema, en el formulario tengo varios campos con lo que me gustaria formar la clausula where par aque me encontrara todos los registros cuyos apellidos se parezcan a la cadena que me pasan o al dni que me pasan. Esto es formar algo como: select * from tabla where campo1 like cadena or campo2 like cadena2. De sta forma me devolveria todos los registros que cumplieran alguna de las condiciones.

El caso es que he probado varias combinaciones y no he conseguido resultados.

Adjunto el codigo por si se os ocurre algo, MUCHAS GRACIAS DE ANTEMANO


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
<title>Resultado de la búsqueda</title>
<link REL="StyleSheet" href="../css/estilo.css" type="text/css">
</head>

<body>
<div align="center">

<?

// Nos conectamos con el servidor MySQL
$conexion = mysql_connect("localhost", "root", "")
or die("¡No se ha podido establecer la conexión con el servidor local!");

// Seleccionamos la Base de Datos
$resp = mysql_select_db("test")
or die("¡No se ha podido seleccionar la base de datos yyy!");

// Limito la busqueda
$tamano_pagina = 10;

// Examino la página a mostrar y el inicio del registro a mostrar

$pagina = $_GET["pagina"];
if (!$pagina) {
$inicio = 0;
$pagina=1;
}
else {
$inicio = ($pagina - 1) * $tamano_pagina;
}

/*
$criterio = "";
if ($_POST["apellidos"]!=""){
$txt_criterio = $_POST["apellidos"];
$criterio = "where APELLIDO like '%".$txt_criterio."%' order by idContacto";
}
*/

$criterio1 = "";
if ($_POST["apellidos"]!=""){
$txt_criterio1 = $_POST["apellidos"];
} elseif ($_GET["criterio1"]!="") {
$txt_criterio1 = $_GET["criterio1"];
}

$criterio1 = "where APELLIDO like '%".$txt_criterio1."%'";

$criterio2 = "";
if ($_POST["DNI"]!=""){
$txt_criterio2 = $_POST["apellidos"];
} elseif ($_GET["criterio2"]!="") {
$txt_criterio2 = $_GET["criterio2"];
}

$criterio2 = " or DNI like '%".$txt_criterio2."%' order by idContacto";


$sqlquery = "SELECT * FROM pilp2003 " . $criterio1 . $criterio2;

echo $sqlquery;
/* Notificamos fallo si se produce */
$queryresult = mysql_query($sqlquery) or die("¡No se puede ejecutar la sentencia select!");


$num_total_registros = mysql_num_rows($queryresult);
// Calculo el total de páginas
$total_paginas = ceil($num_total_registros / $tamano_pagina);

// Número de registros total, tamaño de página y la página que se muestra
echo "Número de registros encontrados: " . $num_total_registros . "<br>";
echo "Se muestran páginas de " . $tamano_pagina . " registros cada una<br>";
echo "Mostrando la página " . $pagina . " de " . $total_paginas . "<p>";

// Miro a ver el número total de campos que hay en la tabla con esa búsqueda
$sqlquery = "SELECT * FROM pilp2003 " . $criterio1 . . $criterio2 . " limit " . $inicio . "," . $tamano_pagina;


echo $sqlquery . "<p>";
/* Notificamos fallo si se produce */


$queryresult = mysql_query($sqlquery) or die("¡No se puede ejecutar la sentencia select!");


$num_total_registros = mysql_num_rows($queryresult);
echo "<table border = '1'> \n";
echo "<tr> \n";

// Para los del ejemplo
echo "<td>IdContacto</td> \n";
echo "<td>Nombre</td> \n";
echo "<td>Apellido</td> \n";
echo "<td>DNI</td> \n";
echo "<td>Teléfono</td> \n";
echo "<td>Teléfono1</td> \n";
echo "<td>Móvil</td> \n";
echo "</tr> \n";

while ($fila = mysql_fetch_object($queryresult))
{
echo "<td>".$fila->IdContacto."</td> \n";
echo "<td>".$fila->NOMBRE."</td> \n";
echo "<td>".$fila->APELLIDO."</td> \n";
echo "<td>".$fila->DNI."</td> \n";
echo "<td>".$fila->TELEFONO."</td> \n";
echo "<td>".$fila->TELEFONO1."</td> \n";
echo "<td>".$fila->TELMOVIL."</td> \n";
echo "</tr> \n";
}
echo "</TABLE>";


// Liberamos
mysql_free_result($queryresult);

// Cerramos la conexión con la BD
mysql_close($conexion);


echo "<p>";


//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas > 1){

for ($i=1;$i<=$total_paginas;$i++){
if ($pagina == $i)
//si muestro el índice de la página actual, no coloco enlace
echo $pagina . " ";
else
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
echo "<a href='busqueda.php?pagina=" . $i . "&criterio1=" . $txt_criterio1 . "&criterio2=" . $txt_criterio2 ."'>" . $i . "</a> ";
//echo "<a href='busqueda.php?pagina=" . $i . "&criterio=" . $txt_criterio . "'>" . $i . "</a> ";
}
}




?>

</div>
</body>
</html>
  #4 (permalink)  
Antiguo 09/05/2003, 12:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
lailuluelo .. cuando pongas código PHP .. acuerdate de usar el botón "PHP" para colocar el código. Veras que sale coloreado e identado, eso facilitará la lectura del código ...

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 09/05/2003, 16:40
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

Mira en mis respuestas en estos dos mensajes:

http://www.forosdelweb.com/showthrea...hreadid=119779
http://www.forosdelweb.com/showthrea...hreadid=116542

Realmente son la misma solucion, asi que ya me diras.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #6 (permalink)  
Antiguo 15/05/2003, 13:02
 
Fecha de Ingreso: mayo-2003
Mensajes: 125
Antigüedad: 14 años, 7 meses
Puntos: 0
Sigo con problemas

Muchas gracias por tu ayuda, pero aun no he conseguido arreglarlo. Creo que son un cumulo de pequeñas cosillas en las que voy trabajando. De todas formas y por si lo veis antes que yo os adjunto el código, esta vez con el boton PHP, MUCHAS GRACIAS

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
    <title>Resultado de la búsqueda</title>
    <link REL="StyleSheet" href="../css/estilo.css" type="text/css">
</head>

<body>
<div align="center">

<? 

// Nos conectamos con el servidor MySQL
$conexion mysql_connect("localhost""root""")
or die(
"¡No se ha podido establecer la conexión con el servidor local!");

// Seleccionamos la Base de Datos
$resp mysql_select_db("test")
or die(
"¡No se ha podido seleccionar la base de datos yyy!");

//  Limito la busqueda 
$tamano_pagina 10

// Examino la página a mostrar y el inicio del registro a mostrar 

$pagina $_GET["pagina"]; 
if (!
$pagina) { 
    
$inicio 0
    
$pagina=1

else { 
    
$inicio = ($pagina 1) * $tamano_pagina


$criterio='';  // primero vaciamos la consulta

if (''!=$_POST["apellidos"])
{
  
$criterio.=" and APELLIDO like '$_POST["apellidos"]'";
}elseif (
''!=$_GET["apellidos"]) {
$criterio.=" and APELLIDO like '$_GET["apellidos"]'";
}

}

/*
if (''!=$_POST["dni"])
{
  $criterio.=" and DNI like '$_POST["dni"]'";
}elseif (''!=$_GET["dni"]) {
$criterio.=" and DNI like '$_GET["dni"]'";
}
*/

// si $condicion esta vacia es que no han rellenado ningun campo
// Si es necesario que rellenen algun campo, lo tratamos como un error
if (''==$criterio)
{
  
//tratamos el error
}
// si tiene valor, quitamos los 4 primeros caracteres ' and'
$criterio=substr($criterio,4);
// con esto tenemos la condicion
// ahora montamos la consulta
$sqlquery "SELECT * FROM pilp2003 WHERE ".$criterio." ORDER by idContacto";


echo 
$sqlquery;
/* Notificamos fallo si se produce */
$queryresult mysql_query($sqlquery) or die("¡No se puede ejecutar la sentencia select1!");


$num_total_registros mysql_num_rows($queryresult); 
// Calculo el total de páginas 
$total_paginas ceil($num_total_registros $tamano_pagina); 

// Número de registros total, tamaño de página y la página que se muestra 
echo "Número de registros encontrados: " $num_total_registros "<br>"
echo 
"Se muestran páginas de " $tamano_pagina " registros cada una<br>"
echo 
"Mostrando la página " $pagina " de " $total_paginas "<p>"

// Miro a ver el número total de campos que hay en la tabla con esa búsqueda


$sqlquery "SELECT * FROM pilp2003 WHERE" $criterio " limit " $inicio "," $tamano_pagina;


echo 
$sqlquery "<p>";
/* Notificamos fallo si se produce */


$queryresult mysql_query($sqlquery) or die("¡No se puede ejecutar la sentencia select2!");


$num_total_registros mysql_num_rows($queryresult); 
echo 
"<table border = '1'> \n"
echo 
"<tr> \n"

    
// Para los del ejemplo
    
echo "<td>IdContacto</td> \n"
    echo 
"<td>Nombre</td> \n"
    echo 
"<td>Apellido</td> \n"
    echo 
"<td>DNI</td> \n"
    echo 
"<td>Teléfono</td> \n"
    echo 
"<td>Teléfono1</td> \n"
    echo 
"<td>Móvil</td> \n"
    echo 
"</tr> \n"
        
    while (
$fila mysql_fetch_object($queryresult))
    { 
        echo 
"<td>".$fila->IdContacto."</td> \n"
        echo 
"<td>".$fila->NOMBRE."</td> \n"
        echo 
"<td>".$fila->APELLIDO."</td> \n"
        echo 
"<td>".$fila->DNI."</td> \n";
        echo 
"<td>".$fila->TELEFONO."</td> \n";
        echo 
"<td>".$fila->TELEFONO1."</td> \n";
        echo 
"<td>".$fila->TELMOVIL."</td> \n";
        echo 
"</tr> \n";  
    }    
    echo 
"</TABLE>";


// Liberamos
mysql_free_result($queryresult); 

// Cerramos la conexión con la BD
mysql_close($conexion); 


echo 
"<p>";


//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas 1){

    for (
$i=1;$i<=$total_paginas;$i++){
        if (
$pagina == $i
            
//si muestro el índice de la página actual, no coloco enlace
            
echo $pagina " ";
        else
            
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
            
echo "<a href='busqueda.php?pagina=" $i "&criterio=" $criterio "'>" $i "</a> ";
    }
}




?>

</div>
</body>
</html>
El código inicial trabaja con dos variables: criterio y txt_criterio, sin embargo el codigo de los ejemplos que se muestran como solucion trabajan unicamente con una sola variable ($condicion).
El caso es que no termino de ver como podria pasar la referencia de una unica variable aunque tenga varios posibles criterios en el where. Lo siento pero estoy bloqueado.
GRACIAS

No tengo ahora para probarlo pero el problema estará unicamente en los % que se me ha olvidado poner para que busque las cadenas dentro de los campos ¿?

Última edición por lailuluelo; 15/05/2003 a las 13:02
  #7 (permalink)  
Antiguo 15/05/2003, 15:51
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,

El problema que tienes es que la variable que propagas por la URL es criterio y esta variable no la recoges en ningun sitio. Ademas, tal como tienes planteado tu script, no deberias pasar criterio, sino apellidos y demas variables que uses para crear $criterio en el script. Asi que en tu caso el link seria:
Código PHP:
 echo "<a href='busqueda.php?pagina=" $i "&apellidos=" $apellidos "&dni=".$dni."'>" $i "</a> "
por ejemplo (suponiendo que guardes en $apellidos el valor del GET o del POST segun corresponda).

Aparte de eso, la forma en que insertas los arrays $_GET y $_POST en una cadena es incorrecta. Deberia ser:
Código PHP:
$criterio.=" and APELLIDO like '{$_POST["apellidos"]}'"
o concatenandolo con el punto.

Suerte.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #8 (permalink)  
Antiguo 16/05/2003, 08:18
 
Fecha de Ingreso: mayo-2003
Mensajes: 125
Antigüedad: 14 años, 7 meses
Puntos: 0
Código final - Muy agradecido

Hola amigos,

Os adjunto el codigo final, resuelto gracias a la ayuda de Josemi y Manoloweb. Gracias por todo.

Código PHP:
<? 

// Nos conectamos con el servidor MySQL
$conexion mysql_connect("localhost""root""")
or die(
"¡No se ha podido establecer la conexión con el servidor local!");

// Seleccionamos la Base de Datos
$resp mysql_select_db("test")
or die(
"¡No se ha podido seleccionar la base de datos yyy!");

//  Limito la busqueda 
$tamano_pagina 10

// Examino la página a mostrar y el inicio del registro a mostrar 

$pagina $_GET["pagina"]; 
if (!
$pagina) { 
    
$inicio 0
    
$pagina=1

else { 
    
$inicio = ($pagina 1) * $tamano_pagina


$criterio='';  // primero vaciamos la consulta


if (''!=$_POST["apellidos"])
{
  
$criterio.=" and APELLIDO like '%{$_POST["apellidos"]}%'";

}elseif (
''!=$_GET["apellidos"]) {
  
$criterio.=" and APELLIDO like '%{$_POST["apellidos"]}%'";
}


if (
''!=$_POST["dni"])
{
  
$criterio.=" and DNI like '%{$_POST["dni"]}%'";
}elseif (
''!=$_GET["dni"]) {
  
$criterio.=" and DNI like '%{$_GET["dni"]}%'";
}


// si $condicion esta vacia es que no han rellenado ningun campo
// Si es necesario que rellenen algun campo, lo tratamos como un error
if (''==$criterio)
{
  
//tratamos el error
}
// si tiene valor, quitamos los 4 primeros caracteres ' and'
$criterio=substr($criterio,4);
// con esto tenemos la condicion
// ahora montamos la consulta
$sqlquery "SELECT * FROM pilp2003 WHERE ".$criterio." ORDER by idContacto";


/* Notificamos fallo si se produce */

$queryresult mysql_query($sqlquery) or die("¡No se puede ejecutar la sentencia select1!");


$num_total_registros mysql_num_rows($queryresult); 
// Calculo el total de páginas 
$total_paginas ceil($num_total_registros $tamano_pagina); 

// Número de registros total, tamaño de página y la página que se muestra 
echo "Número de registros encontrados: " $num_total_registros "<br>"
echo 
"Se muestran páginas de " $tamano_pagina " registros cada una<br>"
echo 
"Mostrando la página " $pagina " de " $total_paginas "<p>"

// Miro a ver el número total de campos que hay en la tabla con esa búsqueda


$sqlquery "SELECT * FROM pilp2003 WHERE" $criterio " limit " $inicio "," $tamano_pagina;


echo 
$sqlquery "<p>";
/* Notificamos fallo si se produce */


$queryresult mysql_query($sqlquery) or die("¡No se puede ejecutar la sentencia select2!");


$num_total_registros mysql_num_rows($queryresult); 
echo 
"<table border = '1'> \n"
echo 
"<tr> \n"

    
// Para los del ejemplo
    
echo "<td>IdContacto</td> \n"
    echo 
"<td>Nombre</td> \n"
    echo 
"<td>Apellido</td> \n"
    echo 
"<td>DNI</td> \n"
    echo 
"<td>Teléfono</td> \n"
    echo 
"<td>Teléfono1</td> \n"
    echo 
"<td>Móvil</td> \n"
    echo 
"</tr> \n"
        
    while (
$fila mysql_fetch_object($queryresult))
    { 
        echo 
"<td>".$fila->IdContacto."</td> \n"
        echo 
"<td>".$fila->NOMBRE."</td> \n"
        echo 
"<td>".$fila->APELLIDO."</td> \n"
        echo 
"<td>".$fila->DNI."</td> \n";
        echo 
"<td>".$fila->TELEFONO."</td> \n";
        echo 
"<td>".$fila->TELEFONO1."</td> \n";
        echo 
"<td>".$fila->TELMOVIL."</td> \n";
        echo 
"</tr> \n";  
    }    
    echo 
"</TABLE>";


// Liberamos
mysql_free_result($queryresult); 

// Cerramos la conexión con la BD
mysql_close($conexion); 


echo 
"<p>";


//muestro los distintos índices de las páginas, si es que hay varias páginas
if ($total_paginas 1){

    for (
$i=1;$i<=$total_paginas;$i++){
        if (
$pagina == $i
            
//si muestro el índice de la página actual, no coloco enlace
            
echo $pagina " ";
        else
            
//si el índice no corresponde con la página mostrada actualmente, coloco el enlace para ir a esa página
            
echo "<a href='busqueda.php?pagina=" $i "&apellidos=" $apellidos "&dni=".$dni."'>" $i "</a> ";
    }
}

?>
Un saludo y muchas gracias
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 16:00.