Foros del Web » Programando para Internet » PHP »

problema con un headers.

Estas en el tema de problema con un headers. en el foro de PHP en Foros del Web. Amigos. Hello Again...tengo un archivo php donde estoy guardando los registro de un formulario de inscripción, cuando termino el proceso re-envio con un mensaje a ...
  #1 (permalink)  
Antiguo 20/10/2006, 12:08
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años, 7 meses
Puntos: 1
problema con un headers.

Amigos.

Hello Again...tengo un archivo php donde estoy guardando los registro de un formulario de inscripción, cuando termino el proceso re-envio con un mensaje a la misma página,
Código PHP:
header("location: nuevo_cliente.php?accion=nuevo"); 
pero me sale el error de " Cannot modify header information - headers already sent by" el error lo lanza en este html
Código HTML:
 <script language="JavaScript" src="js/comunas.js"></script> 
pero ese javascript esta dentro de uno de los tags de php por lo tanto no se esta enviando antes que el headers ¿dónde me abre mareado o que tengo que revisar para descartar probables errores?
  #2 (permalink)  
Antiguo 20/10/2006, 12:36
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 19 años, 2 meses
Puntos: 19
Lo que tienes que revisar es que no printes nada por pantalla antes de hacer la llamada al header. Con nada me refiereo a nada (espacios despues de los cierres de php ?> son los más comunes). Esa libreria javascript no printara nada? Si no, prueba a quitar esa librería.
De todas maneras, podrías poner el mensaje de error completo.

Un saludo
  #3 (permalink)  
Antiguo 20/10/2006, 13:41
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Si tu haces una redirección con cabeceras HTTP como es tu caso (usando header() enviando un "Location") .. no tiene sentido que -antes- de de esa llamada a header() tengas algo de HTML por médio.

Recuerda que una cabecera HTTP se ejecuta -antes- que cualquier HTML/javascirpt pueda llegar al cliente y ejecutarse. Estas cabeceras son parte del protocolo HTTP y se ejecutan como comento -antes- por eso "alega" PHP con el mensaje de error característico.

Ten presente también que es lo que haces cuando redireccionas .. en ningún momento servirá que se pueda ejecutar ese código javascript .. la página se manda al navegador (cliente) a que la cambie por otra antes de que llegen esas instrucciones a ejecutarse en el navegador.

Si muestras el código -completo- que usas . .se te podria orientar para "ordenarlo" y así no tener estas situaciones.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 20/10/2006, 13:57
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años, 7 meses
Puntos: 1
Mmm acá lo comprimi lo mas posible..

Código PHP:

<?
require("Safe/check.php"); 
$acceso=$_SESSION['state'];
if(
$acceso == 0) { ?>
<html>
<head>
<title>Ambiente Administrador</title>
<link rel="stylesheet" href="CSS/style.css" type="text/css">
<script language="JavaScript" src="js/comunas.js"></script>
<script language="JavaScript" src="js/validaciones.js"></script>
</head>
<body topmargin="0" bgcolor="#333333">
<table width="740" height="540" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr valign="top"> 
    <td> 
      <table width="100%" border="0" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
        <tr> 
          <td width="24%" valign="top">
          <table width="100%" border="0" cellspacing="2" cellpadding="0">
              <tr> 
                <td ><strong><img src="Ima/white.gif" width="10" height="8">:: 
                  Operaciones :: </strong></td>
              </tr>
              <tr> 
                <td ><br>
                  <img src="Ima/white.gif" width="15" height="8"><img src="Ima/red.jpg" width="6" height="6"> 
                  Nuevo Cliente</td>
              </tr>
              <tr> 
                <td ><img src="Ima/white.gif" width="15" height="8"><img src="Ima/red.jpg" width="6" height="6"> 
                  Lista de Clientes</td>
              </tr>
              <tr> 
                <td ><img src="Ima/white.gif" width="15" height="8"><img src="Ima/red.jpg" width="6" height="6"> 
                  <a href="Safe/logout.php" class="enca2_1">Desconectarse </a></td>
              </tr>
              <tr> 
                <td>&nbsp;</td>
              </tr>
              <tr>
                <td>&nbsp; </td>
              </tr>
            </table></td>
          <td valign="top">
<?PHP if($_GET['accion'] == "nuevo" ){?>
        <form name="registro" >
              <table width="100%" border="0" cellspacing="2" cellpadding="0" bgcolor="#999999">
                <tr> 
                  <td colspan="3">&nbsp;</td>
                </tr>
                <tr> 
                  <td colspan="3" >FORMULARIO DE INGRESO CLIENTE</td>
                </tr>
                <tr> 
                  <td width="31%" ><img src="Ima/white.gif" width="15" height="8">Password</td>
                  <td colspan="2" class="must">* 
                    <input name="txt_code" type="password" class="texto" id="txt_code" onKeyPress="return validar_ambos(event)"></td>
                </tr>
                <tr> 
                  <td >&nbsp;</td>
                  <td colspan="2">&nbsp;</td>
                </tr>
                <tr> 
                  <td ><font color="#FF6600">*</font><font size="-2">Campos 
                    Obligatrios</font></td>
                  <td width="29%"> <div align="center">
                      <input type="submit" name="Submit" value="Enviar" onClick="return campos_vacios()">
                      <input type="reset" name="Submit2" value="Restablecer">
                      <img src="Ima/white.gif" width="1" height="1"> </div></td>
                  <td width="40%">&nbsp;</td>
                </tr>
                <tr> 
                  <td class="Formulario">&nbsp;</td>
                  <td>
                    <?
                          
// Mostrar error
                          
                          
if (isset($_GET['mensaje'])){
                              
$msg=$_GET['mensaje'];
                          echo 
"Estado:$msg";
                          }
                         
?>
                  </td>
                  </tr>
              </table>
            </form><?PHP ?>
            <?PHP // Guardar Datos del Formulario.
            
require("BDConn/datosConn.php");
            
$value $_GET['accion'];
            if(
$value == "guardar"){
            
                
//capturando POST
                
$password =strtolower(trim($_POST['txt_code']));
                                
                
// datos BD.
                
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass") or die("Imposible Conectar");
                
mysql_select_db($sql_db,$db_conexion)or die("Error en la base de datos seleccionada");
                
// realizamos la consulta a la BD para chequear datos del Usuario.
                
$str="INSERT INTO cliente values('$password')";
                
$usuario_consulta=mysql_query($str)or die("La siguiente consulta contiene algún error:".nSQL.":".$str);    
            
//    echo "check bd; 
                
header("location: nuevo_cliente.php?accion=nuevo&mensaje=Registro Guardado");
                exit;
            }
            
?>
            <p>&nbsp;</p></td>
        </tr>
        <tr> 
          <td colspan="2" valign="top"></td>
        </tr>
        <tr>
          <td colspan="2" background="Ima/fractal.png"><div align="right"><font color="#FF0000" size="-1">D</font><font size="-1"> 
              Todos los derechos Reservados</font></div></td>
        </tr>
      </table>
      
    </td>
 </tr>
</table>
</body>
</html>
<? } else { echo "no tiene los permisos";}?>
  #5 (permalink)  
Antiguo 20/10/2006, 14:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Y entendiste lo que comenté sobre como funciona "PHP" y esto de las "cabeceras"?

Bueno . .tu código PHP concreto:
Código PHP:
<?PHP // Guardar Datos del Formulario. 
            
require("BDConn/datosConn.php"); 
            
$value $_GET['accion']; 
            if(
$value == "guardar"){ 
             
                
//capturando POST 
                
$password =strtolower(trim($_POST['txt_code'])); 
                                 
                
// datos BD. 
                
$db_conexionmysql_connect("$sql_host""$sql_usuario""$sql_pass") or die("Imposible Conectar"); 
                
mysql_select_db($sql_db,$db_conexion)or die("Error en la base de datos seleccionada"); 
                
// realizamos la consulta a la BD para chequear datos del Usuario. 
                
$str="INSERT INTO cliente values('$password')"
                
$usuario_consulta=mysql_query($str)or die("La siguiente consulta contiene algún error:".nSQL.":".$str);     
            
//    echo "check bd;  
                
header("location: nuevo_cliente.php?accion=nuevo&mensaje=Registro Guardado"); 
                exit; 
            } 
            
?>
Eso debería estar -antes de tu:

Código PHP:
<html
<
head
Por qué en ese código validas cierta condición .. y si se produce .. redireccionas .. NO Interesa para nada ese "HTML" que puedas tener ahí.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 20/10/2006, 14:08
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Por otro lado .. se nota que piensas como "HTML" con incrustraciones de "PHP" ..

Vamos .. que no piensas como estás generando la "salida" que PHP deja al terminar su proceso ..

Por ejemplo .. armas una página HTML (ok) para el caso de que pases de:
if($acceso == 0) { ?>

pero si eso no se cumple .. metes un mensaje de "error" pero totalmente fuera de la página HTML que debes componer como corresponde .. con sus tag's HTML correspondientes <html> .. <head> .. <body> .. etc ... y sus cierre.

Observa que página (ver código fuente en tu navegador) generas en cada caso .. cuando se cumple y cuando no ..

Este "pensamiento" debes de cambiarlo .. por qué así tendrás problemas entendiendo cosas como las "cabeceras" o este caso que te comento concreto.

-----------------
Este tipo de validaciones las resulevo tipo:

Código PHP:
<? 
require("Safe/check.php");  
$acceso=$_SESSION['state']; 
if(
$acceso == 0) {
   
header ("Location: pagina_error.php");
   exit;
   
// me ahorro el "else" y tener que cerrar este IF .. simplemente mando a otra página exclusiva para presentar mensajes de error. 
}

// aquí vendría el bloque de código que te extraje anteriormente .. por qué .. si no se cumple igualmetne redireccion.
// Para eso . .con cada "envio de cabeceras" de este tipo de redirección .. ahí acabo la ejecución del escript con exit; ya no interesa que se ejecute más el script.

?>
<html>
etc ... Tu hTML y más código PHP por médio para componer esta página.
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 20/10/2006, 15:22
 
Fecha de Ingreso: abril-2005
Mensajes: 491
Antigüedad: 19 años, 7 meses
Puntos: 1
Haber si que me has dado una buena catedra al respecto de optimizar y saber utilizar el código, corregí el problema y entiendo como estructuras los bloques de código PHP junto con el HTML...estaba bastante desordenado mi código al menos ahora que lo vuelvo a ver es , la forma que planteas es mucho mejor...

entendí el tema de los headers y me quedo mucho más claro aplicando este ejemplo...y bueno para terminar Grax. denuevo Man .. cómo siempre al Hueso
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 14:11.