Foros del Web » Programando para Internet » PHP »

Problema con los headers

Estas en el tema de Problema con los headers en el foro de PHP en Foros del Web. ¡Hola! Ya estoy de nuevo dando la paliza. A ver si podeis ayudarme con este problema. Resulta que es una página de entrada, donde lo ...
  #1 (permalink)  
Antiguo 20/10/2005, 10:10
Avatar de malucha  
Fecha de Ingreso: abril-2005
Mensajes: 70
Antigüedad: 12 años, 8 meses
Puntos: 0
Problema con los headers

¡Hola!
Ya estoy de nuevo dando la paliza.
A ver si podeis ayudarme con este problema. Resulta que es una página de entrada, donde lo único que hay es un par de campos (usuario y contraseña) que hay que cubrir para acceder a las otras páginas. El problema es que al introducir el usuario y la contraseña, me da el siguiente error: Warning: Cannot modify header information - headers already sent by (output started at /home/apobrac/public_html/includes/conectar.inc:12) in /home/apobrac/public_html/admin/index.php on line 127

Y en la línea 127 hay lo siguiente:
Código PHP:
 header("Location: entrada.php"); 
Os pongo el código de php entero para ver si entendeis lo que quiero conseguir:
Código PHP:
<?php 
session_start
(); 
$_SESSION['login_user'] = $_POST['login'];
$_SESSION['login_pass'] = $_POST['pass'];
$var_usuario=$_SESSION['login_user'];
$var_pass=$_SESSION['login_pass'];
$_SESSION[auth] = true;
require_once(
"../includes/conectar.inc");
$dbd=conecta();
?>
 
/*AQUI VA CÓDIGO EN HTML QUE ME IMAGINO NO AFECTARÁ PARA NADA*/
 
<?php
 
if ($enviar
 {
 
// Validar campos del formulario: 
 
if ((!$login) || (!$pass)) {
  echo 
"<p class='fondomorado letrablanca negrita centrado'>*** ERROR! Los dos campos son obligatorios! ***</p>";
 }
 else {
  
$comprobar="SELECT * FROM varios WHERE ((user='$var_usuario') AND (pass='$var_pass'))";
  
$ejecuta=mysql_query($comprobar$dbd);
  if (!
$ejecuta) { // NO CONECTA
   
die ("<p class='fondomorado letrablanca negrita centrado'>Error en la búsqueda. Si ocurre este error comunícanoslo a [email protected]</p>" mysql_error());
  }
  else {
   if (
mysql_affected_rows()>0) { // USUARIO Y PASS CORRECTOS
    
header("Location: entrada.php");
    
//die; // MATAR PROCESO, SINO NO CARGA EL MODIFICAR, RECARGA AGENDA.PHP ;$
   
}
   else 
// USUARIO Y PASS FALLAN
    
echo ("<p class='fondomorado letrablanca negrita centrado'>El usuario y/o contrase&ntilde;a introducidos no se encuentran en la Base de Datos</p>");    
  }
 }
}
?>
<br>
<br><br>
<div align="center">
<?php
if($_GET['error']) {
 echo (
"<p class='fondomorado letrablanca negrita centrado'> Si no te identificas correctamente, no podrás visualizar el Panel de Control</p>");
 }
?>
<form action="index.php" method="post">
<table width="36%" class="letraoscura fondonaranja" cellpadding="3" cellspacing="3"><tr><td width="34%">Usuario: </td><td width="66%"><input type="text" maxlength="20" size="20" name="login"></td></tr>
<tr><td>Contraseña: </td><td><input type="password" maxlength="20" size="20" name="pass"></td></tr>
<tr><td>&nbsp;</td><td class="centrado"><input type="submit" name="enviar" value="Enviar"> &nbsp;&nbsp;&nbsp;<input type="reset" name="borrar" value="Borrar"></td></tr>
</table>
</form>
</div>

Código cambiado el 20/10/2005 a las 21:25

En fin, os agradezco mucho vuestra ayuda, os lo digo de verdad. A mi estas cosas no se me dan precisamente bien, así que necesito soporte bastante a menudo.
Gracias :)

Última edición por malucha; 20/10/2005 a las 14:14
  #2 (permalink)  
Antiguo 20/10/2005, 10:20
Avatar de jerkan  
Fecha de Ingreso: septiembre-2005
Mensajes: 1.607
Antigüedad: 12 años, 2 meses
Puntos: 18
Prueba de quitar la discontinuidad de etiquetas php aquí:

Cita:
require_once("../includes/conectar.inc");
$dbd=conecta();
?>
<?php
if ($enviar)
{
  #3 (permalink)  
Antiguo 20/10/2005, 10:31
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 13 años, 4 meses
Puntos: 0
anda

yo tenía ese mismo problema, y con esto se me solucionó solo debes agregar ob_start() al principio del codigo y ob_end_flush() al final de esta manera

Código PHP:
 
<?php
//no tiene que haber ninguna linea antes
ob_start();
 
 
//aqui tu codigo
 
 
//y esto ultimo de todo
ob_end_flush();
?>
avisanos si te funciono de esa manera
__________________
:aplauso: www.aponlinevillaguay.com.ar :aplauso:

Cita:
Iniciado por alguien
El arca de Noé fue hecha por principiantes, el Titanic por "profesionales".
  #4 (permalink)  
Antiguo 20/10/2005, 10:44
Avatar de helthon  
Fecha de Ingreso: junio-2005
Ubicación: Lima
Mensajes: 549
Antigüedad: 12 años, 6 meses
Puntos: 7
a mi tambien me ayudo bastante

<?php
//no tiene que haber ninguna linea antes
ob_start();
//aqui tu codigo
ob_end_flush();
?>
__________________
HELTHON FUENTES
FLORERIA FLORES PERU Floresperu.com.pe
Garantizamos que cada entrega de flores será de la más alta calidad y frescura
  #5 (permalink)  
Antiguo 20/10/2005, 11:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
satake y helthon

Uds. conocen que están haciendo cuando usan esas funciones de tratamiento del buffer de PHP?

Bueno, lo que están haciendo es sobre-cargar a PHP gestionando integramente el buffer de salida, cuando el problema se -debe- reordenando código simplemente y teniendo presente algunos detalles.

Un saludo,
  #6 (permalink)  
Antiguo 20/10/2005, 11:10
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
malucha ..

A que parte de conectar.inc corresponde la 12?

Asegurate que ese script .. no tenga ningún espacio al final de ?> .. ni al principio <? .. tampoco que no exista nada de HTML por médio en dicho script ni salida en general (echo "algo" ..etc).

Por cierto .. OJO!!!!! con dar nombres a tus archivos que incluyes como:
conectar.inc

Si te fijas .. si llamas a ese conectar.inc directamente vas a poder descargar el código (el script entero) con una simple llamada por el URL tipo:
http://www.tal.tal/conectar.inc

Para solventar el problema, simplemente llama a ese script con extensión .php al final:
conectar.inc.php

Un saludo,
  #7 (permalink)  
Antiguo 20/10/2005, 14:06
Avatar de malucha  
Fecha de Ingreso: abril-2005
Mensajes: 70
Antigüedad: 12 años, 8 meses
Puntos: 0
Gracias cluster :P

Ya me recomendaron lo de cambiarle la extensión .inc por php y ya lo modifiqué, pero gracias por avisar :P

El tema del problema que, por cierto, no se solucionó con el ob_start y end, ¿se supone que está en el código que estaría incluido en el antiguo conectar.inc? Porque ciertamente lo utilizo en otras páginas y no me da ningún problema como este.
No tiene ningún espacio ni antes del <?php ni después del ?>.
Es más, este es el código:
Código PHP:
<?php
function conecta()
{
$dbd=mysql_connect("localhost""loquesea""loquesea2");
if (!
$dbd)
die (
"<h3>*** ERROR al conectar... :(("); if (!mysql_select_db("nombreBD"$dbd))
die(
"<h3>ERROR: al seleccionar</h3>".mysql_errno());
return 
$dbd;
}
?>
A todo esto, no tengo ninguna línea 12 en el conectar.php
Me imagino que será del index.php que es un poco chapucero, pero de cualquier manera tampoco hay ninguna parte de php en esa zona, es la parte que ocupa la plantilla asique no se suele tocar para nada. De cualquier manera, vuelvo a modificar el código que puse en el mensaje anterior, a ver si con tanto cambio de arriba para abajo veis las cosas un poco más claras que yo.

¡¡Yo sigo loqueando con el warning!!

Gracias a todos por echarme una mano. ¡No dejeis de hacerlo! :P
  #8 (permalink)  
Antiguo 20/10/2005, 14:21
Avatar de PeiShar  
Fecha de Ingreso: abril-2001
Ubicación: España
Mensajes: 125
Antigüedad: 16 años, 7 meses
Puntos: 0
Puede ser que en la línea 127 del index.php, que por cierto no aparece en el código que nos suministras, intentes introducir el header por segunda vez. Porque el mensaje que te sale te está diciendo eso precisamente. Saludos y suerte.
  #9 (permalink)  
Antiguo 20/10/2005, 14:54
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 13 años, 4 meses
Puntos: 101
... creo un pequeño malentendido con las palabras de Cluster... el caso es que, en todo el código (incluyendo include()'s) no debes tener ninguna salida antes de ocupar session_start() y header()... así que, donde comentas:
Código:
/*AQUI VA CÓDIGO EN HTML QUE ME IMAGINO NO AFECTARÁ PARA NADA*/
temo que no es así... si afecta y es el motivo de tu error.

Ya lo dijo Clus, necesitas reordenar tu código de manera que primero hagas tu validación de manera que no imprimas nada (en pantalla) antes de redireccionar; hasta lógico es si lo piensas bien ¿para qué tener alguna salida si se va a redireccionar?, ¿para qué mostrar HTML si se le va a impedir su acceso??.
www.php.net/header

... no sé que hayas editado... pero procura hacerlo solo en casos necesarios. Ve que puedes confundir a quienes intentamos aportar algo de ayuda (yo estoy confundido, no sé si el comentario de PeiShar tenga igual relación).

Un saludo!
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #10 (permalink)  
Antiguo 22/10/2005, 12:24
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 13 años, 4 meses
Puntos: 0
puntoycoma

fijate en esta linea, no te falta el punto y coma al final o no tiene nada que ver?

Código PHP:
die ("<h3>*** ERROR al conectar... :(("); if (!mysql_select_db("nombreBD"$dbd)) 
te quedaría

Código PHP:
die ("<h3>*** ERROR al conectar... :(("); if (!mysql_select_db("nombreBD"$dbd)); 
__________________
:aplauso: www.aponlinevillaguay.com.ar :aplauso:

Cita:
Iniciado por alguien
El arca de Noé fue hecha por principiantes, el Titanic por "profesionales".
  #11 (permalink)  
Antiguo 22/10/2005, 12:35
Avatar de satake  
Fecha de Ingreso: julio-2004
Mensajes: 140
Antigüedad: 13 años, 4 meses
Puntos: 0
como hago

bueno mi codigo de un script empieza asi, sin nada de html antes y de la misma manera no me fuinciona, solo anduvo cuando le agregué esas funciones

Código PHP:
<?php
if ($_GET["seccion"] == "turismo")
{
header ("Location: ../turismo/turi.htm");
}elseif (
$_GET["seccion"] == "chat")
{
header ("Location: ../chat/login.php");
}elseif (
$_GET["seccion"] == "encuanterior")
{
header ("Location: ../encuesta/anteriores.php");
}else{
 
?>
acá va código html
<?php
 
}
?>
__________________
:aplauso: www.aponlinevillaguay.com.ar :aplauso:

Cita:
Iniciado por alguien
El arca de Noé fue hecha por principiantes, el Titanic por "profesionales".
  #12 (permalink)  
Antiguo 22/10/2005, 13:18
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 12 años, 2 meses
Puntos: 12
No lei todos los post, pero cuando marca ese error yo uso:

("header('Location: pagina-web.php')");

Saludos
  #13 (permalink)  
Antiguo 25/10/2005, 10:31
Avatar de malucha  
Fecha de Ingreso: abril-2005
Mensajes: 70
Antigüedad: 12 años, 8 meses
Puntos: 0
Bueno chicos, muchas gracias a todos por vuestro interés y ayuda.
Finalmente separé las páginas: una simplemente para todo el código html y el formulario, y otra exclusivamente para el código php.
Ahora no me da ningún error, así que probablemente en ese código que yo decía que no afectaría al desarrollo sí afectaba como bien decía alguno de vosotros.
Os invito a visitar la página. Se admiten críticas pero no seais muy duros que aun estoy empezando ;P. La página es la de la firma, espero que os guste, un beso y muchas gracias de nuevo.
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 17:14.