Foros del Web » Programando para Internet » PHP »

Problemas con header()

Estas en el tema de Problemas con header() en el foro de PHP en Foros del Web. <?php session_start(); if($_POST[aceptar]){ $link = $_GET[pro]; require('../class_usuario_emp.php'); $class_usuario_emp = new class_usuario_emp(); $valor = $class_usuario_emp->existe_usuario($_POST[_usuario]); if($valor){ if($link=="modificar"){ "esta seria la linea 17" header('Location: modificar_usuario_emp1.php'); $_SESSION[usuario] = ...
  #1 (permalink)  
Antiguo 20/07/2006, 12:06
 
Fecha de Ingreso: mayo-2006
Mensajes: 49
Antigüedad: 11 años, 6 meses
Puntos: 0
Exclamación Problemas con header()

<?php
session_start();
if($_POST[aceptar]){
$link = $_GET[pro];
require('../class_usuario_emp.php');
$class_usuario_emp = new class_usuario_emp();
$valor = $class_usuario_emp->existe_usuario($_POST[_usuario]);
if($valor){
if($link=="modificar"){
"esta seria la linea 17" header('Location: modificar_usuario_emp1.php');
$_SESSION[usuario] = $_POST[_usuario];
}
elseif($link=="eliminar"){
header('Location: eliminar_usuario_emp1.php');
$_SESSION[usuario] = $_POST[_usuario];
}
}
else{ echo '<div class="subtitulo1" style="position:relative; left:10; top:10; width:249"><strong>'.$class_usuario_emp->mensaje.'</strong></div>';
}
}

Este es el codigo que utilizo para buscar un usuario, en el momento de ingresar el id del usuario en la caja de texto($_POST[_usuario]) y al presionar el boton aceptar que envia un campo oculto con la informacion para la variable $link y la info de la caja de texto tendria que llamarme una pagina(header...) y al mismo tiempo enviar una variable de session ($_SESSION[usuario]) para realizar una busqueda en esa pagina.

El problema es el siguiente:
de forma local osea trabajando con apache2, php 4.4 y mysql 5 no tengo ningun problema.

Al subirlo al servidor me sale este error:
Warning: Cannot modify header information - headers already sent by (output started at /usr/local/psa/home/vhosts/sadmin.net/httpdocs/webmaster/usuario_empresa/plantillas_usuario/seleccion_emp1.php:9) in /usr/local/psa/home/vhosts/sadmin.net/httpdocs/webmaster/usuario_empresa/plantillas_usuario/seleccion_emp1.php on line 17.

No se que pasa, y no se de que otra forma hacerlo, si alguien me pudiese aconsejar de que otra forma hacerlo le agradeceria.

Si no es muy claro por favor avisarme, y yo lo explicare mejor.

Gracias!!!
  #2 (permalink)  
Antiguo 20/07/2006, 12:32
Avatar de pato_volador  
Fecha de Ingreso: octubre-2005
Ubicación: Planeta tierra
Mensajes: 254
Antigüedad: 12 años, 2 meses
Puntos: 0
Ese mesaje te sale por que estas mandando a pantalla "esta seria la linea 17"
Jejejeeje... recuerda que para que funcione un header NO DEBE existir ningunt tipo de salida a pantalla antes que el... ni un echo ni de html

saludos
__________________
De todas las cosas que queria ser... :-D acabe siendo un pato volador... :risa:
http://patovolador.wordpress.com
  #3 (permalink)  
Antiguo 20/07/2006, 13:08
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.653
Antigüedad: 12 años, 5 meses
Puntos: 88
lo que dice pato_ es muy cierto, no debe de haber ninguna salida en pantalla pero existe una función que que evita que tenga que ser así.

al comienzo de tu hoja(pág.) coloca ob_start(); y al final añades ob_end_flush().

para que te de una mejor idea, puedes leer esto:
http://mx.php.net/ob_start

espero q t sirva.
  #4 (permalink)  
Antiguo 20/07/2006, 14:40
 
Fecha de Ingreso: mayo-2006
Mensajes: 49
Antigüedad: 11 años, 6 meses
Puntos: 0
Con todo respeto pero creo que es obvio que coloque esta linea ("esta seria la linea 17") para indicarles cual era la linea que indica el error.

Gracias!!!
  #5 (permalink)  
Antiguo 20/07/2006, 15:02
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 9 meses
Puntos: 17
Cita:
Iniciado por axherreram
Con todo respeto pero creo que es obvio que coloque esta linea ("esta seria la linea 17") para indicarles cual era la linea que indica el error.

Gracias!!!
El error dice que el "output" empezó en la línea 9 de ese archivo

Cita:
Warning: Cannot modify header information - headers already sent by (output started at /usr/local/.../usuario_empresa/plantillas_usuario/seleccion_emp1.php:9) in /usr/local/.../usuario_empresa/plantillas_usuario/seleccion_emp1.php on line 17.
Deberías ver que hay antes (las primeras 7 líneas no las veo, el require puede generar output, etc)

y en el futuro para marcar la línea podrías usar // <---- está es la línea
y por supuesto usar [ php ] para marcar el código

Código PHP:

<?php
session_start
();
if(
$_POST[aceptar]){
$link $_GET[pro];
require(
'../class_usuario_emp.php');
$class_usuario_emp = new class_usuario_emp();
$valor $class_usuario_emp->existe_usuario($_POST[_usuario]);
if(
$valor){
if(
$link=="modificar"){
header('Location: modificar_usuario_emp1.php'); // <---------------- esta seria la linea 17 
$_SESSION[usuario] = $_POST[_usuario];
}
elseif(
$link=="eliminar"){
header('Location: eliminar_usuario_emp1.php');
$_SESSION[usuario] = $_POST[_usuario];
}
}
else{ echo 
'<div class="subtitulo1" style="position:relative; left:10; top:10; width:249"><strong>'.$class_usuario_emp->mensaje.'</strong></div>';
}
}

Última edición por Cluster; 20/07/2006 a las 15:30
  #6 (permalink)  
Antiguo 20/07/2006, 15:29
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por pato_volador
Ese mesaje te sale por que estas mandando a pantalla "esta seria la linea 17"
Jejejeeje... recuerda que para que funcione un header NO DEBE existir ningunt tipo de salida a pantalla antes que el... ni un echo ni de html

saludos
No es tan "obvio" entre otras cosas por qué no señalas la línea en concreto que es la "17" .. (el foro no numera líneas y tu eres quien debes facilitar un poco la cosa para el que pretenda ayudarte).

También el código hace mención a otros códigos que "inserta" en ese mismo y no vemos que hacen estos .. Tal vez ahí esté el problema (no es el caso por qué el mensaje de error dice textualmente donde y en que script en ese caso): seleccion_emp1.php línea 9

El problema que tienes como te han mencionado es de "envio de salida" antes de funciones como header() o session_start().

Sobre el código que presentas .. Esto no tiene sentido si te fijas como funciona realmente una redirección y cual es su objetivo:

Con un "header()" (función que envia cabeceras HTTP al cliente) de tipo "Location" (de redirección) le indicas al navegador en este caso que "cambie" la página que está viendo (que se cambie a tal URL) .. Supuestamente en ese punto de ejecución de nuestro script PHP ya no nos insteresa que se ejecute nada más de código PHP . .por ende podemos hacer un "exit" y terminar la ejecución del script en ese punto y así evitarnos la mayor parte de juego de "if .. .else .. elsefi..." que haces.

Por otro lado te resultaría más claro usar

switch() en lugar de tus "if .. else .. elseif ...".

Código PHP:
session_start(); 
if(isset(
$_POST['aceptar'])){ 
   require(
'../class_usuario_emp.php'); 
   
$class_usuario_emp = new class_usuario_emp(); 
   
$valor $class_usuario_emp->existe_usuario($_POST['_usuario']); 
   
   if (
$valor){
      switch(
$_GET['pro']){
         case 
"modificar":
             
$_SESSION['usuario'] = $_POST['_usuario']; 
             
header('Location: modificar_usuario_emp1.php'); 
             exit;
          break;

          case 
"eliminar":
              
$_SESSION['usuario'] = $_POST['_usuario']; 
              
header('Location: eliminar_usuario_emp1.php'); 
              exit;
          break;
    
         default:
            
// caso por defecto ..
      
}
    } else {
       
header ("Location: errores.php");
       exit; 
    }
  } else {
     
header ("Location: errores.php");
     exit;

Fijate que el código queda bastante más ordenado, fácil de seguir y natural ...
(No sé si me abré dejado algún cierre de algún if() .. pero esa es la idea)

Este tipo de scripts de proceso NO debería de tener nada más de "HTML" por médio .. no le corresponde a este script mostrar mensajes de error ni de exito .. eso lo debes hacer en las páginas/scripts que redireccionas ante tal error o mensaje que dar en general.

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 21/07/2006, 10:12
 
Fecha de Ingreso: mayo-2006
Mensajes: 49
Antigüedad: 11 años, 6 meses
Puntos: 0
Gracias amigos las respuestas que me dieron son muy validas y de mucha ayuda,les agradezco muchisssiiimo. Gracias a DIOS existe este foro y existen ustedes para colaborarle a los demas.
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 19:10.