Comunidad de diseño web y desarrollo en internet online

Problema con "headers already sent"

Citar            
MensajeEscrito el 29 Dic 2006 02:22 am
Hola a todos!
Soy bastante nuevo en php :oops: y tengo un problema que no puedo resolver.
Estoy validando los datos de un formulario. Cuando hay errores quiero redireccionar al form de nuevo aclarando esos errores.
El caso es que al redireccionar obtengo el siguiente error:
Warning: Cannot modify header information - headers already sent by (output started at /www/pleroma.org.ar/htdocs/registro_validar.php:1) in /www/pleroma.org.ar/htdocs/registro_validar.php on line 62


El problema apareció cuando subí todo al servidor. Trabajando offline andaba todo perfecto.

Averiguando un poco veo que es bastante común :crap: pero no lo resuelvo.
He leído http://www.cristalab.com/foros/viewtopic.php?p=212119#212119 y a partir de eso revisé el código buscando espacios en blanco (no hay), echos (no hay), includes con HTML (no uso, tenía un require para definir las constantes de conexión a MySQL pero lo saqué y ahora las constantes están al ppio. del código).

Para colmo, la página que origina el error de encabezado es la misma que hace la redirección (registro_validar.php).

Por si alguien tiene el tiempo y la voluntad de mirarlo, pongo el código por si se me está escapando algo:

Código :

<?php
define ('SQL_HOST', 'xx.xx.xx.xx');
define ('SQL_USER', 'xxx');
define ('SQL_PASS', 'xxxxxx');
define ('SQL_DB', 'xxx');
$conn = mysql_connect(SQL_HOST, SQL_USER, SQL_PASS) or die ('No fue posible conectar '.mysql_error());
mysql_select_db(SQL_DB, $conn);
$error = '';
$apellido = trim($_POST['apellido']);
if (empty($apellido)) {
   $error .= "Debe+completar+su+Apellido%21%0D%0A";
}
$nombre = trim($_POST['nombre']);
if (empty($nombre)) {
   $error .= "Debe+completar+su+Nombre%21%0D%0A";
}
$usuario = trim($_POST['usuario']);
if (empty($usuario)) {
   $error .= "Debe+completar+su+Nombre+de+Usuario%21%0D%0A";
} else{
   $sql = "SELECT
         alu_usuario
         FROM
         cur_alumnos
         WHERE
         alu_usuario = '".$usuario."'";
   $result = mysql_query($sql) or die ('Consulta no valida '.mysql_error());
   if (mysql_num_rows($result) > 0) {
      $error .= "El+Nombre+de+Usuario+solicitado+ya+esta+en+uso%21%0D%0A";
   }
}
$password = trim($_POST['password']);
if (empty($password)) {
   $error .= "Debe+completar+su+Contraseña%21%0D%0A";
}
$edad = trim($_POST['edad']);
if (!empty($edad)) {
   if (!is_numeric($edad)) {
      $error .= "Debe+expresar+su+Edad+en+numeros%21%0D%0A";
   }
}
$sexo = $_POST['sexo'];
$direccion = trim($_POST['direccion']);
if (empty($direccion)) {
   $error .= "Debe+completar+su+Direccion+Postal%21%0D%0A";
}
$ciudad = trim($_POST['ciudad']);
if (empty($ciudad)) {
   $error .= "Debe+completar+su+Ciudad+o+Pueblo%21%0D%0A";
}
$provincia = trim($_POST['provincia']);
$pais = $_POST['pais'];
if (empty($pais)) {
   $error .= "Debe+seleccionar+un+Pais%21%0D%0A";
}
$telefono = $_POST['telefono'];
$email = trim($_POST['email']);
if (empty($email)) {
   $error .= "Debe+completar+su+direccion+de+EMail%21%0D%0A";
}
if (!empty($error)) {
   header("location:registro.php?error=".$error);
} else {
   $sql = "INSERT INTO
         cur_alumnos
         (
         alu_apellido,
         alu_nombre,
         alu_usuario,
         alu_password,
         alu_edad,
         alu_sexo,
         alu_direccion,
         alu_ciudad,
         alu_provincia,
         alu_pais,
         alu_telefono,
         alu_email
         ) VALUES ('"
         .$apellido."','"
         .$nombre."','"
         .$usuario."','"
         .$password."','"
         .$edad."','"
         .$sexo."','"
         .$direccion."','"
         .$ciudad."','"
         .$provincia."','"
         .$pais."','"
         .$telefono."','"
         .$email."')";
   if (isset($sql) && !empty($sql)) {
      //DEBUG
      //echo "<!-- ".$sql."-->";
      $result = mysql_query($sql) or die('Error de Consulta, ver DEBUG '.mysql_error());
   }
   $fin_frase = '';
   if ($sexo == 'femenino') {
      $fin_frase .= 'a a Pléroma '.$nombre.'!';
   } else {
      $fin_frase .= 'o a Pléroma '.$nombre.'!';
   }   
?>


Si alguien me puede dar una mano estaré muy agradecido.
Perdón por lo extenso :crap:

Saludos,
rakidwam

Por rakidwam

663 de clabLevel

7 tutoriales
1 articulo

Genero:Masculino  

msie
Citar            
MensajeEscrito el 29 Dic 2006 12:19 pm
Tienes que tener algún espacio en blanco en algún sitio o header o algo, quizá si esta página la cargas desde otra (con un include o algo) la otra tenga algo que muestre por pantalla y provoca el error.... Siempre es algo de eso.

Por Yranac

421 de clabLevel



Genero:Masculino  

Lugo, Galicia

firefox
Citar            
MensajeEscrito el 29 Dic 2006 01:22 pm
Yranac,

Gracias por ocuparte. Ya pensé en eso y no encuentro nada!!
Esta página no se carga desde otra y no tiene includes.
No tengo la menor idea de cómo solucionar el asunto. :(

Rakidwam
:shock:

Por rakidwam

663 de clabLevel

7 tutoriales
1 articulo

Genero:Masculino  

msie
Citar            
MensajeEscrito el 29 Dic 2006 01:49 pm

Código :

if (!empty($error)) {
   header("location:registro.php?error=".$error);
   exit; //<--- agrega
}


No se si imprimas algo despues de eso pero asegurate de que no lo haga

¿Donde codificaste en dreamweaver?

Si es asi ni siquiera las etiquetas html deben estar alli.

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 29 Dic 2006 03:54 pm
Maikel,

La opción de exit ya la había probado sin resultado.
Respondiendo a tu comentario: más abajo del código que posteé hay HTML que muestra una bienvenida en el caso de que el form esté completo y sin errores.
La redirección ocurre cuando hay errores en el form.

Tu idea es que esa página que evalúa y luego redirecciona o graba NO tenga HTML?
Que haga algo así como una redirección en dos sentidos, hacia atrás si hay errores y hacia adelante si está todo bien?

Gracias por tu tiempo!! :)

Rakidwam
:shock:

Por rakidwam

663 de clabLevel

7 tutoriales
1 articulo

Genero:Masculino  

msie
Citar            
MensajeEscrito el 30 Dic 2006 09:30 pm
La idea y lo correcto es que antes de ejecutar el header, no debe haber ninguna salida. Mira esto simplemente causaria el error:


Código :

<?php
     header("location: pagina.php");
?>


Solo porque antes de la etiqueta <?php hay una linea en blanco y no puede haber nada. Esa linea en blanco es similar a que hicieras esto:

Código :

<?php
echo "\n";
?>


saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 30 Dic 2006 10:27 pm

Por DaHouseCat

Claber

1011 de clabLevel

2 tutoriales

Genero:Masculino  

Smarphones Fan Boy

firefox
Citar            
MensajeEscrito el 30 Dic 2006 11:56 pm
Gracias a todos los que se preocuparon y ocuparon! :)
El problema está solucionado, aunque todavía no entiendo exactamente como.
La redirección fallaba aún con una sola línea de código (sacando TODO lo demás).
Lo único que quedaba era que en Dreamweaver estuviera agregando algo que no era visible (lo que me parecía exótico), por lo que armé el php directamente en el block de notas.
Funcionó perfecto!!! ^^
Después agregué el resto del código (siempre en el block) y listo!!

Alguien tiene idea de qué es lo que el Dream ... agrega, y que no se vé????
JURO que no había NADA que enviara cabezales!!

Saludos y muy buen año!!
Rak
:shock:

Por rakidwam

663 de clabLevel

7 tutoriales
1 articulo

Genero:Masculino  

msie
Citar            
MensajeEscrito el 14 Ene 2007 09:32 pm
No uses dreamwaver, programa de verdad, usa un editor de php puro sin *******.
VIVA PHP

[pedro]Esta última palabra era innecesaria.[/pedro]

Por petrov

186 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.