Foros del Web » Programando para Internet » PHP »

header Problema

Estas en el tema de header Problema en el foro de PHP en Foros del Web. Abajo les dejo el codigo donde tengo el problema, en el cual figura un formulario de usuario y contraseña en el cual al hacer post ...
  #1 (permalink)  
Antiguo 24/04/2007, 21:02
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 9 meses
Puntos: 19
De acuerdo header Problema

Abajo les dejo el codigo donde tengo el problema, en el cual figura un formulario de usuario y contraseña en el cual al hacer post sobre la misma pagina detecta si el usuaior y la contraseña son validos y existen, si esto es asi entonces se envia al usuario a su panelk de control, pero el problema viene que tengo que usar el redireccionamiento de location.href='' de javascript ya que no me permite usar header("Location: pagina.php"); ya que me tira error del siguiente tipo
Cita:
Warning: Cannot modify header information - headers already sent by (output started at D:\AppServ\www\administracion\admin_comprueba.php: 15) in D:\AppServ\www\administracion\admin_comprueba.php on line 73
y lo malo del location.href de javascript es que tiene que cargar la pagina hasta el momento que se eejcuta esa linea y eso hace mas lento todo, no entiendo como el header location de php no funciona
Alguna solución ? aqui les dejo el codigo y espero haber sido claro muchas gracias
Cristián
Código PHP:
<?php 
if ($_SESSION['OK']!=="NeoIngreso"){ 
?>
<link href="estilos-general.css" rel="stylesheet" type="text/css">
<table width="735" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td width="450" align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td width="240" align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td width="15" align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
  </tr>
  <tr>
    <td width="15" align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td width="450" align="left" valign="top" bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td align="left" valign="top"><img src="imagenes/titulos/modulos-ses-log.jpg" width="450" height="31"></td>
      </tr>
      <tr>
        <td align="left" valign="top"><br />
          <br /></td>
      </tr>
      <tr>
        <td align="left" valign="top">
        <form name="form1" method="post" action="">
          <table border="0" cellspacing="0" cellpadding="0">
            <tr>
              <td align="left" valign="top">Usuario </td>
              <td align="left" valign="top">&nbsp;</td>
              <td align="left" valign="top"><input name="login" type="text" class="font_12px_sin_color" id="login" value="<?=$_POST['login']; ?>" size="25"></td>
            </tr>
            <tr>
              <td align="left" valign="top">Contrase&ntilde;a</td>
              <td align="left" valign="top">&nbsp;</td>
              <td align="left" valign="top"><input name="pass" type="password" class="font_12px_sin_color" id="pass" value="<?=$_POST['pass']; ?>" size="25"></td>
            </tr>
            <tr>
              <td align="left" valign="top">&nbsp;</td>
              <td colspan="2" align="left" valign="top">&nbsp;</td>
              </tr>
            <tr>
              <td align="left" valign="top">&nbsp;</td>
              <td colspan="2" align="left" valign="top">
                <input name="Ingresar" type="submit" class="font_12px_sin_color" id="contacto-enviar" value="Ingresar"></td>
              </tr>
          </table>
         </form>
        </td>
      </tr>
      <tr>
        <td align="left" valign="top">
        <br />
        <?
      
      
if ( isset ( $_POST['login'] ) ) {
      
              
$result_usuario=mysql_db_query("$db_name","SELECT * FROM $tabla_usuarios WHERE usuario_id='".$_POST['login']."';",$link);
            
            if(!
mysql_num_rows($result_usuario)){
            
            
?>
            El usuario no existe o es incorrecto
            <?
            
} else {
            
                
$array_usuario=mysql_fetch_array($result_usuario);
                
                if(
$array_usuario["password"]==crypt($_POST['pass'], "semilla") ){
                
                    
$_SESSION['OK'] = "NeoIngreso";
                    
$_SESSION['login'] = $_POST['login'];
                    
$_SESSION['id'] = $array_usuario["id"];
                    
                    echo 
"<script languaje='JavaScript'>location.href='inicio.php?modulo=usuario-panel';</script>";
                    
                    exit();
                    
                    } else {
                    
                    
?>
                    Password incorrecto!
                    <?
                    
                    

                }
                
            }
            
?>    </td>
      </tr>
    </table></td>
    <td width="15" align="left" valign="top" background="imagenes/body/barra-gris-vertical.jpg">&nbsp;</td>
    <td width="240" align="left" valign="top" bgcolor="#FFFFFF"><?php include("body-derecha.php"); ?></td>
    <td width="15" align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
  </tr>
  <tr>
    <td align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
    <td width="15" align="left" valign="top" bgcolor="#FFFFFF">&nbsp;</td>
  </tr>
</table>
<?
} else {

echo 
"<script languaje='JavaScript'>location.href='inicio.php?modulo=usuario-panel';</script>";
exit();

}
?>
  #2 (permalink)  
Antiguo 24/04/2007, 21:06
Avatar de cplus  
Fecha de Ingreso: abril-2007
Mensajes: 164
Antigüedad: 17 años
Puntos: 1
Re: header Problema

usa header("Location: http://www.example.com/");

function.header.php

pero seria mente yo me plantearia a realizar el codigo de otra manera, te explico

intenta siempre separa el HTML del PHP recuerda... que PHP se ejecuta antes en modo makina que el HTML en modo usuario, osea, que el php va antes que el HTML... almenos hay que intentarlo siempre que se pueda, si no sepuede, se separan los files... ya que pueden dar problemas con el simple ejemplo del header.


yo que haria....


un form.html o php como lo quieras llamar, con el form dentro... llamando a otro file llamado ... acceso.php, y dentro de ese file ya haces las comprobaciones que quieras. asi jamas te dara problemas

si mezclas code no avanzas... empiza ya a separar.


un ejemplo de 2 files separados

Código PHP:
<form id="login" action="form.php?nucleo=nueva_cuenta_ok" method="post" target="_self" name="login">
    <
table width="60%" border="1" cellspacing="0" cellpadding="0" class="vedit">
        <
tr>
            <
td colspan="2" align="center" valign="middle">NUEVA CUENTA DE USUARIO</td>
        </
tr>
        <
tr>
            <
td align="right" width="50%"><p id="blink">Nombre Usuario </p></td>
            <
td width="50%"> <input type="text" name="usuario" size="24"15 Max</td>
        </
tr>
        <
tr>
            <
td align="right" width="50%"><p id="blink2">Password Usuario </p></td>
            <
td width="50%"> <input type="password" name="password" size="24"15 Max</td>
        </
tr>
        <
tr>
            <
td colspan="2" align="center">
                <
input type="submit" value=".: Aceptar :." onClick="willSubmit=confirm('&iquest;Esta seguro de que quiere enviar los datos?');return willSubmit;" class="botones">
                <
input type="reset" value=".: Limpiar :." onClick="willReset=confirm('&iquest;Esta seguro de que quiere borrar los datos?');return willReset;" class="botones">
                <
input type="button" value=".: Cancelar :." onClick="history.back(-1)" class="botones">
            </
td>
        </
tr>
    </
table>
</
form


Código PHP:
if($_GET['nucleo'] == 'nueva_cuenta_ok'){

unset(
$_SESSION['usuario_id']);
unset(
$_SESSION['usuario_nick']);
unset(
$_SESSION['usuario_password']);
unset(
$_SESSION['usuario_seguridad']);
unset(
$_SESSION['storage_path']);

//comprobar que el formulario se completo
    
if(empty($_POST['usuario']) | empty($_POST['password'])){
        
header ("Location: error/error_04.php");
      exit;
    }

//comprobar si realmente existe el id en la base de datos,antes de mostrar los resultados, 2º error necesario
    
$mysql->query("SELECT * FROM usuarios WHERE nick='".$_POST['usuario']."' AND password='".$_POST['password']."'") or die("MySQL dice: ".mysql_error());
    
$result_ExisteIdUsuarioBaseDeDatos $mysql->num_rows();//resultado 0 o 1, 0 error 1 existe el registro id en la base de datos

//if para comprobar si existe
    
if(!empty($result_ExisteIdUsuarioBaseDeDatos)){
        
header ("Location: error/error_05.php");
      exit;
    }else{
        
        
$varPostUsuario FUNC_FormateaTextoCaracteresExtr($_POST['usuario']);

           
$varPath $varDirPrincipal.'/usuarios/'.$varPostUsuario;
           @
mkdir($varPath0700);

        
mysql_query("INSERT INTO usuarios values('','".$varPostUsuario."','".$_POST['password']."','6')") or die("MySQL dice: ".mysql_error());

echo 
"
<SCRIPT Language=\"JavaScript\">
alert(\"HOLA .: $varPostUsuario :. YA TIENES TU CUENTA PREMIUM\");
</SCRIPT>
<META HTTP-EQUIV=\"refresh\" CONTENT=\"0; URL=login.php\">"
;

    }
//end if

}//end menu 

Última edición por cplus; 24/04/2007 a las 21:13
  #3 (permalink)  
Antiguo 24/04/2007, 22:04
Usuario no validado
 
Fecha de Ingreso: julio-2003
Ubicación: <?="www.tuky.cl";?>
Mensajes: 132
Antigüedad: 20 años, 9 meses
Puntos: 4
Re: header Problema

Por defecto, los headers se deben enviar antes de cualquier etiqueta HTML, pero para enviarlas en cualquier lugar del código pone:

Código PHP:
<? ob_start(); ?>
en la primera linea de tu archivo..

saludos,
  #4 (permalink)  
Antiguo 24/04/2007, 22:22
Avatar de cplus  
Fecha de Ingreso: abril-2007
Mensajes: 164
Antigüedad: 17 años
Puntos: 1
Re: header Problema

ese truco no es del todo correcto, ya que sigues teniendo los problemas...

digamos que a la kk que acavas de pisar con tu zapato, le pones un papel encima.... y la dejas hay eternamente...

mal royo, corrige tu codigo hasta la saciedad y cuando termines... a la basura y empieza de 0, es la unica forma de aprender, el resto son gorrinadas...

LA UNICA SOLUCION ES SEPARAR CORRECTAMENTE EL CODIGO Y DE PASO PROGRAMAS SIN ERRORES PLEASE.


pd: no hay nada como romperse los cuernos... cuando te quieres dar cuenta... has aprendido 10 veces mas.
  #5 (permalink)  
Antiguo 24/04/2007, 23:13
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: header Problema

El ob_start(); no es una mala alternativa.
Muchas veces el modulo lo estás usando dentro de una plantilla html.
Entonces cargas la plantilla y dentro de ella una función que llame a los módulos y si dentro del modulo haces un header encontraras el mismo error.

La solución es usar ob_start(); . No lo veo como mala alternativa.
Suerte!
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 00:33.