Foros del Web » Programando para Internet » PHP »

error en un script. me podeis ayudar?

Estas en el tema de error en un script. me podeis ayudar? en el foro de PHP en Foros del Web. hola, tengo un script para registrar usuarios en mi web, bueno, estoy en ello, y me gustaria saber que quiere decir este error y como ...
  #1 (permalink)  
Antiguo 15/04/2004, 12:41
Avatar de yeta  
Fecha de Ingreso: enero-2004
Mensajes: 148
Antigüedad: 20 años, 10 meses
Puntos: 0
error en un script. me podeis ayudar?

hola, tengo un script para registrar usuarios en mi web, bueno, estoy en ello, y me gustaria saber que quiere decir este error y como solucionarlo:

Warning: Cannot modify header information - headers already sent by (output started at /home/webcindario/noeliafanclub/dar_alta_vip.php:46) in /home/webcindario/noeliafanclub/dar_alta_vip.php on line 89

el sript que da error es este:
Código PHP:
<?php

require('CreaConexion.inc');

$con=connect() or  die ("<li> No se pudo realizar la conexion (LINEA) ".__LINE__." (ARCHIVO) "__FILE__);
if(
$HTTP_POST_VARS){
    foreach(
$HTTP_POST_VARS as $variable=>$valor_variable){
        ${
$variable}=$HTTP_POST_VARS[$variable];
        if(!${
$variable}) error("<li> el campo ".$variable." est&aacute; vacio");
        if(
$contrasenya!=$confirmacionerror("<li> Las contrase&ntilde;as no coinciden");
        if (!
eregi("^[[:alnum:]_\-]{2,20}$", ${$variable}))  error("<li> En el campo ".$variable." solo caracteres alfanum&eacute;ricos de 2 a 20");
    }

$result=query("SELECT * FROM usuarios WHERE usuario='$usuario'");

if(
mysql_num_rows($result)) error("<li> Este usuario ya existe ");

query("INSERT INTO usuarios VALUES ('$usuario','$contrasenya','$nombre','$apellido1','$apellido2','$clientdate')");

mysql_close($con);

header("location: index.php");

    
}

   else {
      
error("<li> Acceso denegado");
   }
?>

Última edición por yeta; 15/04/2004 a las 12:42
  #2 (permalink)  
Antiguo 15/04/2004, 13:53
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años
Puntos: 1
Prueba a ...

Prueba a poner esto antes de todo código y al final:
Código PHP:
 //Este al principio
 
ob_start();
 
//Aquí código HTML y demás
 //Este al final
 
ob_end_flush(); 
Salu2
__________________
Ing. Reynier Pérez Mira
  #3 (permalink)  
Antiguo 15/04/2004, 13:57
Avatar de yeta  
Fecha de Ingreso: enero-2004
Mensajes: 148
Antigüedad: 20 años, 10 meses
Puntos: 0
y para que sirve eso?
tengo que ponerlo en todas las paginas?
y soy asi de corto, pro no entiendo cm quieres que lo haga.
puedes repetirlo x favor?can you repeat please?
gracias ;)
  #4 (permalink)  
Antiguo 15/04/2004, 14:26
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 22 años
Puntos: 1
Eso sirve para

ob_start() // enciende el buffer de salida
ob_end_flush() // Envia el contenido del buffer a la salida y apaga el mismo

ob_start: http://www.php.net/manual/es/function.ob-start.php
ob_end_flush: http://www.php.net/manual/es/function.ob-end-flush.php

Salu2
__________________
Ing. Reynier Pérez Mira
  #5 (permalink)  
Antiguo 15/04/2004, 14:27
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Creo y apuesto por el que los errores se deben de comprender y ver posibles soluciones:

Cita:
Warning: Cannot modify header information - headers already sent by (output started at /home/webcindario/noeliafanclub/dar_alta_vip.php:46) in /home/webcindario/noeliafanclub/dar_alta_vip.php on line 89
Ese error te está diciendo que en dar_alta_vip linea 46 tienes algo de HTML que has enviado al navegador . .Cuando se usa la función header() no se puede enviar nada al navegador antes de dicha función pues esa funcion mánda "comandos" HTTP al navegador para realizar acciones como la de tu caso "redireccionar" a otro sitio.

Cunao se habla de que no puede existir nada de salida al navegador se refiere a nada de HTML.. ni un simple espacio .. ni un salto de línea .. ni un echo "algo" .. nada.

Recuerda que PHP ejecuta priméro el código PHP y lo que resulte lo mandas al navegador .. así que estructuras tipo (como creo que tienes):

Código PHP:
<html>
<head>
</head>
<body>
<?
if (nose){
    
header ("location: talstio.tal");
} else {
    echo 
"bla bla";
}
?>
</body>
</html>
Así no tiene sentido el código si piensas como trabaja PHP .. para el momento (condición) que se ha de lanzar esa cabecera HTTP de redirección el HTML que hay por encima de el NO importa para PHP ni para el navegador pues .. antes de que se pueda ejecutar dicho HTML en el navegador se le envian las cabeceras que viajen por header() ..

En tu caso . la condición es:
1) o redireccionas
2) o muestras un mensaje ahí mismo .. es decir una página HTML completa con sus tags de apertura y cierre del código HTML

entonces quedaría así:

Código PHP:
<?
if (nose){
    
header ("location: talstio.tal");
} else {
?>
<html>
<head>
</head>
<body>
<?    echo "bla bla"?>
</body>
</html>
<?
}
?>
La propuesta de Reynier con esas funciones PHP de control del buffer de salida .. para este caso sólo son un "parche" (por lo menos lo veo yo así). Te solventan el problema a costa de un consumo extra de recursos del servidor cuando este problema se resuelve diseñando la estructura de tu código conforme trabaja un lenguaje del lado del servidor y más concretamente PHP.

De todas formas .. su uso sería:
Código PHP:
<?
//se inicia la captura de buffer de salida de PHP
ob_start()
?>


tu codigo HTML PHP o lo que gustes con tu header() done lo tengas ...


<?
// y se termina de capturar el buffer y se libera al cliente . .para este punto ya se ha relizado la redireccion y es lo que queda en última instancia en el buffer.
ob_end_flush();
?>
Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 21:40.