Foros del Web » Programando para Internet » PHP »

PHP funcion header

Estas en el tema de PHP funcion header en el foro de PHP en Foros del Web. Me gustaria que alguien me iluminase porque estoy super rallao con este tema. Tengo lo siguiente y no me funciona. ¿Hay que tocar algo en ...
  #1 (permalink)  
Antiguo 16/12/2008, 10:43
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
PHP funcion header

Me gustaria que alguien me iluminase porque estoy super rallao con este tema.

Tengo lo siguiente y no me funciona. ¿Hay que tocar algo en php.ini?
El tema es que siempre me redirige a inicio.php. Quiero que dependiendo de si se cumple una u otra condicion me redirija a uno u otro sitio.

Código:
<?php

  header('Location: inicio.php');

  if (condicion1)

    {
            header("Location: errorlogin.htm");
           
    }   			  

    else
           {
              header( "Location: inicio.php" ); 
           }


?>
Muchas Gracias ¡¡¡
  #2 (permalink)  
Antiguo 16/12/2008, 11:18
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

Pues te redirecciona a inicio ya que tu le estas indicando, si te fijas la primera linea tienes el header() eso causa que ya lo demas no se ejecute.

Saludos.
  #3 (permalink)  
Antiguo 16/12/2008, 11:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: PHP funcion header



pues quita el primer header ...


osea (si leyeras el manual) dice, que al enviar la cabecera, se detiene el script... y no mas!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 16/12/2008, 11:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

De hecho no se detiene el script jeje, por eso es recomendable usar el exit() despues del header ya que no hay una garantia de hasta donde se va a ejecutar el codigo.

Saludos.
  #5 (permalink)  
Antiguo 16/12/2008, 14:52
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

Cita:
Iniciado por GatorV Ver Mensaje
De hecho no se detiene el script jeje, por eso es recomendable usar el exit() despues del header
Me tomó días averiguar por qué los scripts realizaban cosas que ya no debían hacer.
Cita:
Iniciado por GatorV Ver Mensaje
no hay una garantia de hasta donde se va a ejecutar el codigo.
De hecho el script se ejecuta hasta que termina o hasta que verdaderamente sea detenido (exit;, die;, etc.). Eso sería la "garantía", no es algo aleatorio.

Con el tiempo empecé a usar una función que me evitara tener que terminar el script en cada redirección. Bastante simple (hasta obvia y tonta), pero útil:

Código PHP:
function redirigir($url) {
    
header("Location: $url");
    exit;
}

//

redirigir('index.php'); 
  #6 (permalink)  
Antiguo 16/12/2008, 14:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

No, ya que el header() al enviarse, el browser lo lee y comienza la redireccion, si tu tienes mas sentencias abajo, si son pocas, se van a ejecutar todas, pero es probable que si son muchas estas no se alcancen a ejecutar, por ende el exit().

Como te comento no hay una garantia, depende mucho del browser, la conexion a internet, la latencia de la red, y en que momento del script se haya enviado el header.

Saludos.
  #7 (permalink)  
Antiguo 16/12/2008, 15:26
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

Tenía entendido que los headers no son enviados individualmente al navegador, sino que se envía una "compilación" al final de la ejecución del script.

Estuve haciendo unas pruebas. Por ejemplo:

Código PHP:
/* index.php */

session_start();

sleep(1); // Algo de procesamiento
header('Location: index2.php'); // Vamos a index2.php

sleep(4); // Más procesamiento

// Se supone que esta parte que sigue ya no llega a ejecutarse?

$_SESSION['foo'] = headers_sent(); 
Código PHP:
/* index2.php */

session_start();

echo 
'<pre>';
var_dump($_SESSION);
echo 
'</pre>'
Imprime
Código:
array(1) {
  ["foo"]=>
  bool(false)
}
y ahí podemos apreciar 2 cosas: Primero, se supone que la variable de sesión ya no debería llegar a ser seteada, pues en 4 segundos el script ya debía haber cortado el procesamiento. Y segundo, headers_sent() me devuelve false, pues no se envió nada al navegador aún. Lo que sí se envía inmediatamente, sin esperar el fin de la ejecución, son las salidas de texto (HTML), o el usar flush(), etc.

Otro caso, más simple:

Código PHP:
sleep(1);
header('Location: index2.php');

sleep(5);
header('Location: index3.php'); 
Por medio de variables de sesión, o datos guardados en base de datos, se demuestra que nunca se pasó por index2.php, sino que el header enviado fue index3.php. Con HTTP Live headers para firefox se obtiene:

Código:
http://lab.okram/head/

GET /head/ HTTP/1.1
Host: lab.okram
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; es-AR; rv:1.9.0.4) Gecko/2008102920 Firefox/3.0.4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive

HTTP/1.x 302 Found
Date: Tue, 16 Dec 2008 21:20:59 GMT
Server: Apache/2.2.8 (Win32) mod_ssl/2.2.8 OpenSSL/0.9.8g PHP/5.2.6
X-Powered-By: PHP/5.2.6
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: index3.php
Content-Length: 0
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
El header de redirección enviado sólo es el segundo, y eso que entre el primero y el segundo hubo 5 segundos de diferencia. Ocurre lo contrario si entre el primer y el segundo se hace un flush del contenido:

Código PHP:
sleep(1);
header('Location: index2.php');

flush();

sleep(5);
header('Location: index3.php'); 
No sé si tenga sentido o importancia discutir sobre esto. Pero estoy casi seguro de que verdaderamente el script se ejecutará siempre hasta que termine o se encuentre con un exit o die.

  #8 (permalink)  
Antiguo 16/12/2008, 16:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

Creo esto lo deja claro jeje:
Cita:
It is important to note that headers are actually sent when the first byte is output to the browser. If you are replacing headers in your scripts, this means that the placement of echo/print statements and output buffers may actually impact which headers are sent. In the case of redirects, if you forget to terminate your script after sending the header, adding a buffer or sending a character may change which page your users are sent to.
En otras palabras si envias un header() con el location, luego algo ya sea un echo "y"; empieza la redireccion y las siguientes lineas son ignoradas.

Si no hay datos enviados entonces si, llamadas subsecuentes reemplazan la anterior.

Caso de ejemplo:
Código php:
Ver original
  1. <?php
  2. header("location: 1.html");
  3. header("location: 2.html"); //reemplaza 1.html

Otro:
Código php:
Ver original
  1. <?php
  2. header("location: 1.html");
  3. echo "y";
  4. header("location: 2.html");

En el segundo caso se iria a 1.html y no marcara error.

Saludos
  #9 (permalink)  
Antiguo 16/12/2008, 17:03
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: PHP funcion header

Umm, si lo he entendido bien (y a modo de resumen), después de un header, puedes seguir haciendo operaciones con PHP hasta que finalice el script o se mande algo al navegador... ¿correcto?

Y si hay headers después, se irán reemplazando.
  #10 (permalink)  
Antiguo 16/12/2008, 17:14
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

En efecto, estas en lo correcto.

Saludos.
  #11 (permalink)  
Antiguo 16/12/2008, 17:28
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

Cita:
Iniciado por GatorV Ver Mensaje
En otras palabras si envias un header() con el location, luego algo ya sea un echo "y"; empieza la redireccion y las siguientes lineas son ignoradas.
Cuidado ahí, que te quemas . Las líneas siguientes no son ignoradas en absoluto. El código sigue la ejecución verdaderamente hasta que el script termina (ya sea al final o que sea terminado).

Una vez que un header (o varios) se envía al navegador, entonces todos los demás se ignoran. Esto no significa que ahí el script se detenga. El código PHP ubicado después de la salida que produce el envio de headers aún se ejecuta.

Ejemplo:

Código php:
Ver original
  1.  
  2. sleep(1); // Procesos
  3.  
  4. header('Location: index2.php?foo=1'); // Redirección 1
  5.  
  6. flush(); // Salida al navegador
  7. echo 'a'; // Otra salida al navegador
  8.  
  9. sleep(2); // Procesos
  10.  
  11. header('Location: index2.php?foo=2'); // Redirección 2
  12. header('Content-Type: text/plain'); // cabecera de tipo de contenido
  13.  
  14. $_SESSION['abcdef'] = headers_sent(); // Variables de sesión abcdef
  15.  
  16. echo 'b'; // Otra salida al navegador

A index2.php me llega los siguientes datos:

Código:
_SESSION: array(1) {
  ["abcdef"]=>
  bool(true)
}
_GET: array(1) {
  ["foo"]=>
  string(1) "1"
}
En resumen. Se hizo la primera redirección establecida, pues luego de ella se hicieron salidas al navegador y la cabecera fue enviada. Esto no detiene la ejecución del script en absoluto. Prueba de ello es que la variable de sesión establecida al final se crea normalmente. Lo que sí es ignorado son otros headers, como el de tipo de contenido, que se envían después de que el de redirección ya ha sido enviado al navegador.

Confuso eh?

Cita:
Iniciado por Keysher Ver Mensaje
después de un header, puedes seguir haciendo operaciones con PHP hasta que finalice el script o se mande algo al navegador... ¿correcto?
Según lo último que dije, se ejecuta igualmente todo el código.

Cita:
Iniciado por Keysher Ver Mensaje
Y si hay headers después, se irán reemplazando.
Siempre y cuando los headers aún no se hayan enviado al navegador, y sean del mismo tipo (Location, content-type, etc.).

  #12 (permalink)  
Antiguo 16/12/2008, 21:57
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

Checa tu directiva output_buffering, muchas veces esta viene activada por defecto y hace que no se envien los datos hasta que cumpla el "tamaño" predefinido (4096 bytes), lo que causa que el efecto que ves .

Saludos.
  #13 (permalink)  
Antiguo 16/12/2008, 22:25
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

De hecho recapacitando y analizando jeje, mas bien la cosa no es de PHP, si no de como es el transporte HTTP, al nosotros enviar el redirect, se establece la cabecera Location, pero el browser no va a redireccionar hasta que Apache cierre la conexion http.

Eso se hace hasta finalizar el script o llamar a exit() para terminar, aunque por eso decia que no hay garantia, el cliente puede usar algun otro browser que no respete esta regla y al leer la cabecera Location haga el cambio.

Esto lo acabo de comprobar jugando con set_time_limit(), si un proceso se tarda mas de set_time_limit tiempo, se "cae" el script pero se realiza la redireccion.

Saludos.

Saludos.
  #14 (permalink)  
Antiguo 17/12/2008, 04:16
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: PHP funcion header

Este es mi código de login pero sigue sin salirme la redireccion el caso es que se imprime por pantalla los print de antes de los headers. Alguna idea ??? Muchas Gracias ¡¡¡


Código:
<?php

// 1. Incluye la informacion de acceso
// Hay que tener en cuenta de que AUN NO se ha establecido la conexion con la BBDD

include('db_acceso.php');  //Incluimos este script para conectarnos a la BBDD
include('index.php'); //Incluimos este script para mostrar el formulario

// 2. Conexion

$connection = mysql_connect($db_host, $db_username, $db_password);

if (!$connection)
  {
    die ("No se puede establecer la conexion con la Base de Datos: <br />". mysql_error(  ));

  }

// 3. Selecciona la Base De Datos

$db_select = mysql_select_db ($db_database);

if (!$db_select)
 {
  die ("No se pudo seleccionar la Base de Datos: <br />". mysql_error(  ));
  exit;
 }

// Recogemos valores del Formulario y los escribimos
$nombre = htmlentities ($_POST["nombre_usuario"]);
$contraseña = htmlentities ($_POST["password"]);

if ((isset($nombre)) && (isset($contraseña)))
{
  print 'El nombre que el usuario ha tecleado es: '.$nombre.'<br/>'.'<br/>';
  print 'La contrase&ntilde;a que el usuario ha tecleado es: '.$contraseña.'<br/>'.'<br/>';
}

//Introducimos nombre de usuario y contraseña introducidos por el usuario en el formulario
//Si alguno de los dos campos o los dos estan vacios no se deja insertar en la Tabla T_USUARIOS
//---------------- OJO: DISTINGUE ENTRE MAYUSCULAS Y MINUSCULAS ---------------------------

    if (($nombre != NULL) && ($contraseña != NULL))
	{
	  $sql = "SELECT usuario, password";
          $sql.= "  FROM t_usuarios WHERE ";
	  $sql.= "usuario='".$nombre."' AND password='".$contraseña."'";

	  $resultado = mysql_query($sql);

	  if (!$resultado)
	  {
	    die ("No se pudo ejecutar la Consulta sobre la Base de Datos: <br />". mysql_error(  ));
	    exit;
	  }

	  //Extraemos en un array el posible registro para comprobar si esta en la BBDD
	  $vector_login = mysql_fetch_array($resultado);

	  if (($vector_login[0] != $nombre) || ($vector_login[1] != $contraseña))
	    {
             print 'Nos redirige a errorlogin.htm'; 
			 header("Location: errorlogin.htm");			 
			 			 exit();
           
	    }   
      
      print 'Nos redirige a inicio.php'; 			 
      header( "Location: inicio.php" );
     	  exit();      
        }

    else
	    {
    	  print "<center>
          Alguno de los dos campos o los dos est&aacute;n vac&iacute;os
          </center>";
         }

 	 //Cerramos la conexion con la BBDD
     mysql_close ($connection);

?>
  #15 (permalink)  
Antiguo 17/12/2008, 04:56
 
Fecha de Ingreso: noviembre-2002
Mensajes: 1.341
Antigüedad: 21 años, 5 meses
Puntos: 17
Respuesta: PHP funcion header

Precisamente una de las razones por las que no funcione pueden ser esos prints... Antes de los headers no puede haber ninguna salida en el navegador.
  #16 (permalink)  
Antiguo 17/12/2008, 06:12
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

@superdober, la verdad no sé si eres el usuario que originalmente hizo la pregunta, o eres otro con otra pregunta Y me da lata subir hasta arriba porque el mensaje es muy largo. Pero si eres otro, entonces te recomiendo para después hacer tus preguntas en un nuevo tema.

El problema, como lo hemos estado discutiendo en todo este tema, es que una vez que se han enviado cabeceras (headers) al navegador, el servidor ya no interpreta ni recibe/envia ninguna otra. Y entendemos por cabeceras: texto (HTML), algún otro tipo de contenido, e incluso una llamada a flush() que sólo envíe las cabeceras aunque aún no haya salidas "físicas". Por lo tanto, no puedes usar prints ni echos, ni nada de eso antes de llamar a header().

@GatorV, pero hay que establecer diferencias entre un pedido HTTP que hace el navegador, la rspuesta que este espera, y el procesamiento que el servidor está ejecutando en "backstage" que genera esta respuesta.

Como bien dices, una vez que el cliente recibe la respuesta a la petición, este puede optar por redirigir inmediatamente (si el header es de redirección), o cortar la conexión HTTP, o esperar a que esta termine del lado del servidor (Cómo sabe? Hay algún header() que se envía que indica que el script terminó de ejecutarse?). Al haber un time_limit insuficiente para que se termine de ejecutar el script, obviamente no todo el código se ejecutará al final. Pero eso pasa en todos los casos, aún sin que se envíe una cabecera de redirección. Como decía, el script termina de ejecutarse y envía un "indicador?" al cliente indicándole que la petición HTTP está completa, y el cliente procede.

Pero si el cliente no espera esta "respuesta final", corta la conexión, pero eso implica que el servidor HTTP detenga el procesamiento? Hice una prueba sencilla:

Código php:
Ver original
  1.  
  2. echo 'abcd'; // Salida
  3.  
  4. flush(); // Para asegurarme que la salida sea enviada al navegador
  5. sleep(20); // Más procesamiento
  6.  
  7. $_SESSION['foo'] = headers_sent(); // Una variable de sesión.
Para emular el comportamiento de un navegador que cierre la conexión al recibir los primeros headers cerré la pestaña que hacía el request. Abrí en una nueva otra página que me imprima las variables de sesión existente (Las sesiones se comparten entre pestañas), y oh! sorpresa. El script no cargaba. Y no cargaba hasta que pasaron los 20 segundos del sleep del primero, tras lo cual me mostró la variable de sesión foo con el valor boobleano true. Comencé a probar de diversas maneras, y llegué a la conclusión de que el script sigue ejecutándose hasta que se termina o es terminado, o en todo caso hasta que el tiepo se le agota, pero no tiene mucho que ver con el comportamiento que tiene el cliente frente a las primeras cabeceras enviadas. Y que requests sucesivos y muy seguidos no cortan el procesamiento previo sin aún no ha terminado.

Eso de que tenga que esperar a que uno termine, imagino que debe estar en la capacidad del servidor de procesar múltiples request simultaneamente, pero este ejemplo me sirvió para comprobar que el terminar una conexión cliente-servidor no hace que el procesamiento del script por parte el servidor termine.

  #17 (permalink)  
Antiguo 17/12/2008, 06:40
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: PHP funcion header

QUE TAL, A VER HE SUPRIMIDO TODOS LOS ECHO Y PRINT Y AUN ASI ME SIGUE FALLANDO, YA SE QUE SOIS UNOS MAQUINAS EN ESTO DEL PHP, PERO ES QUE ESTOY APRENDIENDO..ASI QUE GRACIAS POR VUESTRA PACIENCIA. ALGUNO ME DA ALGUNA PISTA? MUCHISIMAS GRACIAS Y PERDON POR LA INSISTENCIA.


Código:
<?php

header('Location: $redireccion_login');

// 1. Incluye la informacion de acceso
// Hay que tener en cuenta de que AUN NO se ha establecido la conexion con la BBDD

include('db_acceso.php');  //Incluimos este script para conectarnos a la BBDD
include('index.php'); //Incluimos este script para mostrar el formulario

// 2. Conexion

$connection = mysql_connect($db_host, $db_username, $db_password);

if (!$connection)
  {
    die ("No se puede establecer la conexion con la Base de Datos: <br />". mysql_error(  ));

  }

// 3. Selecciona la Base De Datos

$db_select = mysql_select_db ($db_database);

if (!$db_select)
 {
  die ("No se pudo seleccionar la Base de Datos: <br />". mysql_error(  ));
  exit;
 }

// Recogemos valores del Formulario y los escribimos
$nombre = htmlentities ($_POST["nombre_usuario"]);
$contraseña = htmlentities ($_POST["password"]);

//Introducimos nombre de usuario y contraseña introducidos por el usuario en el formulario
//Si alguno de los dos campos o los dos estan vacios no se deja insertar en la Tabla T_USUARIOS
//---------------- OJO: DISTINGUE ENTRE MAYUSCULAS Y MINUSCULAS ---------------------------

    if (($nombre != NULL) && ($contraseña != NULL))
	{
	  $sql = "SELECT usuario, password";
          $sql.= "  FROM t_usuarios WHERE ";
	  $sql.= "usuario='".$nombre."' AND password='".$contraseña."'";

	  $resultado = mysql_query($sql);

	  if (!$resultado)
	  {
	    die ("No se pudo ejecutar la Consulta sobre la Base de Datos: <br />". mysql_error(  ));
	    exit;
	  }

	  //Extraemos en un array el posible registro para comprobar si esta en la BBDD
	  $vector_login = mysql_fetch_array($resultado);

	  if (($vector_login[0] != $nombre) || ($vector_login[1] != $contraseña))
	    {
             $redireccion_login = "errorlogin.htm";
			 header('Location: $redireccion_login');			 
			 mysql_close ($connection);
			 exit();
           
	    }   
      
      $redireccion_login = "inicio.php";
	  header('Location: $redireccion_login');			 
	  mysql_close ($connection); 
	  exit();
      
        }

    	 //Cerramos la conexion con la BBDD
     mysql_close ($connection);

?>
  #18 (permalink)  
Antiguo 17/12/2008, 06:43
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

Qué falla? EL asunto es que la primera línea de tu código es un header de redirección. Así lo pensaste inicialmente?
  #19 (permalink)  
Antiguo 17/12/2008, 06:52
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: PHP funcion header

Que tendría que hacer quitar el primer Header???
Por favor, dime que es lo que tengo que hacer para que funcione bien.
He visto en ejemplos que la primera sentencia tiene que ser un header ¿Es esto verdad?.


Gracias.
  #20 (permalink)  
Antiguo 17/12/2008, 07:11
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

No hagas cosas copiando sin saber para qué sirven. Tú y sólo túb debes de saber parta qué has puesto ese header al comienzo. Está en la lógica de tu script? Cumple alguna función? Si lo pusiste porque otros así lo hicieron, y no sabes para qué sirve, entonces quítalo.

  #21 (permalink)  
Antiguo 17/12/2008, 08:37
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: PHP funcion header

Que tal, bueno ya viste que comenté la primera linea, sabes por que no funciona?
Muchas Gracias ¡¡¡

Código:
<?php

//header('Location: $redireccion_login');

// 1. Incluye la informacion de acceso
// Hay que tener en cuenta de que AUN NO se ha establecido la conexion con la BBDD

include('db_acceso.php');  //Incluimos este script para conectarnos a la BBDD
include('index.php'); //Incluimos este script para mostrar el formulario

// 2. Conexion

$connection = mysql_connect($db_host, $db_username, $db_password);

if (!$connection)
  {
    die ("No se puede establecer la conexion con la Base de Datos: <br />". mysql_error(  ));

  }

// 3. Selecciona la Base De Datos

$db_select = mysql_select_db ($db_database);

if (!$db_select)
 {
  die ("No se pudo seleccionar la Base de Datos: <br />". mysql_error(  ));
  exit;
 }

// Recogemos valores del Formulario y los escribimos
$nombre = htmlentities ($_POST["nombre_usuario"]);
$contraseña = htmlentities ($_POST["password"]);

//Introducimos nombre de usuario y contraseña introducidos por el usuario en el formulario
//Si alguno de los dos campos o los dos estan vacios no se deja insertar en la Tabla T_USUARIOS
//---------------- OJO: DISTINGUE ENTRE MAYUSCULAS Y MINUSCULAS ---------------------------

    if (($nombre != NULL) && ($contraseña != NULL))
	{
	  $sql = "SELECT usuario, password";
          $sql.= "  FROM t_usuarios WHERE ";
	  $sql.= "usuario='".$nombre."' AND password='".$contraseña."'";

	  $resultado = mysql_query($sql);

	  if (!$resultado)
	  {
	    die ("No se pudo ejecutar la Consulta sobre la Base de Datos: <br />". mysql_error(  ));
	    exit;
	  }

	  //Extraemos en un array el posible registro para comprobar si esta en la BBDD
	  $vector_login = mysql_fetch_array($resultado);

	  //print $vector_login[0].'<br/>'.'<br/>';
	  //print $vector_login[1].'<br/>'.'<br/>';

	  if (($vector_login[0] != $nombre) || ($vector_login[1] != $contraseña))
	    {
             //$redireccion_login = "errorlogin.htm";
			 //header('Location: $redireccion_login');			 
			 header('Location: errorlogin.htm');			 
			 mysql_close ($connection);
			 exit();
           
	    }   
      
      //$redireccion_login = "inicio.php";
	  //header('Location: $redireccion_login');			 
	  header('Location: inicio.php');			 
	  mysql_close ($connection); 
	  exit();
      
        }

    else
	    {
		  //print "<center>
          //Alguno de los dos campos o los dos est&aacute;n vac&iacute;os
          //</center>";
        }

 	 //Cerramos la conexion con la BBDD
     mysql_close ($connection);

?>
  #22 (permalink)  
Antiguo 17/12/2008, 08:41
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

Qué es lo que no funciona? Te da algún error?

  #23 (permalink)  
Antiguo 17/12/2008, 09:06
 
Fecha de Ingreso: agosto-2007
Mensajes: 248
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: PHP funcion header

Siempre me redirige a inicio.php aun cuando pongo mal nombre de usuario y contraseña.

================================================== ==============

YA FUNCIONA MUCHAS GRACIAS A TODOS LOS QUE OS HABEIS INTERESADO ¡¡¡¡¡¡¡¡¡¡

================================================== ==============

Última edición por superdober; 17/12/2008 a las 10:38 Razón: Tema solucionado
  #24 (permalink)  
Antiguo 17/12/2008, 11:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

@okram,

Eso puede ser por varias cosas jeje, dependiendo si PHP esta como modulo o como CGI, ya que en esos dos casos, el script puede o no puede continuar de ejecutarse, ya que en el ciclo de como (en este caso Apache), puede esperar o no en el hilo a que PHP le regrese el resultado de "terminacion", es como en C, cuando haces un return 0; al final de tu programa para decir "OK" o un return 1, o 2 para algun error.

Apache usa estos returns que vienen desde el interprete de PHP, para seguir su proceso de ejecucion, ya que al final Apache es el que lleva el control de estar levantando o no el interprete de PHP (y se comporta diferente en base a si esta como modulo o como cgi).

En resumen, creo lo mas seguro y que evita dolores de cabeza es usar el exit() despues del header si ya no queremos procesar nada mas, ya que como dije desde un principio, no hay garantias, es parte de como funcionan las aplicaciones web, nunca podemos confiar en el cliente ni en los datos que nos envian ya que pueden variar de mil formas.

Saludos.
  #25 (permalink)  
Antiguo 17/12/2008, 11:21
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: PHP funcion header

Es lo más seguro. De eso no hay duda. Y en todo este hilo aprendí tantas cosas sobre el header()

Un gusto haber discutido contigo este tema GatorV

  #26 (permalink)  
Antiguo 17/12/2008, 11:29
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: PHP funcion header

En efecto, igualmente .

Saludos
  #27 (permalink)  
Antiguo 17/12/2008, 12:21
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: PHP funcion header

a ambos, los ponentes ....

de verdad, igualmente aprendí bastante sobre el uso de header()

gracias!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
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 22:36.