Foros del Web » Programando para Internet » PHP »

Condicionar la ejecucion de un header entre varios

Estas en el tema de Condicionar la ejecucion de un header entre varios en el foro de PHP en Foros del Web. que tal amigos, el problema que tengo es el siguiente: tengo mi servidor linux, y mi aplicacion con php, necesito redireccionar mis paginas web dependiendo ...
  #1 (permalink)  
Antiguo 13/08/2004, 10:54
 
Fecha de Ingreso: enero-2004
Ubicación: This Planet
Mensajes: 46
Antigüedad: 13 años, 11 meses
Puntos: 0
Condicionar la ejecucion de un header entre varios

que tal amigos, el problema que tengo es el siguiente:

tengo mi servidor linux, y mi aplicacion con php,

necesito redireccionar mis paginas web dependiendo el resultado de la consulta a mi base de datos por ejemplo:

si el usuario es valido header("location: Panel_Principal.php") o sino
header("Location: Index.html");

el problema es que en linux no se ve afectado (al parecer) por la modificacion de la linea output_buffered=On el cual me permite enviar header en cualquier parte de mi codigo, el mensaje de error me indica que debo colocar el header al principio de mi pagina, pero si sin dos posibles redireccionamientos como le indico cual de los dos se redireccionara.

por favor si pueden ayudarme con este probleMITA, se los agradezco.

ojo el servidor es LINUX
__________________
:cool: Hagas lo que hagas, que sea eficiente :arriba:
  #2 (permalink)  
Antiguo 13/08/2004, 11:53
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm bueno .. es que deberías pensar bien como trabaja PHP antes de justificar el uso del control del buffer de PHP (bajo esa directiva o bien ob_start() y funciones afines ..).

Si tu tienes un cierto script que lo que hará es redireccionar en sí ante tal condicion .. NOOOO necesitas nada más de HTML en ese script .. de hecho si te fijas como funciona header() .. lo que hace es enviar cabeceras al cliente (navegador) y .. esas cabeceras se envian y las ejecuta tu navegador -antes- de todo el HTML restante que le puedas enviar .. por ende .. no tiene razón de ser usar HTML (o salida en general) en ese tipo de script.

En otros casos tal vez hagas cosas como

if (condicion ...){
header ("Location: tal_sitio.tal");
}

Y si no se cumple .. tal vez quieras hacer algo así como dar un mensaje ahí mismo (salida). .. Ejemplo:

Código PHP:
<html>
<head>
</head>
<body>
<?
if (condicion){
header("location: tal_sitio.tal");
exit;
} else {
echo 
"blabaabl";
}
?>
</body>
</html>


Eso como veras ... no es "correcto" cara a un envio de cabeceras HTTP: header(). Lo correcto sería:

Código PHP:
<?
if (condicion){
header("location: tal_sitio.tal");
exit;
}
?>
<html>
<head>
</head>
<body>
bablabla
</body>
</html>
En estructuras de sitios tipo "web modulares" .. eso suele dar problemas por qué armas tu HTML por encima y debajo del tipico Switch() que decide que escript hay que cargar o no ... y a su vez ese tipo de script puede redireccionar o no .. Por ejemplo los scripts integros de proceso (que no dan salida .. solo procesan y redireccionan).

Para estos casos .. tan sólo se trata de separar tu proceso (script) del que muestra algo. Es decir, si tu tienes una sección tipo:

index.php?seccion=tal .. y estás en el "proceso" .. no llames a tu index.php?seccion=tal&accion=hacer_Algo donde llamaraias a tu script de proceso bajo un "include" de ese switch() o similar .. llamalo directamente y redirecciona al final de tu proceso hacia tu index.php?seccion=tal o la que corresponda que armará la página que corresponda.

Un saludo,

Última edición por Cluster; 13/08/2004 a las 12:00
  #3 (permalink)  
Antiguo 16/08/2004, 08:07
 
Fecha de Ingreso: enero-2004
Ubicación: This Planet
Mensajes: 46
Antigüedad: 13 años, 11 meses
Puntos: 0
especificamente lo que quiero hacer es condicionar el direccionamiento a la pagina de validacion de usuario, la pagina principal llama a una segunda que procesa la session del usuario, si el usuario es valido hace un Header("location: Panel.html")

si el usuario es invalido hace un header("location: index.html");
__________________
:cool: Hagas lo que hagas, que sea eficiente :arriba:
  #4 (permalink)  
Antiguo 16/08/2004, 08:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pero .. ¿que no sabes hacer? .. ¿que condición se ha de cumplir para hacer dicho rediccionamiento .... ? ...

Un saludo,
  #5 (permalink)  
Antiguo 17/08/2004, 07:54
 
Fecha de Ingreso: enero-2004
Ubicación: This Planet
Mensajes: 46
Antigüedad: 13 años, 11 meses
Puntos: 0
bien este es mi codigo fuente que procesa la session del usuario

<?php
session_start();
$inicio=0;

if ($opcion=='I') //si la opcion es iniciar session
{
//realiza la conexion a la base de datos
include("conexion.php");
$conect_id=Conectarse("retailweb");

$consultar=ifx_query("select * from Usuario where login='$login' and password='$password'", $conect_id);

$nrovisitas=$reg["nroVisitas"];
$nrovisitas = $nrovisitas + 1;
$fecha=date('d/m/Y');

//si el usuario existe y es valido
if($reg=ifx_fetch_row($consultar))
{
$sess_id =session_id();
if (!$_SESSION['login'] || !$_SESSION['password'])
{ $_SESSION['id']=$sess_id;
$_SESSION['login']=$login;
}
header("Location: ../Panel_Principal.htm");
exit;

} //fin del if (ifx_num_rows($consultar)==1)
else
{ $error= "Usuario Invalido, los datos de entrada no concuerdan con ningun usuario registrado, verifique su login y password y vuelva a intentarlo";
$pagina="index.htm";
$contenido="Pagina Principal";
$titulo="Usuario Invalido";
header ("Location: ../index.htm?error=invalido");
exit;
}

}//fin del if(opcion==1)
else //cerrar session
{
session_start();
$_SESSION = array();
session_destroy();
header("Location: ../index.htm");
exit;
}
?>


y este es mi archivo conexion.php

<?php
function Conectarse($basedatos)
{
switch($basedatos)
{
case "retailweb":
if (!$conect_id=ifx_connect("retailweb"))
{
echo "Error conectando a la base de datos.";
exit();
}
return $conect_id;
break;
case "retail":
if (!$conect_id=ifx_connect("retail","informix","info rmix"))
{
echo "Error conectando a la base de datos.";
exit();
}
return $conect_id;
break;
}
}
?>

y este es el error que me arroja el servidor:
Warning: Cannot add header information - headers already sent by (output started at /var/www/html/retailweb/librerias/conexion.php:25) in /var/www/html/retailweb/librerias/procesarSession.php on line 28

ojo: el servidor esta montado en linux por eso no se capturan los parametros con el POST o el GET.

si encuentran el error agradeceria me indiquen como solucionarlo
__________________
:cool: Hagas lo que hagas, que sea eficiente :arriba:

Última edición por david-SM; 17/08/2004 a las 07:55
  #6 (permalink)  
Antiguo 17/08/2004, 08:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Warning: Cannot add header information - headers already sent by (output started at /var/www/html/retailweb/librerias/conexion.php:25) in /var/www/html/retailweb/librerias/procesarSession.php on line 28
Tenías que haber puesto este mensaje de error al principio .. (fijate los días que han pasado) ...

El error te dice que en la línea 25 de conexion.php tienes una salida al cliente (navegador) .. Puede ser un simple espacio o salto de línea al final del ?> .. o al principio <? ..

Cuando usas "header()/session_start()/setcookie()" NO puede existir nada de salida antes al navegador (cliente mejor dicho) .. entiendase "salida" a los mencionados espacios, saltos de línea (antes o despues de un <? o ?> ....) o de echo "algo" .. o de HTML/javacript/etc directo ..

Un saludo,
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 16:50.