Quijost

Por favor ingresa o regístrate.

Ingresar con nombre de usuario, contraseña y duración de la sesión
Búsqueda Avanzada  

Noticias:

Deja tu post en el foro para hacer algun tipo de consulta

Autor Tema: "Cambiar de hoja"  (Leído 35211 veces)

0 Usuarios y 1 Visitante están viendo este tema.

espada

  • Usuario nuevo
  • *
  • Karma: +5/-0
  • Desconectado Desconectado
  • Mensajes: 36
    • Ver Perfil
"Cambiar de hoja"
« en: Julio 06, 2010, 02:13:39 am »

Hola, me gustaría saber como se hace para  que haya un limite de "entradas" o cualquier cosa descargada de la base de datos por hoja y que en caso de haber mas aparezca un siguiente y al darle continué con las "entradas". seria tipo blog para mostrar entradas mas antiguas. Si alguien puede ayudarme gracias por adelantado.
En línea

shakaran

  • Soporte
  • Administrator
  • Usuario profesional
  • *****
  • Karma: +12/-0
  • Desconectado Desconectado
  • Sexo: Masculino
  • Mensajes: 487
  • Un buen soporte lo es todo
    • Ver Perfil
    • Shakaran
Re:"Cambiar de hoja"
« Respuesta #1 en: Julio 06, 2010, 09:55:06 am »

Es facil, digamos que tienes 80 entradas o registros.

Haces una consulta mysql para obtener este total (con mysql_num_rows())

Después si quieres paginar por cada 5 entradas o registros, tendrías que dividir para que te dieran las entradas por página.

Por ejemplo, la página 1, tendría las entradas de la 0 a la 4, la página 2 de la 5 a 9, etc.
En línea
Ángel Guzmán Maeso
Quijost Founder - Backend Engineer & Main support

espada

  • Usuario nuevo
  • *
  • Karma: +5/-0
  • Desconectado Desconectado
  • Mensajes: 36
    • Ver Perfil
Re:"Cambiar de hoja"
« Respuesta #2 en: Julio 06, 2010, 18:35:26 pm »

bufff no me ayuda demasiado a ver el codigo que tengo ahora mismo es este:
Código: [Seleccionar]
<?php
   $connect 
mysql_connect('localhost''usuario''cotraseña');
    
mysql_select_db('sensei_blog'$connect);
   
$result =  mysql_query("SELECT entrada, imagen, autor, title FROM blog WHERE seccion='principal' ORDER BY id DESC",  $connect);
   echo 
'<table>';
   while(
$row mysql_fetch_array($result))
   {
      echo  
'<tr><td><center>
<span style="font-weight:bold; font-size:20px; color:#FFFFFF;">'
.$row['title'].'</span>
<br/><br/>
                        <img alt=cabezera src='
.$row['imagen'].'>
</br></br>
                        <div style="color:#FFFFFF;">'
.nl2br($row['entrada']).'</div>
</center> </br> </br>
<p align="right" style="color:#FFFFFF;"> autor: '
.$row['autor'].'</p>
</td></tr>'
;
   }
    echo 
'</table>';
?>


con esto las entradas se me muestran en la web, pero se me muestran todas me gustaría que solo se mostraran 5 o 10 y en caso de haber mas en la parte inferior apareciese un botón para ver las siguientes. quizá ahora puedas decirme mejor que hacer
« última modificación: Julio 06, 2010, 18:52:13 pm por ernestmego »
En línea

ernestmego

  • Soporte Técnico
  • Usuario experimentado
  • *
  • Karma: +1/-0
  • Desconectado Desconectado
  • Sexo: Masculino
  • Mensajes: 57
  • Soporte veloz y eficiente
    • Ver Perfil
Re:"Cambiar de hoja"
« Respuesta #3 en: Julio 06, 2010, 19:00:30 pm »

Como te comento mi compañero shakaran, es sencillo usando la función mysql_num_rows para obtener el número total de entradas, y si por ejemplo quieres limitar a las 5 primeras entradas en tu bucle, basta con poner una variable $i que sea un contador y que muestre solo las solicitadas. Aunque de esta forma esta poco optimo ya que se recorrería el bucle para todas las entradas (si tuvieras 3000 sería muy lento) por eso he añadido una variable booleana para que el bucle se detenga una vez pase de las entradas seleccionadas.

El código adaptado sería:
Código: [Seleccionar]
<?php
   $connect 
mysql_connect('localhost''usuario''cotraseña');
   
mysql_select_db('sensei_blog'$connect);
   
$result mysql_query("SELECT entrada, imagen, autor, title FROM blog WHERE seccion='principal' ORDER BY id DESC",  $connect);
   
$total_post mysql_num_rows($result);
   echo 
'<table>';
   
$i 0;
   
$continue true;
   while(
$row mysql_fetch_array($result) && $continue)
   {
      if(
$i >or $i 5)
     {
      echo  
'<tr><td><center>
         <span style="font-weight:bold; font-size:20px; color:#FFFFFF;">'
.$row['title'].'</span>
<br/><br/>
                        <img alt=cabezera src='
.$row['imagen'].'>
</br></br>
                        <div style="color:#FFFFFF;">'
.nl2br($row['entrada']).'</div>
</center> </br> </br>
<p align="right" style="color:#FFFFFF;"> autor: '
.$row['autor'].'</p>
</td></tr>'
;
         }
         else 
$continue false;
   }
   
    echo 
'</table>
    <br />
   Número total de entradas: '
.$total_post;
?>
En línea
Co-Soporte de Quijost
24x7 Rapido, eficiente y profesional

espada

  • Usuario nuevo
  • *
  • Karma: +5/-0
  • Desconectado Desconectado
  • Mensajes: 36
    • Ver Perfil
Re:"Cambiar de hoja"
« Respuesta #4 en: Julio 06, 2010, 19:44:15 pm »

mil gracias ernesto, ya lo entendí, para mostrar luego en otra pagina las 5 siguientes seria modificar "if($i >0 or $i < 5)" por "if($i >5 or $i < 10)" ¿no? Es que me parece que no por que así se bloquearía al principio no mostraría nada... solo me falta eso, como mostrar las 5 siguientes luego el crear los botones creo que me las arreglare
En línea

ernestmego

  • Soporte Técnico
  • Usuario experimentado
  • *
  • Karma: +1/-0
  • Desconectado Desconectado
  • Sexo: Masculino
  • Mensajes: 57
  • Soporte veloz y eficiente
    • Ver Perfil
Re:"Cambiar de hoja"
« Respuesta #5 en: Julio 06, 2010, 21:29:22 pm »

Para mostrar las 5 siguientes tal vez necesitarías tener una variable $page que te dijera el "rango" de páginas a mostrar.

Puedes recibir esta variable por parámetro, por ejemplo tupagina.com?page=2

Y al recibirla hacer que el while muestre solo las entradas entre $page*5 y ($page+1)*5



En línea
Co-Soporte de Quijost
24x7 Rapido, eficiente y profesional

SixLima

  • Loco informático
  • Usuario nuevo
  • *
  • Karma: +1/-0
  • Desconectado Desconectado
  • Sexo: Masculino
  • Mensajes: 2
    • Ver Perfil
    • Push The Button
Re:"Cambiar de hoja"
« Respuesta #6 en: Julio 06, 2010, 23:30:33 pm »

Y por que no pruebas a hacerlo con "LIMIT" en la sentencia SQL?

Código: [Seleccionar]
SELECT * FROM `mi_tabla` LIMIT 60 , 30
Si no recuero mal 60 es el registro por el que empiezas y 30 son los que coges, es decir, cuantas entradas quieres mostrar. Para que esto funcione bien, supongo que por defecto la tabla debe tener ordenadas cronologicamente las entradas del blog.

espada

  • Usuario nuevo
  • *
  • Karma: +5/-0
  • Desconectado Desconectado
  • Mensajes: 36
    • Ver Perfil
Re:"Cambiar de hoja"
« Respuesta #7 en: Julio 09, 2010, 01:42:29 am »

he usado el metodo de SixLima, ya que si parecia mas sencillo aun que no se si tambien e usado ideas de ernestmego total que no funciona... he puesto mediante un if los botones para que se muestren solo en caso de ser necesarios  el codigo es el siguiente.

Código: [Seleccionar]
<?php
   $connect 
mysql_connect('localhost''user''pass');
    
mysql_select_db('sensei_blog'$connect);
    if (
$_get["start"]=="")
$start=1;}
else
{$start=$_get["start"];}
    
$end 5;
   
$result =  mysql_query("SELECT entrada, imagen, autor, title FROM blog WHERE seccion='TEST' ORDER BY id DESC LIMIT $start , $end",  $connect);
   
$total mysql_num_rows($result);
   echo 
'<table>';
   while(
$row mysql_fetch_array($result))
   {
      echo  
'<tr><td><center>
<span style="font-weight:bold; font-size:20px; color:#FFFFFF;">'
.$row['title'].'</span>
<br/><br/>
<img alt=cabezera src='
.$row['imagen'].'>
</br></br>
<div style="color:#FFFFFF;">'
.nl2br($row['entrada']).'</div>
</center></br></br> 
<p align="right" style="color:#FFFFFF;"> autor: '
.$row['autor'].'</p></td></tr>';
   }
    echo 
'</table>';
    if (
$start != 1)
    {
echo '<div style="float:left>';
echo '<a href="http://sensei.quijost.com/?start='.$start += .'">ENTRADAS RECIENTES</a>
</div>'
;
}

if (($start += 5) <= $total)
{
echo '<div style="align:right">';
echo '<a href="http://sensei.quijost.com/?start='.$start -= .'">ENTRADAS ANTERIORES</a>
</div>'
;
}
?>

« última modificación: Julio 09, 2010, 02:18:15 am por espada »
En línea

shakaran

  • Soporte
  • Administrator
  • Usuario profesional
  • *****
  • Karma: +12/-0
  • Desconectado Desconectado
  • Sexo: Masculino
  • Mensajes: 487
  • Un buen soporte lo es todo
    • Ver Perfil
    • Shakaran
Re:"Cambiar de hoja"
« Respuesta #8 en: Julio 09, 2010, 02:12:28 am »

Uff, identa un poco el código y para el echo tan largo que tienes ponlo en varias lineas (ojo pero con un mismo echo).

Yo creo que no te funciona porque estas modificando el $start, pero no sumas nunca nada al $end.
En línea
Ángel Guzmán Maeso
Quijost Founder - Backend Engineer & Main support

espada

  • Usuario nuevo
  • *
  • Karma: +5/-0
  • Desconectado Desconectado
  • Mensajes: 36
    • Ver Perfil
Re:"Cambiar de hoja"
« Respuesta #9 en: Julio 09, 2010, 02:16:47 am »

Ahora lo modifico, en el anterior lo cambie pero en este se paso. El $end no lo modifico por que segun entendi a SixLima es el numero de post que se van a mostrar, siempre quiero que se muestren 5 pero empezando 5 mas tarde. Yo creo que sera mas bien un error en los if, o al pedir el numero total de entradas, pero no se exactamente que es lo que puede fallar.
En línea

shakaran

  • Soporte
  • Administrator
  • Usuario profesional
  • *****
  • Karma: +12/-0
  • Desconectado Desconectado
  • Sexo: Masculino
  • Mensajes: 487
  • Un buen soporte lo es todo
    • Ver Perfil
    • Shakaran
Re:"Cambiar de hoja"
« Respuesta #10 en: Julio 09, 2010, 02:34:14 am »

Si llevas razón, no recordaba como funcionaba el LIMIT (es algo que lo usas un par de veces y luego copias y pegas):

http://php.about.com/od/mysqlcommands/g/Limit_sql.htm

Código: [Seleccionar]
<?php
   $dbh 
mysql_connect('localhost''user''pass');
   
mysql_select_db('sensei_blog'$dbh);
   
$start = (empty($_get["start"]) ? $_REQUEST["start"]);
   
$end 5;

   
$res mysql_query("SELECT entrada, imagen, autor, title FROM blog 
                       WHERE seccion='TEST' ORDER BY id DESC LIMIT 
$start,$end"$dbh);
   
$n mysql_num_rows($res);

   echo 
'<table>';
   while(
$row mysql_fetch_array($res))
   {
      echo 
'<tr>
<td>
<center>
<span style="font-weight:bold; font-size:20px; color:#FFFFFF;">
'
.$row['title'].'
</span>
<br />
<br />
<img alt="cabezera" src="'
.$row['imagen'].'">
<br />
<br />
<div style="color:#FFFFFF;">
'
.nl2br($row['entrada']).'
</div>
</center>
<br />
<br /> 
<p align="right" style="color:#FFFFFF;"> 
autor: '
.$row['autor'].'
</p>
</td>
</tr>'
;
   }
   echo 
'</table>';

   if(
$start 0)
   {
echo '<div style="float:left>
  <a href="?start='
.($start 5).'">ENTRADAS RECIENTES</a>
  </div>'
;
   }
   
   if((
$start 5) <= $total)
   {
echo '<div style="align:right">
     <a href="?start='
.($start 5).'">ENTRADAS ANTERIORES</a>
                        </div>'
;
   }
?>

Hay va el código bien corregido, identando, y con muchas cosas que tenias mal, no haga un $start += 5 que sino estas aumentando en 5 la variable, y hacías unas cosa muy raras. No te hace falta poner el nombre del dominio en los href y los <br> llevan la / al final, no al principio <br /> y bueno mas cosas que por no perder tiempo puedes comparar en los dos pedazos de código.
« última modificación: Julio 09, 2010, 03:02:53 am por shakaran »
En línea
Ángel Guzmán Maeso
Quijost Founder - Backend Engineer & Main support

espada

  • Usuario nuevo
  • *
  • Karma: +5/-0
  • Desconectado Desconectado
  • Mensajes: 36
    • Ver Perfil
Re:"Cambiar de hoja"
« Respuesta #11 en: Julio 09, 2010, 04:47:50 am »

Tras el sufrimiento la recompensa. Ya que estaba puesto aproveche para asignar la sección del foro mediante una variable y así tener que estar pendiente de un solo index y no tener uno por sección.

Código: [Seleccionar]
<?php
   $dbh 
mysql_connect('localhost''usuario''contraseña');
   
mysql_select_db('sensei_blog'$dbh);
   
$start = (empty($_REQUEST["start"]) ? : ($_REQUEST["start"]));
   
$section = (empty($_REQUEST["seccion"]) ? principal : ($_REQUEST["seccion"]));
   
$end 5;

   
$res mysql_query("SELECT entrada, imagen, autor, title FROM blog 
                       WHERE seccion='"
.$section."' ORDER BY id DESC LIMIT ".$start.",".$end.""$dbh
                       or die(
'Error select_blog: '.mysql_error());
   
$n mysql_num_rows($res);

   echo 
'<table>';
   while(
$row mysql_fetch_array($res))
   {
      echo 
'<tr>
            <td>
               <center>
                     <span style="font-weight:bold; font-size:20px; color:#FFFFFF;">
                        '
.$row['title'].'
                     </span>
                     <br />
                     <br />
                     <img alt="cabezera" src="'
.$row['imagen'].'">
                     <br />
                     <br />
                     <div style="color:#FFFFFF;">
                        '
.nl2br($row['entrada']).'
                     </div>
               </center>
               <br />
               <br /> 
               <p align="right" style="color:#FFFFFF;"> 
                  autor: '
.$row['autor'].'
               </p>
            </td>
         </tr>'
;
   }
   echo 
'</table>';

   if(
$start 0)
   {
      echo 
'<div style="float:left">
              <a href="?start='
.($start 5).'">ENTRADAS RECIENTES</a>
           </div>'
;
   }
   
   if((
$start 5) <= $n)
   {
      echo 
'<div style="align:right">
              <a href="?start='
.($start 5).'">ENTRADAS ANTERIORES</a>
                        </div>'
;
   }
?>


Hernesto, SixLima, Shakaran gracias a todos una vez mas veloces y precisos.
Este finde intentare sacar un rato y hacer un tutorial de esto, que una vez lo consigues parece fácil pero he sudado sangre para llegar a esto.
En línea
 

Página generada en 0.093 segundos con 33 consultas.