Quijost
Webmaster => Desarrollo Web => Mensaje iniciado por: espada 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 noticia | resumen de noticia |
titulo noticia | resumen de noticia |
titulo noticia | resumen 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.
-
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
-
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.
<?php
$dbh = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('sensei_blog', $dbh);
$start = (empty($_REQUEST["start"]) ? 0 : ($_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>';
}
?>
-
No te hace falta un
<?php $not = (empty($_REQUEST["noticia"]) ? false : ($_REQUEST["noticia"]));
if( $not == false)
Puedes ponerlo directamente como:
<?php if(!empty($_REQUEST["noticia"]))
Supongo que por lo demás estaría bien, aunque no lo he probado.
-
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?
-
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.
-
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
$section = (empty($_REQUEST["seccion"]) ? test : ($_REQUEST["seccion"]));
La linea 42
<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:
<?php
error_reporting(E_ALL);
$dbh = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('sensei_blog', $dbh);
$start = (empty($_REQUEST["start"]) ? 0 : ($_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.
-
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.
-
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
-
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.
-
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.
<?php
$dbh = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('sensei_blog', $dbh);
$start = (empty($_REQUEST["start"]) ? 0 : ($_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
-
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.
-
no, no es cuando esta vacia. mira
<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.
-
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/ (http://www.imeneame.net/)
Descarga: http://www.anieto2k.com/downloads/mirror.php?id=98 (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/ (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.
-
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.
<?php
$dbh = mysql_connect('localhost', 'user', 'pass');
mysql_select_db('sensei_blog', $dbh);
$start = (empty($_REQUEST["start"]) ? 0 : ($_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!