Foros del Web » Programando para Internet » PHP »

Pagnacion de resultados usando un Campo Text

Estas en el tema de Pagnacion de resultados usando un Campo Text en el foro de PHP en Foros del Web. como puedo hacer una paginacion de datos usando un campo textfield y un submit. Gracias...
  #1 (permalink)  
Antiguo 25/07/2006, 15:15
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 20 años, 7 meses
Puntos: 0
Pregunta Pagnacion de resultados usando un Campo Text

como puedo hacer una paginacion de datos usando un campo textfield y un submit.
Gracias
  #2 (permalink)  
Antiguo 25/07/2006, 15:26
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 3 meses
Puntos: 9
hola podes ser algo mas especifico?
  #3 (permalink)  
Antiguo 25/07/2006, 15:35
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 17 años, 8 meses
Puntos: 5
quieres hacer una consulta a una BD y el resultado de esta mostrarla en un textfield al precionar un boton???

Última edición por .php; 25/07/2006 a las 20:46
  #4 (permalink)  
Antiguo 25/07/2006, 15:37
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 20 años, 7 meses
Puntos: 0
Si exactamente, podrias decirme como tendria que hacer??
  #5 (permalink)  
Antiguo 25/07/2006, 15:59
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 17 años, 8 meses
Puntos: 5
Información

ok
imagina que tienes una tabla con 2 campos
id int(4)
Nombre varchar (100)

que tengan los siguientes datos:

insert into tabla values (1,'JUAN');
insert into tabla values (2,'SUPER MAN');
insert into tabla values (3,'MARIO');
insert into tabla values (4,'PETER');
insert into tabla values (5,'LUIS');

se asume que la variable $link es la coneccion


Código PHP:
<?
$txtnom 
$_POST["txtnom"];
$id        $_POST["id"];
if(isset(
$txtnom)){ // si el textfield tiene datos entra a la condicion
$link  conectar();
$sql "select * from TABLA where id=$id"// genero mi string de sql
$result mysql_query($sql);  // ejecuto mi sql en mysql y me devuelve un resultado
$fila mysql_fetch_object($result); //obtengo mi fila
$id $fila->id;                             //paso los datos del campo a variables
$Nombre $fila->Nombre;
mysql_free_result($result); //liberamos el $result
}
?>
<html>
<body>

<form name="form1" method="post" action="">
id:
 <input name="id" type="text" value="<? echo $id?>">
nombre:
 <input name="txtnom" type="text" value="<? echo $txtnom?>">
buscar:
<input type="submit" name="Submit" value="Buscar id">
</form>
</body>
</html>
<? mysql_close($link); ?>

algo asi se me ocurre, espero que te sirva
  #6 (permalink)  
Antiguo 26/07/2006, 06:16
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 20 años, 7 meses
Puntos: 0
No me has comprendido del todo.
Te explico un poco mejor, tengo una tabla de productos con 100 resultados y cuando quiero mostrar esos productos en una pagina lo que hago es paginarlos en forma tradicional:

//**************************************
//Paginación de resultados
//mostrando 10 registros por página
1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10 - Siguiente>>
//**************************************

Ahora lo que realmente quiero lograr es que en un campo text poner el numero de la pagina que quero ver y al presionar un boton me muestre esa pagina con sus diez resulados por ejemplo la pagina 3.

Como tendria que hacerlo?
  #7 (permalink)  
Antiguo 26/07/2006, 07:13
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 17 años, 8 meses
Puntos: 5
ok ya entendi, por ahi tengo algo echo busco el fuente y te digo
  #8 (permalink)  
Antiguo 26/07/2006, 07:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues sería lo mismo que haces para paginar .. es decir, tu cuando generas tus links de paginado seguro que los apuntas a tal scritp PHP con tales variables para hacer ese proceso.

<a href="resultados.php?pagina=X">X</a>

pues se trataría en ese caso de que hagas un simple formulario HTML que apunte su "action" a ese "resultados.php" y tenga la variable (input) "pagina" y que use el método "GET" (method)

<form action="resultados.php" method="GET">
<input type="text" name="pagina">
botón de enviar ..
</form>

Todo depende de tu código actual de paginado .. pero en generar sea como sea se trata de montar tu formulario HTML como te muestro con las variables que tu link genera para el paginado .. A lo sumo algún cálculo tendrías que hacer si es que en tus links de paginado indicas "punteros" (no páginas que por otro lado calcules los "LIMIT X,Y" que corresponda ..)

Un saludo
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 26/07/2006, 08:06
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 17 años, 8 meses
Puntos: 5
Información

lo encontre esta es una parte y la mas importante
Código PHP:
<table x:str border=0 cellpadding=4 cellspacing=0 width=1554 style='border-collapse:>
  <TH>Nº</TH>
  <TH>Nombres</TH>
  <TH>Apellidos</TH>
 </tr>
<?php
   $MaxRows    
=  10;  //cantidade de registros a mostrar
   
$StartRows  =  $PagNum $MaxRows;  // StartRows = de que registro empieza a leer
   /* ejemplo estoy en la pagina $PagNum = 0 
   Primera vez va a ser 0 * 10 = 0
   ahora vamos en la pagina dos entonces $PagNum = 1
   1 * 10 = 10; entonces empieza a mostrar desde el registro 10 hasta $MaxRows que son 10 registros
   */
   
$sql        =  "SELECT * from MI_TABLA";  // quenero mi sql 
   
$query      =  sprintf("%s LIMIT %d, %d"$sql." order by NOM ASC "$StartRows$MaxRows); // a mi sql generado le digo desde donde debe empezar a mostrar los registros y cuantos
   
$result     =  mysql_query($query,$link); // ejecuto mi sql
   
$NumReg     =  mysql_num_rows($result);
   if(
mysql_num_rows($result)!=0){ // si hay registros entro a mostrar
        
while($row  =  mysql_fetch_array($result)) {// muestro una tabla con los registros encontrados
            
printf("<tr><td>%s</td>"$row["ID"]);
            
printf("<td>%s</td>"$row["NOM"]);
            
printf("<td>%s</td>"$row["APE"]);
            
printf("</tr>");
        }
        
$PagTot = ($NumReg) / $MaxRows;  // $PagTot es para saber cuantas paginas tengo
    
}
?>
</table>
ahora lo unico que falta es hacer las flechas
Código:
<<  <  >  >> 
las que avancan y retroceden

espero que te sirva y sea esto lo que buscas

Última edición por .php; 26/07/2006 a las 09:53
  #10 (permalink)  
Antiguo 27/07/2006, 14:15
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 20 años, 7 meses
Puntos: 0
Cluster he tratado de hacer como me sugeriste pero no me ha salido, no me muestra ningun resultado

aca muestro como tengo hecho la paginacion en mi pagina en forma tradicional:

Código:
<?
require_once("con.php");//datos de coneccion
require_once("sis.php");

/* Opciones configurables */
$CampoOrden = cd_param('CampoOrden');
$TipoOrden = cd_param('TipoOrden');
$Pagina = intval(cd_param('Pagina'));
if ($Pagina <= 0) $Pagina = 1;

$NombreTipoRegistro = ' registro';	// Nombre tipo de registro
$NombreTipoRegistroPlu = ' registros';	// Nombre tipo de registros en Plural
$NombreClaseReg = 'encontró ';
$NombreClaseRegPlu = 'encontraron ';
$arrListaCampos = array('nombre', 'descripcion');
$arrListaEncabezados = array('Producto', 'Descrip');
$Tabla = 'tbl_productos';	// Tabla sobre la cual trabajaremos
$PK = 'id_prod';	// Nombre del campo Clave Principal
$CampoOrdenPre = $PK;	// Campo de orden predeterminado
$TipoOrdenPre = 'asc';	// Tipo de orden predeterminado
$RegPorPag = 5;		// Cantidad de registros por página
if(!$CampoOrden) $CampoOrden = $CampoOrdenPre;
if(!$TipoOrden) $TipoOrden = $TipoOrdenPre;
$PrimReg = ($Pagina - 1) * $RegPorPag;
$sqlCuenta = "SELECT COUNT($PK) FROM $Tabla";
$sqlDatos = "SELECT * FROM $Tabla ORDER BY $CampoOrden $TipoOrden LIMIT $PrimReg, $RegPorPag";
/* Fin opciones configurables */

// Cuento la cantidad de registros sin LIMIT
$result = @mysql_query($sqlCuenta);
if (cd_control_error($result, $sqlCuenta)) exit();
$CantReg = mysql_result($result,0, 0);

// Ejecuto la consulta
$result = @mysql_query($sqlDatos);
if (cd_control_error($result, $sqlDatos)) exit();
?>

<html> 
<head> 
<title>Páginación de resultados</title> 
</head> 

<body> 
<?
//establesco si hay o no resultados
if ($CantReg<1) echo "<p>No se encontraron $NombreTipoRegistroPlu</p>";
if (mysql_num_rows($result)){
?>
Se 
<? if ($CantReg>1) echo $NombreClaseRegPlu; else echo $NombreClaseReg; ?>
<?=$CantReg?>
<? if ($CantReg>1) echo $NombreTipoRegistroPlu; else echo $NombreTipoRegistro; 
?>
 <br><br>  
<?	 
while ($rs = mysql_fetch_array($result)){
	echo $rs['nombre']." - ".$rs['descripcion'].'<br>';
}
if (ceil($CantReg/$RegPorPag) > 1){
echo "<p>P&aacute;gina $Pagina: Mostrando $CantMostrados de $CantReg $NombreTipoRegistroPlu</p>\r\n";

echo "<p>";
if ($Pagina > 1) echo "<a href=\"{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}&Pagina=". ($Pagina-1) ."\" class='linkBordo'>Anterior</a>";
if ($Pagina > 1 && $Pagina<ceil($CantReg/$RegPorPag)) echo " - ";
if ($Pagina<ceil($CantReg/$RegPorPag)) echo "<a href=\"{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}&Pagina=". ($Pagina+1) ."\" class='linkBordo'>Siguiente</a>";

 echo " | P&aacute;ginas: ";
	$strPaginas = '';
	for($i=1;$i<=ceil($CantReg/$RegPorPag);$i++){
		if ($i == $Pagina) $strPaginas .= "<b>";
		else @$strPaginas .= "<a href=\"{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}&Pagina=". $i ."\" class='linkBordo'>";
		$strPaginas .= $i;
		if ($i == $Pagina) $strPaginas .= "</b> - ";
		else $strPaginas .= "</a> - ";
	}
	echo substr($strPaginas, 0, strlen($strPaginas) - 3);
}
}
?> 
</body> 
</html>
lo que quisiera poder hacer es que en ves de mostrarme la cantidad de paginas para navegar como links, seria poder poner en un textfield el numero de pagina a la que quiero ir y un boton que diga ir.

les agradeceria si me pudieran mostrar un ejemplo para que lo pueda entender mejor.

Mil gracias
  #11 (permalink)  
Antiguo 27/07/2006, 14:35
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 17 años, 8 meses
Puntos: 5
seria algo asi

Nº de pagina ___ ir
Código:
Nª de pagina <input type=text size=5> <input type=submit name=btn_ir value="ir">
y al buscar te muestre una cierta cantidad de registros??
  #12 (permalink)  
Antiguo 27/07/2006, 15:31
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 20 años, 7 meses
Puntos: 0
si tal cual y al buscar me muestre los 10 registros que corresponden a esa pagina,por ejemplo la pagina 3.
  #13 (permalink)  
Antiguo 27/07/2006, 15:54
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El ejemplo que te mostré (el formulario) .. debes tener presente que si tu en tu sistema propagas más variables también tendrás que añadirlas al formulario .. de hecho tu usas unas cuantas:

Sobre todo las que vienen del "QUERY_STRING" + la que llama "Pagina" que es el paginado en sí ...

"<a href=\"{$_SERVER['PHP_SELF']}?{$_SERVER['QUERY_STRING']}&Pagina=". $i ."\" class='linkBordo'>";
$strPaginas .= $i;

realmente no indentifico en tu código las variables que usas (en el URL propagadas) pero son esas las que tienes que propagar en el formulario, usando campos hidden y dando sus value con tus variables ..

<input type="hidden" name="nose" value="<? echo $_GET['nose'] ?>">

Y así con todas las que tengas ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #14 (permalink)  
Antiguo 28/07/2006, 06:52
Avatar de .php  
Fecha de Ingreso: julio-2006
Mensajes: 481
Antigüedad: 17 años, 8 meses
Puntos: 5
lo que tu deberia tener en tu codigo seria algo asi
Código PHP:
  $MaxRows  5//cantidad de registros a mostrar
  
$StartRows  =  $_POST["PagNum"] * $MaxRows// inicio de registros que vas a mostrar 
   
$sql        =  "SELECT * from MI_TABLA";  // genero mi sql  
   
$query      =  sprintf("%s LIMIT %d, %d"$sql." order by NOM ASC "$StartRows$MaxRows); // a mi sql generado le digo desde donde debe empezar a mostrar los registros y cuantos 
   
$result     =  mysql_query($query,$link); // ejecuto mi sql 
   
$NumReg     =  mysql_num_rows($result); 
despues de eso haces un while y muestras el resultado de tu consulta, ahora falta el codigo que te mostre anteriormente, lo modificamos un poco
Código HTML:
<form name="form1" method="post" action="" >
Nª de pagina <input type="text" name="PagNum" size=5> <input type=submit name=btn_ir value="ir">
</form> 
  #15 (permalink)  
Antiguo 28/07/2006, 11:12
 
Fecha de Ingreso: septiembre-2003
Mensajes: 197
Antigüedad: 20 años, 7 meses
Puntos: 0
Mil gracias a .php y a Cluster por la mano que me dieron. Entre los dos entendi mejor que debia hacer.
Ahora el codigo funciona a las mil maravillas.
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 12:48.