Tema destacado: Nueva página de elhacker.net en Google+ 
Autor
|
Tema: armar indice a travez de db, pero mostrando x resultados por pagina ¿como? (Leído 1,185 veces)
|
|
SERBice
|
quisiera saber como hacer una consulta a una db mysql e imprimir un indice, pero mostrando solo cierta cantidad de resultados por pagina, permitiendo asi ver una segunda, tercera yasi sucesivamente que continuen con el indice.... del mismo modo que este foro lista x cantidad de post por pagina y puedes ver los restantes haciendo click en [2] (pagina 2.... Uds ya me entienden, no necesito hablar mas jaja....  bueno, agradeceria si me dan una manito, y disculpen si no use el boscador, no me acostunbro a el y ademas no se con que parametro buscar lo que quiero... 
|
|
|
|
|
En línea
|
Asus M2N-SLI - 4GB DDR2 OCz System Elite - AMD Athlon 64 x2 5200+ - GeForce 8800GS 384MB Alpha Dog Edition - WD 7200rpm 500GB - Asus DRW-2014L1T Asus M2N-E - 4GB DDR2 OCz System Elite - AMD Phenom II x4 945 - GeForce 8800GS 384MB Alpha Dog Edition - 4x WD CaviarBlack 1TB - Asus DRW-22B2S 
|
|
|
|
|
|
SERBice
|
muchas graxias, lo vere....
|
|
|
|
|
En línea
|
Asus M2N-SLI - 4GB DDR2 OCz System Elite - AMD Athlon 64 x2 5200+ - GeForce 8800GS 384MB Alpha Dog Edition - WD 7200rpm 500GB - Asus DRW-2014L1T Asus M2N-E - 4GB DDR2 OCz System Elite - AMD Phenom II x4 945 - GeForce 8800GS 384MB Alpha Dog Edition - 4x WD CaviarBlack 1TB - Asus DRW-22B2S 
|
|
|
|
SERBice
|
he encontrado ejemplos y codes, pero no los logro entender y adaptarlos...  <? $conexion=mysql_connect('server','user','password');
mysql_select_db('base_db',$conexion);
$limite=5; $sqlpag=$pag*5; $sql = mysql_query("SELECT * FROM `noticias` ORDER BY id DESC LIMIT ". $sqlpag .",". $limite , $conexion) or die ('<FONT style="FONT-SIZE: 8pt" face=Verdana color=#ff0000><B>Error al conectar con la base de datos...</B></FONT>'); while($campo=mysql_fetch_array($sql)) { echo $campo[id]."<br>"; $contados=$contados+1; } if ($contados==0) { $links=$links."<br><hr><br>NO HAY RESULTADOS<br><hr><br>"; } elseif ($contados<=4) { if ($pag>=3){ $links=$links."<a href='?pag=". ($minpag=$pag-3) ."'>$minpag</a> - "; $links=$links."<a href='?pag=". ($minpag=$minpag+1) ."'>$minpag</a> - "; $links=$links."<a href='?pag=". ($minpag=$minpag+1) ."'>$minpag</a> - "; } elseif ($pag>=2) { $links=$links."<a href='?pag=". ($minpag=$pag-2) ."'>$minpag</a> - "; $links=$links."<a href='?pag=". ($minpag=$minpag+1) ."'>$minpag</a> - "; } elseif ($pag>=1) { $links=$links."<a href='?pag=". ($minpag=$pag-1) ."'>$minpag</a> - "; }else{} $links=$links."<br><hr><br>NO HAY MÁS RESULTADOS<br><hr><br>"; }else{ if ($pag>=3){ $links=$links."<a href='?pag=". ($minpag=$pag-3) ."'>$minpag</a> - "; $links=$links."<a href='?pag=". ($minpag=$minpag+1) ."'>$minpag</a> - "; $links=$links."<a href='?pag=". ($minpag=$minpag+1) ."'>$minpag</a> - "; } elseif ($pag>=2) { $links=$links."<a href='?pag=". ($minpag=$pag-2) ."'>$minpag</a> - "; $links=$links."<a href='?pag=". ($minpag=$minpag+1) ."'>$minpag</a> - "; } elseif ($pag>=1) { $links=$links."<a href='?pag=". ($minpag=$pag-1) ."'>$minpag</a> - "; }else{} $links=$links."<b>$pag</b> - "; if ($contados = 5){ $links=$links."<a href='?pag=". ($maxpag=$pag+1) ."'>$maxpag</a> - "; $links=$links."<a href='?pag=". ($maxpag=$maxpag+1) ."'>$maxpag</a> - "; $links=$links."<a href='?pag=". ($maxpag=$maxpag+1) ."'>$maxpag</a>"; }} echo $links;
?> esto es lo que he logrado....es poco, pero me gustaria saber si alguien no me da una manito y me lo corrige en lo que este mal (casi todo  )
|
|
|
|
|
En línea
|
Asus M2N-SLI - 4GB DDR2 OCz System Elite - AMD Athlon 64 x2 5200+ - GeForce 8800GS 384MB Alpha Dog Edition - WD 7200rpm 500GB - Asus DRW-2014L1T Asus M2N-E - 4GB DDR2 OCz System Elite - AMD Phenom II x4 945 - GeForce 8800GS 384MB Alpha Dog Edition - 4x WD CaviarBlack 1TB - Asus DRW-22B2S 
|
|
|
Morris
Ex-CoAdmin y
Ex-Staff
Desconectado
Mensajes: 1.966
|
 Lo más más más fácil es hacerlos con DreamWeaver y te quitas de problemas. Te hace la paginación automáticamente en PHP y ASP.
|
|
|
|
|
En línea
|
|
|
|
|
SERBice
|
yo no uso dream.....  y no lo tengo :'( no pueden darme una manito uds con un code sencillito, osea que pagine y solo eso, yo me encargo de ajustarlo a mis necesidades....no pido mucho.... por favor, no me sale :'(
|
|
|
|
|
En línea
|
Asus M2N-SLI - 4GB DDR2 OCz System Elite - AMD Athlon 64 x2 5200+ - GeForce 8800GS 384MB Alpha Dog Edition - WD 7200rpm 500GB - Asus DRW-2014L1T Asus M2N-E - 4GB DDR2 OCz System Elite - AMD Phenom II x4 945 - GeForce 8800GS 384MB Alpha Dog Edition - 4x WD CaviarBlack 1TB - Asus DRW-22B2S 
|
|
|
|
|
|
SERBice
|
he conseguido este code, pero no funciona muy bien :'( no se que esta mal, si pueden darme una manito se los agradeceria muchisisisisisimo!!!!! <html> <head> <title>Páginación de resultados</title> </head> <body bgcolor=#FFFFFF> <? // Datos de conexión a la base $base="nombredelabase"; $con=mysql_connect(servidor,usuario,password); mysql_select_db($base,$con);
if (!isset($pg)) $pg = 0; // $pg es la pagina actual $cantidad=10; // cantidad de resultados por página $inicial = $pg * $cantidad;
$pegar = "SELECT * FROM tabla ORDER BY titulo LIMIT $inicial,$cantidad"; $cad = mysql_db_query($base,$pegar) or die (mysql_error());
$contar = "SELECT * FROM tabla ORDER BY titulo"; $contarok= mysql_db_query($base,$contar); $total_records = mysql_num_rows($contarok); $pages = intval($total_records / $cantidad);
// Imprimiendo los resultados while($array = mysql_fetch_array($cad)) { echo $array['titulo']."<br>"; }
// Cerramos la conexión a la base $con=mysql_close($con);
// Creando los enlaces de paginación echo "<p class=fonty>"; if ($pg != 0) { $url = $pg - 1; echo "<a href='$PHP_SELF?pg=".$url."'>« Anterior</a> "; } else { echo " "; } for ($i = 0; $i <= $pages; $i++) { if ($i == $pg) { if ($i == "0") { echo "<b> 1 </b>"; } else { $i = $i+1; echo "<b> ".$i." </b>"; } } else { if ($i == "0") { echo "<a href=$PHP_SELF?pg=".$i.">1</a> "; } else { echo "<a href='$PHP_SELF?pg=".$i."'>"; $i = $i+1; echo $i."</a> "; } } } if ($pg < $pages) { $url = $pg + 1; echo "<a href='$PHP_SELF?pg=".$url."'>Siguiente »</a>"; } else { echo " "; } echo "</p>"; ?> </body> </html>
|
|
|
|
|
En línea
|
Asus M2N-SLI - 4GB DDR2 OCz System Elite - AMD Athlon 64 x2 5200+ - GeForce 8800GS 384MB Alpha Dog Edition - WD 7200rpm 500GB - Asus DRW-2014L1T Asus M2N-E - 4GB DDR2 OCz System Elite - AMD Phenom II x4 945 - GeForce 8800GS 384MB Alpha Dog Edition - 4x WD CaviarBlack 1TB - Asus DRW-22B2S 
|
|
|
|
SERBice
|
ejem.... les molestaria mucho darme una manito, prometo no molestar mas con este post, pero es que necesito eso de la paginacion....PLZZZ!!!!!!!!!!!!!!!!!!
|
|
|
|
|
En línea
|
Asus M2N-SLI - 4GB DDR2 OCz System Elite - AMD Athlon 64 x2 5200+ - GeForce 8800GS 384MB Alpha Dog Edition - WD 7200rpm 500GB - Asus DRW-2014L1T Asus M2N-E - 4GB DDR2 OCz System Elite - AMD Phenom II x4 945 - GeForce 8800GS 384MB Alpha Dog Edition - 4x WD CaviarBlack 1TB - Asus DRW-22B2S 
|
|
|
.Carlos
Desconectado
Mensajes: 835
Web Entrepreneur
|
Cual es el error que te da? o que es lo que no funciona?
|
|
|
|
|
En línea
|
|
|
|
redHat
Desconectado
Mensajes: 427
Don't fear the Penguin
|
Mira, el mió no está tan chido como el anterior, pero funciona, tu has cualquier consulta dentro de PHP, y modifica todo lo que veas que es amigable , tienes que tener muy bien esas matemáticas para lode módulos y los residuos, mira, este funciona para cuando el límite es de renglones, sí funciona. // PAGINACION.PHP <?php
include "conectar.php";
$consulta1=mysql_query("SELECT *FROM tu_tabla",$conexion);
$total = mysql_num_rows($consulta1); //cantidad de renglones de tu consulta
if(($inicio==10) or ($inicio==20) or ($inicio==30)) { //Esto es si quieres que tu máximo numero de renglones sea de 10
if($residuo==0) { $paginas=$total / $limite; }
else { $paginas=($total - $residuo) / $limite + 1; }
$consulta2=mysql_query("SELECT *FROM tu_tabla LIMIT $inicio,$limite",$conexion);
echo "<table>";
while($row=mysql_fetch_array($consulta2)) { //Te muestra los registros en el campo "tu_campo"
echo "<tr><td>$row['tu_campo']</td></tr>";
}
echo "</table>";
$inicio=0;
for($i=1;$i<=$paginas;$i++) {
echo "<a href=http://localhost/paginacion.php?inicio=$inicio&limite=$limite&residuo=$residuo>-$i-</a>";
$inicio=$inicio+10;
}
}
else { //Esto es el código inicial, debes leer este primero para entender lo segundo $limite=10; $inicio=0;
$residuo=$total % $limite;
if($residuo==0) { $paginas=$total / $limite; }
else { $paginas=($total - $residuo) / $limite + 1; }
$consulta2=mysql_query("SELECT *FROM tu_tabla LIMIT $inicio,$limite",$conexion);
echo "<table>";
while($row=mysql_fetch_array($consulta2)) { //Te muestra los registros en el campo "tu_campo"
echo "<tr><td>$row['tu_campo']</td></tr>";
}
echo "</table>";
for($i=1;$i<=$paginas;$i++) {
echo "<a href=http://localhost/paginacion.php?inicio=$inicio&limite=$limite&residuo=$residuo>-$i-</a>";
$inicio=$inicio+10;
}
}
?> NOTA, el archivo conectar.php, contiene $conexion=mysql_conect(servidor,user,pass); $db=tu_DB; mysql_select_db($db,$conexion); Tu modificalo, no lo intentes entender de golpe, crea tu consulta y verás que funcionará... Cualquier duda pregunta... Algunas notas sobre las páginas: 1-Árriba en el primer if(($inicio==10) or ($inicio==20) or ($inicio==30), puede ser cualquier multilo de 10 40, 50, 60, pero no se como interpretar a todos los multiplos de 10 en un solo if, yo lo hice hasta 3 por que tenía una consulta con menos de 30 mensajes, por eso eso es depende de que tantos mensajes tengas.... ojalá que te sirva, que yo estaba en las mismas, pero me decidí a hacerlo y me jaló bien.... PD, brujo pásate el codigo de este...=P
|
|
|
|
« Última modificación: 30 Junio 2005, 07:12 por redHat »
|
En línea
|
Calaberas traseras transparentes $80.00, defensa de Honda Civic 2000, $1000.00, cambiarte 4 carriles con menos de 5 metros de espacio, no tiene precio.....
|
|
|
|
SERBice
|
bueno, se que insisto demasiado y no aprovecho bien todo lo que me ofrecen (y es que soy duro y algo mas que uds han de pensar pero no decir jajajaja)..... bueno, de tan duro que soy y como no pude adaptar ningun codigo (no se, cada vez que tocaba uno saltaba error) me he hecho mi propio code despues de romperme el marote un rato......(bastante largo ....jhaja) <?
//...............
$conexion=mysql_connect($host_db,$usuario_db,$pass_db);
mysql_select_db($base_db,$conexion);
if ($order=='a'){
$sql = mysql_query("SELECT * FROM `tabla` ORDER BY `campoa` ASC", $conexion) or die ('<FONT style="FONT-SIZE: 8pt" face=Verdana color=#ff0000><B>Error al conectar con la base de datos...</B></FONT>');
$totales=mysql_num_rows($sql);
$ppagina = 5; $paginas = ceil($totales/$ppagina); if ($pagina =='' || $pagina == 0 || is_null($pagina) || $pagina > $paginas){$pagina=1;}
$sql = mysql_query("SELECT * FROM `tabla` ORDER BY `campoa` ASC LIMIT ". (($pagina*5)-4) ." , ". ($ppagina) ."", $conexion) or die ('<FONT style="FONT-SIZE: 8pt" face=Verdana color=#ff0000><B>Error al conectar con la base de datos...</B></FONT>');
}elseif ($order=='c' || $order=='' || is_null($order)){
$sql = mysql_query("SELECT * FROM `tabla` ORDER BY campob DESC", $conexion) or die ('<FONT style="FONT-SIZE: 8pt" face=Verdana color=#ff0000><B>Error al conectar con la base de datos...</B></FONT>');
$totales=mysql_num_rows($sql);
$ppagina = 5; $paginas = ceil($totales/$ppagina); if ($pagina =='' || $pagina == 0 || is_null($pagina) || $pagina > $paginas){$pagina=1;} $sql = mysql_query("SELECT * FROM `tabla` ORDER BY campob DESC LIMIT ". (($pagina*5)-4) ." , ". ($ppagina) ."", $conexion) or die ('<FONT style="FONT-SIZE: 8pt" face=Verdana color=#ff0000><B>Error al conectar con la base de datos...</B></FONT>'); } //imprimo el indice de paginas cercanas, anterior y siguiente..... if ($pagina-1 < 1){echo " Anterior ";}else{ echo " <a href='?order=$order&pagina=". ($pagina-1) ."'> << Anterior</a> ";} if ($pagina-4 < 1){/*echo "   ";*/}else{ echo " <a href='?order=$order&pagina=". ($pagina-4) ."'>". ($pagina-4) ."</a> ";} if ($pagina-3 < 1){/*echo "   ";*/}else{ echo " <a href='?order=$order&pagina=". ($pagina-3) ."'>". ($pagina-3) ."</a> ";} if ($pagina-2 < 1){/*echo "   ";*/}else{ echo " <a href='?order=$order&pagina=". ($pagina-2) ."'>". ($pagina-2) ."</a> ";} if ($pagina-1 < 1){/*echo "   ";*/}else{ echo " <a href='?order=$order&pagina=". ($pagina-1) ."'>". ($pagina-1) ."</a> ";} echo ' <b>'.$pagina.'</b> '; if ($pagina+1 > $paginas){}else{ echo " <a href='?order=$order&pagina=". ($pagina+1) ."'>". ($pagina+1) ."</a> ";} if ($pagina+2 > $paginas){}else{ echo " <a href='?order=$order&pagina=". ($pagina+2) ."'>". ($pagina+2) ."</a> ";} if ($pagina+3 > $paginas){}else{ echo " <a href='?order=$order&pagina=". ($pagina+3) ."'>". ($pagina+3) ."</a> ";} if ($pagina+4 > $paginas){}else{ echo " <a href='?order=$order&pagina=". ($pagina+4) ."'>". ($pagina+4) ."</a> ";} if ($pagina+1 > $paginas){echo " Siguiente ";}else{ echo " <a href='?order=$order&pagina=". ($pagina+1) ."'>Siguiente >></a> ";}
?><br><br><FONT style="FONT-SIZE: 8pt" face=Verdana> Ver listado de noticias completo:<br> <a style="text-decoration: none" href="?order=c">cronológicamente</a> - <a style="text-decoration: none" href="?order=a">alfabéticamente</a><br>
<? //imprimo 5 resultados, los correspondientes a la consulta de esta pagina..... while($campo=mysql_fetch_array($sql)) { //...................... } ?> antes de que lo digan, no es el mejor, no es de optimo rendimiento pues hace 2 consultas cada vez que ves la pagina y tiene muchos if y todo eso... si, es verdad, pero es lo que me sale.... jaja acepto modificaciones, correcciones y sugerencias.... pero mi post no es para esto solo, sino que me funciona medio mal (por no decir todo).... resulta que esto es para paginar las noticias de mi web (pienso usarlo en otros lugares mas, peor hasta que funcione bien no lo pongo en otro lado) y pues, solo tengo 2 registros en la tabla de la db que tiene las noticias y sucede que cuando pongo $order=c me tira uno de los 2 registros y cuando hago $order=a me tira el otro.....cuando solo deberia mostrar los 2 pero ordenados por el campo fecha (campob) o por el campo titulo (campoa)..... no comprendo que es lo que anda mal para que me "coma" registros, osea que me muestre menos de los que hay..... ayuda!!!!!!! desde ya muchas gracias a todos y perdon por la insistencia.... 
|
|
|
|
|
En línea
|
Asus M2N-SLI - 4GB DDR2 OCz System Elite - AMD Athlon 64 x2 5200+ - GeForce 8800GS 384MB Alpha Dog Edition - WD 7200rpm 500GB - Asus DRW-2014L1T Asus M2N-E - 4GB DDR2 OCz System Elite - AMD Phenom II x4 945 - GeForce 8800GS 384MB Alpha Dog Edition - 4x WD CaviarBlack 1TB - Asus DRW-22B2S 
|
|
|
-Riven-Ward-
RivenSoft
Desconectado
Mensajes: 2.216
Do you like Mario? xDDDDDDDDDDDD
|
Muy poco dinámico el código que pones... ¿Porqué no pruebas las opciones que te dieron arriba? Yo también tengo uno, te aseguro que funciona y todo eso pero ya te ofrecieron algunos, prueba con ellos y después me dices.
Por cierto, ¿Qué es lo que no te funciona de ese código?
Salu2!
|
|
|
|
|
En línea
|
Usuario Banneado
|
|
|
Rentero
Ex-Staff
Desconectado
Mensajes: 1.163
La paciencia es la madre de la ciencia.
|
Hacer una paginación es muy fácil, aunque en internet lo pinten como una cosa solo para dioses. Veamos... Toda la historia está en usar la sentencia LIMIT en la consulta a la db. La sentencia LIMIT funciona de esta forma: SELECT * FROM tabla ORDER BY id ASC LIMIT 0,20 En este ejemplo la consulta SQL seleccionaría las 20 primeras coincidencias ordenadas por ID. El 0(cero) es el inicio de la selección y el 20 es la cantidad de coincidencias a seleccionar. Esto creo que está claro. Ahora... De lo que se trata en la paginación es de controlar los valores que le pasamos a LIMIT. Para hacerlo lo mas dinámico posible usamos variables, concretamente dos, una para marcar el incio de la selección y otra para determinar la cantidad de resultados que queremos mostrar. Un pequeño ejemplo... <?php // $conec = mysql_connect(); // mysql_select_db(); etc, etc.
$pagina_actual = $_GET["pag"]; //esto es muy bueno hacerlo $cantidad_resultados = 10; //es la cantidad de resultados que quieres mostrar por página $inicio_seleccion = $pagina_actual * $cantidad_resultados; //el inicio depende de la página en la que estemos
if(!$pagina_actual) $pagina_actual = 0; //si estamos en archivo.php el inicio es cero $resp = mysql_query("SELECT * FROM tabla ORDER BY id ASC LIMIT $incio_seleccion,$cantidad_resultados", $conec)
// ya esta la paginación, solo keda mostrar los resultados //.... //while($row = mysql_fetch_array($resp)) //{ // echo $row["campo"].'<br>'; //} // bla, bla... // añades unos enlaces a las paginas siguientes y listo // echo '<a href="$PHP_SELF?pag='.($pagina_actual+1).'">Pagina siguiente</a> | '; // echo '<a href="$PHP_SELF?pag='.($pagina_actual-1).'">Pagina anterior</a>'; // ...... ?> En este ejemplo la paginas deberían ser de esta forma: archivo.php?pag=2Donde el número 2 es el número de la pagina. Si el numero fuera 2 y la cantidad de resultados por pagina fuera 10...en ese caso estarias mostrandos los resultados desde el 20 hasta el 30. Bueno, no veo las matemáticas difíciles por ningún lado xDD Creo que con esta está mas que claro como se hace una paginación...ahora solo queda que te codees un script a tu gusto. Ya sabes, alguna duda...postea. Saludos 
|
|
|
|
|
En línea
|
Firmado.
|
|
|
|
SERBice
|
muy lindo code neohex, ahora mi pregunta......
como sabes el fin de la paginacion, osea donde se acaban las paginas..... con ese code segun veo si sigues haciendo click en siguiente puedes avanzar paginas en blanco, osea cuando no hay mas resultados.... por ej, podrias ir por la pagina 6 cuando en verdad hubiera 40 resultados....
¿me equivoco?
otra observacion es que figuran los links atras y adelante, pero ningun numero de pagina....
|
|
|
|
|
En línea
|
Asus M2N-SLI - 4GB DDR2 OCz System Elite - AMD Athlon 64 x2 5200+ - GeForce 8800GS 384MB Alpha Dog Edition - WD 7200rpm 500GB - Asus DRW-2014L1T Asus M2N-E - 4GB DDR2 OCz System Elite - AMD Phenom II x4 945 - GeForce 8800GS 384MB Alpha Dog Edition - 4x WD CaviarBlack 1TB - Asus DRW-22B2S 
|
|
|
|
|