2011-08-07 10 views
8

Tengo una página que muestra varios elementos incluso si el ID de la base de datos no existe o fue eliminado (lo que arroja todo tipo de errores desagradables junto con los motores de búsqueda que continúan enumerar páginas inexistentes).Problema de redirección de página PHP - No se puede modificar la información del encabezado

¿Se puede modificar la primera parte del código de la página que se muestra a continuación para enviar un 404 (o al menos a projecterror.php que tiene encabezados 404) si $ id no existe? ¡Muchas gracias!

<?php 
include_once("includes/linkmysql.php"); 
$adda=$_GET['a']; 
$cont=$_GET['c']; 
$select="SELECT * FROM projects where id='$id'"; 
$qselect = mysql_query($select); 
while ($row = mysql_fetch_array($qselect)) { 

La siguiente modificación tan amablemente sugerido por Matt Wilson como resultado de una observación original de Vivek Goel resultados en las entradas válidas que muestran la página correctamente, pero páginas que no existen se muestran los errores por debajo de este código modificado:

<?php 
include_once("includes/linkmysql.php"); 
$adda=$_GET['a']; 
$cont=$_GET['c']; 
$select="SELECT * FROM projects where id='$id'"; 
$qselect = mysql_query($select); 
if(mysql_num_rows($qselect) === 0) 
{ 
    header("HTTP/1.1 301 Moved Permanently"); 
    header('Location: http://examplesite.domain/errorpage') ; 
    exit; 
} 
while ($row = mysql_fetch_array($qselect)) { 

errores resultantes de las modificaciones anteriores:

Warning: Cannot modify header information - headers already sent by (output started at /home/website/public_html/header1.php:14) in /home/website/public_html/header1.php on line 22 
Warning: Cannot modify header information - headers already sent by (output started at /home/website/public_html/header1.php:14) in /home/website/public_html/header1.php on line 23 Lines 22 and 23 are the two header lines in your example above 

Líneas 22 una nd 23 son las dos líneas de cabecera como a continuación:

header("HTTP/1.1 301 Moved Permanently"); 
header('Location: http://examplesite.domain/errorpage') ; 

Respuesta

25

tengo solución mucho más fácil para usted - es simple! Sólo tiene que añadir este comando en el comienzo mismo de la fuente de php:

ob_start(); 

Esto iniciará amortiguar la salida, de modo que nada es realmente salida hasta que termina el script PHP (o hasta que vaciar el búfer de forma manual) - y tampoco se envían encabezados hasta ese momento! Así que no es necesario reorganizar el código, sólo tiene que añadir esta línea en el comienzo de su código y eso es todo :-)

+1

Gran trabajo - esto funcionó exactamente como esperaba, ¡muchas gracias! – JoeW

+1

¡Funcionó perfectamente !. ¡Gracias! –

+1

¡Gran solución! – Newbyman

2

antes de enviar cualquier cosa a ver (texto en el navegador). compruebe si su modelo que si id es válido o no. Si el ID no es válido redirección a su página de error

header("HTTP/1.1 301 Moved Permanently"); 
header('Location: http://examplesite.domain/errorpage') ; 
+0

va a enviar un texto antes de poner cabecera. esto vendrá antes de enviar cualquier vista. (cualquier cosa al navegador) –

+0

¿Dónde está el texto? No puedo resolver esto ... – JoeW

+0

¿Es el código de tu página completa? o código parcial –

0

Ningún contenido debe ser enviado al navegador antes de utilizar php header() redirección . Puede intentar la redirección de JavaScript si los encabezados ya han sido enviados.

if(mysql_num_rows($qselect) === 0) 
{ 
    echo "<script type='text/javascript'>window.location.href='{http://examplesite.domain/errorpage}'</script>"; 
    exit; 
} 

Pero no estoy seguro de redirecciones JavaScript son los motores de búsqueda

Cuestiones relacionadas