Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Paginas Fantasmas php-mysql ???

Estas en el tema de Paginas Fantasmas php-mysql ??? en el foro de Mysql en Foros del Web. Buenas tardes comunidad ... He estado buscando en el foro, pero no encuentro nada parecido (o no se como buscarlo). A ver si me explico, ...
  #1 (permalink)  
Antiguo 10/05/2011, 08:20
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
Paginas Fantasmas php-mysql ???

Buenas tardes comunidad ...
He estado buscando en el foro, pero no encuentro nada parecido (o no se como buscarlo).
A ver si me explico, mediante una base de datos mysql genero noticias que paso en forma de resumen a una pagina llamada "noticias".
Desde aquí utilizo un enlace del tipo <a href=noticias.php?id=".$row['id']." que toma la variable "id" de la bbdd y de esta forma identifica cada noticia por separado y la remite (GET ID) a una nueva pagina donde se puede ver la noticia completa.

A medida que agrego noticias, agrego variables, y esto queda así:

http://xxxxx.com/noticias.php?id=1
http://xxxxx.com/noticias.php?id=2
http://xxxxx.com/noticias.php?id=3
http://xxxxx.com/noticias.php?id=4

Ahora, de repente, las herramientas de webmaster de google me avisan de una pagina sin titulo.
Reviso y descubro que si me invento numeritos despues del ?id= de la url, por ejemplo http://xxxxx.com/noticias.php?id=123456
me aparece efectivamente una pagina sin contenido que google indexa.

(los datos para llenar esa pagina no existen en mysql, en la tabla no hay una entrada con el id 123456 y no deberia generarse sola, o si ?).

He borrado y vuelto a crear la tabla "noticias" de la bbdd, y he cambiado la variable "id" de INT (auto_increment) a VARCHAR para ponerla manualmente y la cosa sigue igual.

Este es el PHP de las paginas que se generan "solitas" (noticia completa).

El codigo del titulo y metas....

<?php
include('conectar.php');
mysql_select_db ("xxxxxxxx", $link);
$id = $_GET['id'];
$result = mysql_query ("SELECT * FROM `noticias` WHERE id='$id'", $link);
while ($row = mysql_fetch_array($result))
{
$id= $row['id'];
$title= $row['title'];
$description= $row['description'];
$keywords= $row['keywords'];
echo "<title>".$title."</title>";
echo "<meta name='description' content='".$description."'>";
echo "<meta name='keywords' content='".$keywords."'>";
}
mysql_close($link);
?>

El codigo del contenido...

<?php
include('conectar.php');
mysql_select_db ("xxxxxxxx", $link);
$id = $_GET['id'];
$result = mysql_query ("SELECT * FROM `noticias` WHERE id='$id'", $link);
while ($row = mysql_fetch_array($result))
{
$id= $row['id'];
$titulo= $row['titulo'];
$texto= $row['texto'];
$fecha= $row['fecha'];
echo "<h1 class='textobase'>".$titulo."</h1>";
echo "<div class='textobase'><span class='enlaceinferior'>Publicado el ".$fecha."</span></div>";
echo "<div><img src='".$row['foto']."' alt='".$row['foto-alt']."' width='250' height='167' hspace='4' align='right'>".$texto."</div>";
}
mysql_close($link);
?>

Alguien sabe que puede estar pasando ?
Gracias y un saludo
  #2 (permalink)  
Antiguo 10/05/2011, 08:52
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Paginas Fantasmas php-mysql ???

Vamos por partes: Generar o no generar páginas no tiene ninguna relación con MySQL, es un asunto de la aplicación en PHP, no de MyQSL o de la base de datos. En todo caso lo deberías postear en el foro de PHP y no aquí. Allí conocen mejor estos temas.
Por otro lado, y anticipándome al asunto, la condición del while parece no estar bien escrita y le permite ejecutarse al menos una vez, por lo que en realidad tengas o no datos en la tabla, la página se te va a generar a partir de los "echo" del código.
¿Por qué no verificas si la consulta devolvió datos antes de usar el while para recorrerla?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 10/05/2011 a las 09:29
  #3 (permalink)  
Antiguo 10/05/2011, 09:11
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
Respuesta: Paginas Fantasmas php-mysql ???

Gracias gnzsoloyo, al menos ya se que el problema no está en la base de datos.
Vuelvo a abrir el tema en php, a ver que tal.
  #4 (permalink)  
Antiguo 10/05/2011, 13:21
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 21 años, 5 meses
Puntos: 6
Respuesta: Paginas Fantasmas php-mysql ???

Cita:
Iniciado por nintendito Ver Mensaje
Gracias gnzsoloyo, al menos ya se que el problema no está en la base de datos.
Vuelvo a abrir el tema en php, a ver que tal.
pues ni esta en PHP ni esta en MySQL

1º de todo, porq un ID no exista no significa que la pagina no deba de cargar, porq la pagina si existe se llama noticias.php, por lo que volvemos a tu pregunta, NO ES NINGUN ERROR

¿como resolverlo? FACIL
pero esto ni es PHP ni es MySQL, simplemente añade una condicion en tu codigo PHP que si la noticia no existe o no hay resultados o lo que quieras hacer, te ponga un error 404 en la cabecera, y asi google no te lo indexara, o si la idea de error 404 no te gusta, añades un metatag NO INDEX y puntoo pelota
  #5 (permalink)  
Antiguo 10/05/2011, 13:24
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Paginas Fantasmas php-mysql ???

...O sea que en definitiva es un error en el script. Debería haber controlado esa situación como lo indicas...
Interesante...

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 11/05/2011, 04:11
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
Respuesta: Paginas Fantasmas php-mysql ???

Solucionado.

$result = mysql_query ("SELECT * FROM `noticias` WHERE id='$id'", $link);
$num_rows = mysql_num_rows($result);
if (mysql_num_rows($result) < 1){
header("Location: http://www.blablabla.com/404page.html");
}
else
{

Muchas gracias por todo
  #7 (permalink)  
Antiguo 11/05/2011, 05:26
 
Fecha de Ingreso: noviembre-2002
Mensajes: 746
Antigüedad: 21 años, 5 meses
Puntos: 6
Respuesta: Paginas Fantasmas php-mysql ???

Cita:
Iniciado por nintendito Ver Mensaje
Solucionado.

$result = mysql_query ("SELECT * FROM `noticias` WHERE id='$id'", $link);
$num_rows = mysql_num_rows($result);
if (mysql_num_rows($result) < 1){
header("Location: http://www.blablabla.com/404page.html");
}
else
{

Muchas gracias por todo
la idea es esa, pero yo personalmente no te lo recomiendo asi, ya que lo que estas haciendo NO ES dar un error404 a esa url sino redireccionar a una pagina de error.

la idea es similar, pero cambiando el header por include..
Código:
include "404page.php";exit;
y recuerda, que para que el invento funcione la pagina de error 404 debe empezar asi:
Código:
<?php header("HTTP/1.1 404 Not Found");?>
y aqui el html a tu gusto
esto si es un verdadero error 404.


eso siguiendo tu ejemplo aunque logicamente lo mas facil es, no incluir una pagina de error personalizada y colgar el cartel de 404 sin mas en la pagina, osea
Código:
$result = mysql_query ("SELECT * FROM `noticias` WHERE id='$id'", $link);
$num_rows = mysql_num_rows($result);
if (mysql_num_rows($result) < 1){
header("HTTP/1.1 404 Not Found");
}
else
{
pero recuerda que este codigo debe ser lo primero de todo en el archivo, antes que cualquier etiqueta html

Última edición por suntus; 11/05/2011 a las 05:34
  #8 (permalink)  
Antiguo 11/05/2011, 06:15
 
Fecha de Ingreso: abril-2011
Mensajes: 37
Antigüedad: 13 años
Puntos: 2
Respuesta: Paginas Fantasmas php-mysql ???

Me gusta, además es cierto, ahora directamente va a la web 404 (antes se notaba la redirección), aunque en lugar de 404.php he puesto 404.html directamente en include y listo (ya que mi 404 es punto html).

<?php
include('conectar.php');
mysql_select_db ("xxxxxxxxx", $link);
$id = $_GET['id'];
$result = mysql_query ("SELECT * FROM `noticias` WHERE id='$id'", $link);
$num_rows = mysql_num_rows($result);
if (mysql_num_rows($result) < 1){
include "404page.html";exit;
}
else
{

De verdad, muchas gracias por todo

Etiquetas: php-mysql
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 23:35.