2011-12-31 14 views
8

Estoy trabajando en un proyecto y estoy obligado a ejecutar mi programa en el servidor web de otra persona. Es una página de inicio de sesión bastante simple con la que estoy teniendo el problema. El programa funciona correctamente si lo ejecuto a través de mi host local a través de WAMP. El problema que tengo es que la parte de redireccionamiento no funciona correctamente, valida al usuario e inicia una sesión, pero cuando llega a la redirección no sucede nada.Alternativa al "encabezado" para redirecciones en PHP

Estoy haciendo algo mal con mi sintaxis, lo que creo que es muy poco probable ya que funciona correctamente a través de mi host local. O, como alternativa, estoy pensando que el servidor no tiene esa función (no estoy seguro si es posible escoger y elegir qué módulos admite su servidor, aunque estoy seguro de que es factible).

No sé si es importante pero están usando "cpanel", que es donde puedo acceder a los archivos y todo en el mismo directorio, así que si alguien me puede decir dónde estoy equivocado o sugerir una alternativa a redireccionando a través del "encabezado" cualquier ayuda sería muy apreciada. Miré alrededor, pero parece que "encabezado" es el caballo de batalla estándar.

Aquí está el código que tengo:

if((!empty($_POST['username'])) && (!empty($_POST['password']))) 
{ 
// username and password sent from Form 
$myusername = $_POST['username']; 
$mypassword = $_POST['password']; 


$sql="SELECT UserName FROM User WHERE UserName='$myusername' and  Password='$mypassword'"; 

$result=mysql_query($sql); 

$row=mysql_fetch_array($result); 
//$active=$row['active']; 
$count=mysql_num_rows($result); 

// If result matched $myusername and $mypassword, table row must be 1 row 
if($count==1) 
{ 
    echo "we made if to the if"; 
    session_start(); 
    session_register("myusername"); 
    $_SESSION['login_user']=$myusername; 
    echo "right b4 the re-direct"; 
    header("location: UI.php"); 
      exit; 
} 
else 
    echo "Your user name/password was not correct pleast TRY AGAIN!!!"; 

} 

Actualización: En respuesta a las declaraciones acerca de los ecos habría problema posible gracias a que yo estoy procesando mi forma en el mismo archivo y el uso de echo $ _SERVER [ 'PHP_SELF ']

+1

¿Se han activado los informes de errores? ¿Estás 100% seguro de que se cumple la condición y se envió el encabezado? –

+0

No puede hacer que la página produzca nada antes de la llamada de encabezado. Sus instrucciones de depuración están impidiendo que la redirección funcione. – JJJ

+0

Sí, traté de eliminarlos, pero todavía no redirige correctamente – cpowel2

Respuesta

1

De the docs:

Recuerde que header() debe ser llamado antes de enviar cualquier salida real, ya sea mediante etiquetas HTML normales, líneas en blanco en un archivo, o de PHP.

Su echo hace que la redirección falle, al igual que cualquier otra salida enviada antes del encabezado.

0

Redirigir por encabezados es ilegal si se ha recibido algún contenido. Saque todos los echo y debería funcionar. Si hace desea que haya un mensaje que se muestra al usuario antes de la redirección, es probable que tenga que hacerlo con JavaScript a través del location.href.

1

No puede establecer encabezados después de enviar texto, por lo tanto, mueva la llamada header antes de las declaraciones echo (bien en su caso) o use output buffering.

37

puedo utilizar esta función para la redirección ...

que trabaja en toda situations..even si cabeceras ya están sent..or incluso javascript está deshabilitado ..

function redirect($url) 
{ 
    if (!headers_sent()) 
    {  
     header('Location: '.$url); 
     exit; 
     } 
    else 
     { 
     echo '<script type="text/javascript">'; 
     echo 'window.location.href="'.$url.'";'; 
     echo '</script>'; 
     echo '<noscript>'; 
     echo '<meta http-equiv="refresh" content="0;url='.$url.'" />'; 
     echo '</noscript>'; exit; 
    } 
} 
+2

esto es algo bueno ... – Laurent

+0

¡¡Trabaja perfectamente thx !!! –

+0

Genial. trabajar como un encanto. – amilaishere

0

Es probable que ya tiene envió contenido al navegador antes de que se envíe el encabezado php. Esto puede ser simplemente un \ n después de una etiqueta de cierre php (?>)

Encontrar el lugar donde se genera la salida no deseada puede ser difícil en proyectos más grandes o largas líneas de clases que se extienden entre sí. para encontrar el problema que puede hacer esto:

error_reporting(E_ALL); 
ini_set("display_errors", 1); 
header("Location: https://mydomain.com/myLoginAdress/"); 
die(); 

informe de errores estricto lanzará línea y el archivo de la salida.

2

Al utilizar el código de abajo que redirigir la página

$page = $_SERVER['REQUEST_URI']; 
echo '<script type="text/javascript">'; 
echo 'window.location.href="'.$page.'";'; 
echo '</script>'; 
0
echo "<script>window.location.href='yourPage.php'</script>";