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:

Quijost.com - Hosting Gratis al alcance de tus manos

Autor Tema: Limitar salida de un campo SQL, y linkear al campo completo.  (Leído 38585 veces)

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

espada

  • Usuario nuevo
  • *
  • Karma: +5/-0
  • Desconectado Desconectado
  • Mensajes: 36
    • Ver Perfil
Limitar salida de un campo SQL, y linkear al campo completo.
« en: Julio 11, 2010, 02:08:34 am »

Otra duda mas que me surge, os cansareis de mi y tanta pregunta jeje espero algún día poder responder yo también...
Bueno yendo al grano, quiero hacer una sección de noticias en mi web y seria estilo:

titulo noticiaresumen de noticia
titulo noticiaresumen de noticia
titulo noticiaresumen de noticia

Pues me gustaría que en el resumen apareciesen unos 50 caracteres o un par de lineas de lo que seria la noticia y a su vez que todo fuese un hiper-vinculo hacia la entrada completa, en su defecto también me parece interesante la idea de que al darle saliese la entrada entera dentro de la misma pagina pero eso debe de ser javascript y no tengo ni idea...

Lo del link, lo había pensado hacer con un _get que en vez seleccionar la sección como ya e echo anteriormente seleccione el titulo de la noticia. lo que me tiene intrigado es lo otro, como limitar la salida del campo.
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #1 en: Julio 11, 2010, 02:12:03 am »

Tienes dos formas de hacerlo:
1 - Por MySQL mediante la función SUBSTRING(): http://dev.mysql.com/doc/refman/5.1/en/string-functions.html#function_substring
2 - Mediante PHP con la función substr: http://php.net/manual/en/function.substr.php
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #2 en: Julio 11, 2010, 02:53:04 am »

mmm he utilizado el metodo mediante SQL y esto es lo que me a salido, me gustaria saber si e metido la pata o estoy por el buen camino.

Código: [Seleccionar]
<?php
   $dbh 
mysql_connect('localhost''user''pass');
   
mysql_select_db('sensei_blog'$dbh);
   
$start = (empty($_REQUEST["start"]) ? : ($_REQUEST["start"]));
   
$section = (empty($_REQUEST["seccion"]) ? principal : ($_REQUEST["seccion"]));
   
$not = (empty($_REQUEST["noticia"]) ? false : ($_REQUEST["noticia"]));
   
$end 5;
if( 
$not == false)
{
   
$res mysql_query("SELECT title, SUBSTRING(entrada,0,100) FROM blog 
                       WHERE seccion='"
.$section."' ORDER BY id DESC LIMIT ".$start.",".$end.""$dbh
                       or die(
'Error select_blog: '.mysql_error());
}
else
{
   
$res mysql_query("SELECT title, entrada FROM blog 
                       WHERE title ='"
.$title."' 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' <a href=/?noticia='.$row['title'].'>
  <table>
<tr>
<td> '
.$row['title'].'</td>
<td>  '
.$row['entrada'].'</td>
</tr>
</table>
</a>'
;
   }

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

« última modificación: Julio 11, 2010, 04:50:03 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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #3 en: Julio 11, 2010, 04:42:43 am »

No te hace falta un   
Código: [Seleccionar]
<?php $not = (empty($_REQUEST["noticia"]) ? false : ($_REQUEST["noticia"]));
if( 
$not == false)

Puedes ponerlo directamente como:
Código: [Seleccionar]
<?php if(!empty($_REQUEST["noticia"]))
Supongo que por lo demás estaría bien, aunque no lo he probado.
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #4 en: Julio 12, 2010, 22:42:06 pm »

No, me temo que no funciona el error debe de estar en la llamada a la base de datos, por que no me muestra la entrada ni con limite ni sin limite. Se te ocurre alguna razón para que esto ocurra?
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #5 en: Julio 13, 2010, 05:17:07 am »

Pon en la primera línea error_reporting(E_ALL); y así puedes ver si es algún error en la sintaxis. El problema lo tendrás en el algoritmo que has pensado.
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #6 en: Julio 13, 2010, 23:09:11 pm »

mmm ahora me devuelve esto:

Notice: Use of undefined constant test - assumed 'test' in /home/sensei/public_html/noticias.php on line 18

Notice: Undefined index: entrada in /home/sensei/public_html/noticias.php on line 42
titulo7    

Notice: Undefined index: entrada in /home/sensei/public_html/noticias.php on line 42
titulo6    

Notice: Undefined index: entrada in /home/sensei/public_html/noticias.php on line 42
titulo5    

Notice: Undefined index: entrada in /home/sensei/public_html/noticias.php on line 42
titulo4    

Notice: Undefined index: entrada in /home/sensei/public_html/noticias.php on line 42
titulo3

La linea 18

Código: [Seleccionar]
$section = (empty($_REQUEST["seccion"]) ? test : ($_REQUEST["seccion"]));

La linea 42

Código: [Seleccionar]
<td>  '.$row['entrada'].'</td>

a ver que es jeje gracias por la ayuda ;)

EDIT:

edito puesto que solucione los errores, el codigo ya mas o menos cuidado es:

Código: [Seleccionar]
<?php
error_reporting
(E_ALL);
   
$dbh mysql_connect('localhost''user''pass');
   
mysql_select_db('sensei_blog'$dbh);
   
$start = (empty($_REQUEST["start"]) ? : ($_REQUEST["start"]));
   
$section = (empty($_REQUEST["seccion"]) ? $section=test : ($_REQUEST["seccion"]));
   
$not = (empty($_REQUEST["noticia"]) ? false : ($_REQUEST["noticia"]));
   
$end 5;
if( 
$not == false)
{
   
$res mysql_query("SELECT title, SUBSTRING(entrada,0,100) AS entrada FROM blog 
                       WHERE seccion='"
.$section."' ORDER BY id DESC LIMIT ".$start.",".$end.""
                       or die(
'Error select_blog: '.mysql_error());
}
else
{
   
$res mysql_query("SELECT title, entrada FROM blog 
                       WHERE title ='"
.$title."' ORDER BY id DESC LIMIT ".$start.",".$end.""
                       or die(
'Error select_blog: '.mysql_error());
}
   
$n mysql_num_rows($res);

   while(
$row mysql_fetch_array($res))
   {
  echo' <a href=/?noticia='.$row['title'].'>
  <table>
<tr>
<td> '
.$row['title'].'</td>
<td>'
.$row['entrada'].'</td>
</tr>
</table>
</a>'
;
   }

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


El AS me dijeron que lo pusiera y navegue, e llegado a la conclusión quizá errónea que lo que hace es exportar ahí la nueva variable, el resultado eliminado. En cualquier caso sigo utilizando mal el SUBSTRING y por mas que e buscado no encuentro la solución, en todos los manuales viene lo mismo, y creo que es lo que hago no entiendo que hago mal. A ver si alguien ve el maldito error.
Prefiero hacerlo con SQL aun que sea quizá algo mas difícil o me este costando mas trabajo ya que mediante php es menos eficiente ya que recoge la cadena entera del sql para luego solo utilizar parte.
« última modificación: Julio 14, 2010, 03:14:19 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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #7 en: Julio 14, 2010, 07:28:47 am »

Es muy sencillo, tu consulta a la base de datos es con title,  SUBSTRING(entrada,0,100), por lo que para extraer ese campo debes utilizar

$row['title']

$row['SUBSTRING(entrada,0,100)']

En teoria lo del AS (crear un alias) debería funcionar, pero yo no lo suelo usar y me da que por alguna razon, cuando PHP extrae los campos, no lo hace bien y no coge los alias en el array (al menos con mysql_fetch_array).

Prueba eso y nos dices a ver que tal.
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #8 en: Julio 14, 2010, 15:00:10 pm »

Modificando el row y poniendo el que me has dicho también deja de salir el error pero sigue sin mostrarse el campo...
No es un error en el nombre de la llamada puesto que eliminando el SUBSTRING funciona por lo que vemos esto parece una misión imposible no fastidies xD

por si sirve de algo dejo la direcion en la que esta puesto el codigo:
http://sensei.quijost.com/noticias.php
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #9 en: Julio 14, 2010, 15:06:55 pm »

Me parece que no es misión imposible. Si te fijas, en el if tienes el substring para la consulta, pero en el else, no esta como tal, luego para extraer el dato sera de una manera o otra según donde se meta el flujo del programa.
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #10 en: Julio 15, 2010, 04:27:52 am »

Bueno, sude sangre pero hice el programa entero de nuevo, FUNCIONA!!! pero... jeje siempre hay un pero nunca sale todo bien en este caso es la parte del else, en ella mi intención es que aparezca únicamente la noticia en la que se a pinchado para verla entera pero no funciona.

Código: [Seleccionar]
<?php
   $dbh 
mysql_connect('localhost''user''pass');
   
mysql_select_db('sensei_blog'$dbh);
   
$start = (empty($_REQUEST["start"]) ? : ($_REQUEST["start"]));
   
$section = (empty($_REQUEST["seccion"]) ? test : ($_REQUEST["seccion"]));
   
$post = (empty($_REQUEST["entrada"]) ? false : ($_REQUEST["entrada"]));
   
$end 5;
   
   if(
$post == false){
  $res mysql_query("SELECT entrada, 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);
          while(
$row mysql_fetch_array($res))
          {
  echo'<div style="color:white;">
<a href="?entrada='
.$row['title'].'">
  <table>
   <tr>
   <td>'
.$row['title'].' </td>
   <td>'
.nl2br(substr($row['entrada'],0,100)).'</td>
   </tr>
   </table>
</a>
</div>'
;
     }
 }
   else {
      $res mysql_query("SELECT entrada, title, autor FROM blog 
                       WHERE entrada='"
.$post."' ORDER BY id DESC LIMIT ".$start.",".$end.""$dbh
                       or die(
'Error select_blog: '.mysql_error());
         
$n mysql_num_rows($res); 
          while(
$row mysql_fetch_array($res))
          {
  echo'
<div align="center" style="color:white;">
<span style="font-size:20pt;font-weight:bold;">'
.$row['title'].'</span>
<br/>
<br/>
<div>'
.$row['entrada'].'</div>
</div>
  <span align="right" style="color:white;>'
.$row['autor'].'</span>';
  }
  }
if($start 0)
   {
      echo 
'<div align="left">
              <a href="?start='
.($start 5).'">ENTRADAS RECIENTES</a>
           </div>'
;
   }
   
   if((
$start 5) <= $n)
   {
      echo 
'<div align="rigth">
              <a href="?start='
.($start 5).'">ENTRADAS ANTERIORES</a>
                        </div>'
;
   }
?>


Me decidí a hacerlo mediante php en vez SQL para evitarme el error. En cualquier caso que opináis del método, ¿lo hubieseis hecho de forma distinta? Y sobre el error en la segunda pagina, ¿a que se debe? ¿Alguna idea?

P.D: como noto la experiencia a la hora de escribir el código, no tengo mucha aun pero la fluidez que he ganado en este tiempo me resulta increíble jeje
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #11 en: Julio 15, 2010, 17:57:18 pm »

De nuevo, puedes ahorrarte el if($post == false) poniendo la condición en el mismo if. En el else, te esta pasando que si es vacia la variable $post, entonces la consulta se hará pidiento un dato vacio.
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:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #12 en: Julio 16, 2010, 02:00:12 am »

no, no es cuando esta vacia. mira

Código: [Seleccionar]
<a href="?entrada='.$row['title'].'"> ahi el $post toma el valor del titulo ¿no?

Como te dije anteriormente no fui capaz de sustituir la variable por lo que me dijiste... no se que hice mal pero me daba error.
En línea

~Zant Corporation~

  • Usuario nuevo
  • *
  • Karma: +0/-0
  • Desconectado Desconectado
  • Sexo: Masculino
  • Mensajes: 7
    • Ver Perfil
Re:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #13 en: Julio 16, 2010, 02:01:36 am »

Hace tiempo vi una versión de meneame.net adaptada a para el IPhone y que funciona de manera automática, tal vez te pueda servir como ejemplo.

Demo: http://www.imeneame.net/
Descarga: http://www.anieto2k.com/downloads/mirror.php?id=98

O también hay una forma de crear un widget para Google Buzz y desde ahí redactar o compartir noticias.
http://www.buzzcounter.net/

Como ves te ofrezco soluciones sencillas, porque lamentablemente estoy aprendiendo Javascript y PHP, y todavía sé lo básico.

Saludos.
En línea

espada

  • Usuario nuevo
  • *
  • Karma: +5/-0
  • Desconectado Desconectado
  • Mensajes: 36
    • Ver Perfil
Re:Limitar salida de un campo SQL, y linkear al campo completo.
« Respuesta #14 en: Julio 16, 2010, 03:53:19 am »

Zant gracias, pero me pierdo en ese código y no saco nada en claro xD yo estoy empezando también y en cuanto se complica un poco el tema me resulta imposible seguirlo.

Ya solucione el problema, al parecer me faltaba un ; y tenia mal alguna cosita mas. Con ayuda de un amigo mediante Gtalk conseguí arreglarlo.

Código: [Seleccionar]
<?php
   $dbh 
mysql_connect('localhost''user''pass');
   
mysql_select_db('sensei_blog'$dbh);
   
$start = (empty($_REQUEST["start"]) ? : ($_REQUEST["start"]));
   
$section = (empty($_REQUEST["seccion"]) ? $section="test" : ($_REQUEST["seccion"]));
   
$post = (empty($_REQUEST["entrada"]) ? false : ($_REQUEST["entrada"]));
   
$end 5;
   
   if(
$post == false){
  $res mysql_query("SELECT entrada, 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);
          while(
$row mysql_fetch_array($res))
          {
  echo'<div>
  <a href="?entrada='
.$row['title'].'">
  <table style="color:white;">
   <tr>
   <td style="font:20pt bold;" >'
.$row['title'].' </td>
   <td style="font:12pt"><br/>'
.nl2br(substr($row['entrada'],0,100)).'</td>
   </tr>
   </table>
   </a>
   </div>'
;
     }
 }
   else {
     $res mysql_query("SELECT entrada, title, autor FROM blog 
WHERE title='"
.$post."'") or die('Error select_blog: '.mysql_error());
if (mysql_num_rows($res) == 1){       
$row mysql_fetch_array($res);
echo'<div align="center" style="color:white;">
<span style="font:20pt bold;">'
.$row['title'].'</span>
<br/>
<br/>
<div>'
.nl2br($row['entrada']).'</div>
</div>
<span align="right" style="color:white;">'
.$row['autor'].'</span>';
}else{
echo "No se encuentra esta una noticia con este titulo";
}
  }
  
if($start 0)
   {
      echo 
'<div align="left">
              <a href="?start='
.($start 5).'">ENTRADAS RECIENTES</a>
           </div>'
;
   }
   
   if((
$start 5) <= $n)
   {
      echo 
'<div align="right">
              <a href="?start='
.($start 5).'">ENTRADAS ANTERIORES</a>
                        </div>'
;
   }
?>

También e añadido un comprobante para en caso de que no exista la noticia salta un mensaje de error.
Quizá en estos días lo modifique y muestre las entradas mediante el id, me a comentado mi amigo que seria mejor para ahorrarme posibles problemas con los caracteres especiales.

Por fin alcance la solución jeje por fin!
En línea
 

Página generada en 0.215 segundos con 33 consultas.