Foros del Web » Programando para Internet » PHP »

header()

Estas en el tema de header() en el foro de PHP en Foros del Web. hola: no se como utlizar esa funcion, lo que se es que necesito utilizarla antes de cualquier salida html pero he visto ejemplos en que ...
  #1 (permalink)  
Antiguo 29/12/2005, 12:26
 
Fecha de Ingreso: julio-2005
Mensajes: 78
Antigüedad: 18 años, 9 meses
Puntos: 0
Pregunta header()

hola:

no se como utlizar esa funcion, lo que se es que necesito utilizarla antes de cualquier salida html pero he visto ejemplos en que no las utilizan asi alguien me puede ayudar.

saludos.
  #2 (permalink)  
Antiguo 29/12/2005, 12:33
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 8 meses
Puntos: 1
Pero para qué quieres usarla?
__________________
Mi página personal: Julián Urbano
  #3 (permalink)  
Antiguo 29/12/2005, 17:00
 
Fecha de Ingreso: diciembre-2005
Mensajes: 165
Antigüedad: 18 años, 3 meses
Puntos: 4
Eso es asi, solo funciona si no se ha mandado nada al explorador antes.
  #4 (permalink)  
Antiguo 29/12/2005, 17:30
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 8 meses
Puntos: 1
Sí, sólo si no has mandado nada. Pero para qué quieres usarla, ¿qué quieres hacer con ella?
__________________
Mi página personal: Julián Urbano
  #5 (permalink)  
Antiguo 29/12/2005, 19:38
 
Fecha de Ingreso: julio-2005
Mensajes: 78
Antigüedad: 18 años, 9 meses
Puntos: 0
header

lo que pasa es que he visto ejemplos en los que utilizan esa funcion y la utilizan en cualquier parte de codigo, no necesariamente al inicio.

¿No sé si esa funcion puede funcionar como enlace a otras páginas?

o si saben como puedo hacer enlaces pero sin utilizar las etiquetas <a></a>
solo enlazar con una instruccion.

gracias
  #6 (permalink)  
Antiguo 29/12/2005, 19:52
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Con header("location: lala.php"); cuando el código llegue a esa instrucción automáticamente te llevará a lala.php.
Como bien te dijeron arriba, para que la función header no tire error, ningún tipo de información debe ser enviada al navegador antes de su uso, pero SI puede estar en la mitad o al final de un código, siempre y cuando (como ya dije) no haya una salida al navegador anteriormente.
Saludos!
__________________
R4DS en español | R4DS en inglés
  #7 (permalink)  
Antiguo 29/12/2005, 20:20
 
Fecha de Ingreso: julio-2005
Mensajes: 78
Antigüedad: 18 años, 9 meses
Puntos: 0
Pregunta

tengo esto haber si alguien me dice en donde esta el error:
este documento se llama registrarse.php

Código PHP:
<?
 session_start
();
 require_once 
'funciones.php';
  if (isset(
$_POST['NomUsu']))
   {
    
dologin();
    echo 
$mensaje;
   }
?>
<head>

<title>Registrarse</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<body>
  <form action="" method="post">
   &nbsp;&nbsp;&nbsp;Usuario: &nbsp;<input type="text" name="NomUsu"><p>
   Password: &nbsp;<input type="password"  name="CveUsu" class="caja.css" ><p>
   <input type="submit" name="RegUsu" name="Registrar" value="Registrarse">
   </form>
 </body>
 </html>
 
el siguiente domuento se llama funciones.php y es este:

<?                       
   
require_once 'funcionesdb.php';   
   function 
dologin()
    {
      global 
$mensaje;
     
$NomUsu $_POST['NomUsu'];
     
$CveUsu $_POST['CveUsu'];
     if ( (
$NomUsu == '') && ($CveUsu == ''))
        
$mensaje ' Escribe tu nombre de usuario y contraseña ';
      else
         if ( 
$NomUsu == '')
           
$mensaje ' Escribe tu nombre de usuario';
         else
            if ( 
$CveUsu == '')
               
$mensaje ' Escribe tu password';
             else
             {
     
$sql "SELECT NomUsu FROM cliente WHERE NomUsu = '$NomUsu'";
      
$result dbquery($sql);
       if(
mysql_num_rows($result)==1)
           {
                  
$row mysql_fetch_array($result);   
         
$_SESSION['usuario'] = $row['NomUsu'];
         
$sql " UPDATE Cliente SET Ult_Acc = NOW() WHERE NomUsu = '{$row['NomUsu']}'";
               
dbquery($sql);
                  }
    
header('location: prueba.php'); // es aqui donde me marca el error.
              
}
   }
?>
y por ultimo tengo este que se llama funcionesdb.php:

<?
  $link 
mysql_connect('localhost',"root","edson");
   
mysql_select_db("Muebleria",$link);
 
   function 
dbquery ($sql)
   {
      
$consulta =  mysql_query($sql);
      return(
$consulta);
   }
?>
el warning que me sale es este:

Warning: Cannot modify header information - headers already sent by (output started at c:\archivos de programa\easyphp1-8\www\paginas\funciones.php:1) in c:\archivos de programa\easyphp1-8\www\paginas\funciones.php on line 27

espero que alguien me pueda decir en que estoy mal.
saludos

Última edición por Cluster; 30/12/2005 a las 06:18
  #8 (permalink)  
Antiguo 29/12/2005, 20:39
 
Fecha de Ingreso: agosto-2005
Ubicación: Argentina, Capital Federal
Mensajes: 435
Antigüedad: 18 años, 8 meses
Puntos: 2
Te cito un párrafo de php.net con los errores mas comunes del uso de esta función, y fijate si la mano viene por ahí:

Cita:
Recuerde que la función header() debe ser llamada antes de que cualquier salida sea enviada, ya sea mediante etiquetas HTML normales, líneas en blanco de un archivo, o desde PHP. Es un error bastante común interpretar código extra con include(), require(), o alguna otra función de acceso de archivos, y terminar con espacios o líneas en blanco que son impresas antes de un llamado a header(). El mismo problema existe cuando se usa un archivo PHP/HTML único.
Fijate no haber dejado espacios en blanco o saltos de linea antes de "<?", y también fijate que tampoco las haya después de los "?>" que tenes en los includes.

Saludos.

PD: la próxima vez por favor encerrá el código PHP entre las etiquetas del foro correspondientes, para hacer su lectura mas cómoda.
__________________
R4DS en español | R4DS en inglés
  #9 (permalink)  
Antiguo 30/12/2005, 06:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Por aquí realicé una breve explicación del tema "cabeceras HTTP" (que es lo que envias con la función header()".

http://www.forosdelweb.com/1375512-post.html

Como ahí comento .. una función header() tan sólo envia "cabeceras HTTP" al cliente (navegador en tu caso), .. estas cabeceras son de cualquier tipo .. no sólo para "redireccionar" como es el caso típico de "Location" .. hasta una "cookie" es una cabecera HTTP sólo que se "envia" con otra función (setcookie() ...)

El hecho de que se diga mucho "la función header() tiene que estar al principio de tu código" no es que literalmente tenga que estar la priméra línea de tu script .. sino -antes- de cualquier HTML/javascript .. un espacio .. etc y en general "salida" que puedas haber generado.

Recuerda como funciona PHP .. PHP genera la "página" que será entregada al cliente (navegador).

También hay que aclarar que si tu en tu código en algún punto haces un "header(Location ...)" supuestamente es por qué quieres deterne la ejecución del script en ese punto y mandar a "llamar" a otro script indicandole al cliente (navegador) que cambie la página que está viendo por otra vía cabeceras HTTP (más rápido y transparente que por ejemplo haber "generado" ese HTML o javascript para redireccionar).

En definitiva .. comprender que hace "header()" va mas allá de saber la descripción de la función en si. Hay que conocer que todo esto se basa en otros conceptos como el "protocolo HTTP" y como funciona todo esto de una comunicación "cliente-servidor" bajo este protocolo. Se que esto será muy teórico para algunos .. pesado y tal vez aburrido .. pero, no quiere decir que se aprenda de memoria uno el protocolo HTTP sino de saber como va el "cuento" .. Cualquier duda al respecto .. consulten. (aunque no es un tema própio de PHP .. pero si trabajamos con "PHP" en este médio: "para la web" es necesario conocerlo).

Un saludo,
  #10 (permalink)  
Antiguo 30/12/2005, 06:46
3ws
 
Fecha de Ingreso: diciembre-2005
Mensajes: 9
Antigüedad: 18 años, 3 meses
Puntos: 0
Sonrisa Hola te mando un ejemplo para ver si te sirve esta todo al p

Código PHP:
<? // escribiendolo todo al principio y 

php require_once('Connections/una.php');
mysql_select_db($database_db$db);    
$mal=0;
$error='';//aki acumulas los errores y los devuelves a la pag anterior
$identificador=$_POST['identificador'];
if (empty(
$_POST["titulo"])){
    
$error.=" <div class='rojo'> Por favor introduzca un titulo. </div>";
    
$mal=1;
}else
    
$titulo=$_POST["titulo"];
if (empty(
$_POST["autor"])){
    
$error.=" <div class='rojo'> Por favor introduzca un nombre de autor. </div>";
    
$mal=1;
}else
    
$autor=$_POST["autor"];
if (empty(
$_POST["comentario"])){
    
$error.=" <div class='rojo'> Por favor introduzca un comentario. </div>";
    
$mal=1;
}else
    
$comentario=$_POST["comentario"];
if (
$mal==1){
    
$enviar="location:foro.php?error=".$error;
    
header($enviar);//aki redirecciona si hay algo mal
}else{
    
$fechadate"Y-m-d H:i:s",mktime(date("H"),date("i"),date("s"),date("m"),date("d"),date("Y")));
    
$sql=mysql_db_query($database_db,"INSERT INTO `foro`(`id`, `autor`, `titulo`, `mensaje`, `fecha`, `respuestas`, `identificador`, `ult_respuesta`)  VALUES ('','$autor','$titulo','$comentario','$fecha','','$identificador','') ")or die(mysql_error());
    
$enviar="location:foro.php?";    
    
header($enviar);//si todo va bien redirecciona aki
}
//ves todo antes de lo tipico
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Documento sin t&iacute;tulo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="estilo.css" rel="stylesheet" type="text/css">
</head>

<body>

</body>
</html>

Última edición por Cluster; 30/12/2005 a las 07:06
  #11 (permalink)  
Antiguo 30/12/2005, 06:47
Avatar de calavera  
Fecha de Ingreso: diciembre-2005
Mensajes: 113
Antigüedad: 18 años, 3 meses
Puntos: 0
header

Lo que puedes llegar hacer es insertar la sgte funcion al principio de todo el codigo
<?php
ob_start(); //permite dejar pasar el llamado de header//
?>

y al final de header, luego que cierras la instruccion en php ?>, si no teresultase prueba al final de todo

?>
<?php
ob_end_flush(); //permite dejar pasar el llamado de header//
?>

Espero que te sirva o puedes consultar al FAQ's
  #12 (permalink)  
Antiguo 30/12/2005, 07:09
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por calavera
Lo que puedes llegar hacer es insertar la sgte funcion al principio de todo el codigo
<?php
ob_start(); //permite dejar pasar el llamado de header//
?>

y al final de header, luego que cierras la instruccion en php ?>, si no teresultase prueba al final de todo

?>
<?php
ob_end_flush(); //permite dejar pasar el llamado de header//
?>

Espero que te sirva o puedes consultar al FAQ's
El uso del control del buffer de PHP de esa forma solventaría el probelma principal de "poner un header() donde guste" .. pero todo tiene su costo.

El uso del control del buffer de esa forma sobre-carga al servidor para una taréa que perfectamente se puede solventar "entendiendo" un poco como funciona "PHP" y ordenando el código en consecuencia (no digo que tu "calavera" no sepas esto .. sólo un comentario argumentado).

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.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:05.