Foros del Web » Programando para Internet » PHP »

HEADER no me funciona

Estas en el tema de HEADER no me funciona en el foro de PHP en Foros del Web. Pues eso, en el servidor donde esta alojada mi pagina web tienen la versión de PHP 4.3.10-18, y utilizo la función header pero no me ...
  #1 (permalink)  
Antiguo 04/12/2006, 07:03
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
HEADER no me funciona

Pues eso, en el servidor donde esta alojada mi pagina web tienen la versión de PHP 4.3.10-18, y utilizo la función header pero no me funciona se me queda en el script y no va donde le indico



Bueno os explico un poco lo que va el tema. tengo un formulario en insertar.php donde le pasa los datos a procesar.php para que depsues de comprobar unas cosas los inserte en la Base de datos, cuando termina de insertarlos quiero que vulva a insertar.php pero no lo hace, se me queda en la pagina en blanco y la barra de direccion me pone www.loquesea.com/procesar.php.

esto esta al final del script del archivo procesar.php
Código PHP:
header("Location: ./insertar.php"); 
Lo he probado en un servidor gratuito (iespana) donde tienen PHP 5, y alli si que funciona, entonces mi pregunta es:
¿en la version php 4.13 no funciona header?
Si es así, ¿hay algo parecido para poderlo utilizar en esa version?

Muchas gracias!!
  #2 (permalink)  
Antiguo 04/12/2006, 07:11
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 19 años
Puntos: 2
Debe de haber otra cosa, ya que la funcion header esta disponible desde mucho antes de la version que ocupas.
__________________
Saludos!
Mty-NL..
  #3 (permalink)  
Antiguo 04/12/2006, 07:18
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Y que puede ser? Por que en IESPANA va todo muy bien y en mi servidor (VULKANO) no lo hace. Aqui pongo mi codigo a ver si utilizo algo que la version que tengo no lo reconoce.

Código PHP:
<?php 
       
include("conex.php"); 
       
$link=Conectarse(); 
       
$titulo=$_POST['titulo']; 
       
$categoria=$_POST['categoria']; 
       
$comentario=$_POST['comentario'];
       
//Variable para saber si se produce algun error
       
$error=0;
    
        
// Guarda las caracteristicas de la imagen
        //nombre_archivo=al directorio y al nombre que quieres que se guarde la foto
        
$nombre_archivo "img/".$_FILES['imagen']['name']; 
        
//tipo_archivo= a la extension del archivo en nuestro caso solo aceptamos imagenes (jpg, gif y png)
        
$tipo_archivo $_FILES['imagen']['type'];
        
// tamano_archivo= Almacena el tamaño del archivo en bytes
        
$tamano_archivo $_FILES['imagen']['size']; 
        
//compruebo si las características del archivo son las que deseo 
        
if($nombre_archivo!='img/'){
        if (!((
strpos($tipo_archivo"gif") || strpos($tipo_archivo"jpeg")) && ($tamano_archivo 200000))) { 
          
//el tamaño o la extension del archivo no son correctas se pone error=1
          
$error=1;

                         
        }else{ 
        if (
move_uploaded_file($_FILES['imagen']['tmp_name'], $nombre_archivo)){
         
// El archivo ha sido cargado con éxito     
           
        
        
}else{ 
        
//No se ha podido guardar el archivo en el servidor error=2
        
$error=2;
               
         } 
       }
       }
           
// Comprueba si tiene algun error
               
if ($error==1){
            echo 
"<script> alert (\"El archivo no debe tener un tamaño superior a 200 KB y deber ser JPG o GIF\"); </script>";
            echo 
"<script language=Javascript> location.href=\"insertar.php\"; </script>";
            die(); }
            elseif (
$error==2){
            echo 
"<script> alert (\"No se ha podido guardar la imagen en el SERVIDOR \"); </script>";
            echo 
"<script language=Javascript> location.href=\"insertar.php\"; </script>";
            die(); 
            }
            
//si no hay errores se inserta en la TABLA
            
else{
            
mysql_query("insert into noticias(titulo,categoria,comentario,imagen) values ('$titulo','$categoria','$comentario','$nombre_archivo')");   
           
             
header("Location: ./insertar.php"); 
               }
?>
  #4 (permalink)  
Antiguo 04/12/2006, 08:03
 
Fecha de Ingreso: diciembre-2006
Mensajes: 25
Antigüedad: 17 años, 5 meses
Puntos: 0
De acuerdo sobre imagenes

Oye amigo veo que guardas las imagenes en la base de datos me podrias decir como es unicamente puedo guardarlas pero al momento de extraerla para mostrarlas al servidor no puedo ya tengo un tema aqui pero nadie me contesta me podrias ayudar con un ejemplo te lo agradeceria mucho amigo
  #5 (permalink)  
Antiguo 04/12/2006, 09:44
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Axedrez no guardo las imagenes en la base de datos, las guardo en el servidor mas concretamente en la carpeta "img" en la variable $nombre_archivo guardo la dirección donde se encuentra la imagen con el nombre, por ejemplo si guardo una imagen que se llama cielo.jpg, la variable $nombre_archivo contendrá "img/cielo.jpg" luego para mostrar la imagen utilizo codigo HTML <img src=$nombre_archivo>
No guardo las imagenes en la base de datos por que la tengo limitada a 25 MB y no quiero que pete.

Nadie me da una solucion con lo de HEADER, que no me funciona en el PHP 4.13??
  #6 (permalink)  
Antiguo 04/12/2006, 09:54
Avatar de eits  
Fecha de Ingreso: junio-2005
Ubicación: valladolid, yucatán
Mensajes: 1.655
Antigüedad: 18 años, 10 meses
Puntos: 88
tu problema es que tienes dentro de tu código salidas a pantalla, antes de header no debe de existir ningun echo o print o printf nada que sea salida en pantalla.

para solucionarlo coloca al principio de tu pag. ob_start() y al final ob_end_flush().

espero y te sirva.
saludos
__________________
El amor es la locura mas lucida que tiene el hombre.- Andres Henestrosa
la tristeza no existe, solo es... la ausencia de la felicidad.
  #7 (permalink)  
Antiguo 04/12/2006, 10:03
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
EITS, gracias por tu ayuda, pero me sigue sin funcionar, esas salidas de pantallas son msgbox, ventanitas que informa por que no se ha podido insertar la noticia, por lo menos en el PHP5 no hay problema.

Una cosa ob_start() lo he puesto despues de "<?" y el ob_end_flush en la linia de antes del "?>" esta bien asi?

No hay una funcion parecida al header??
  #8 (permalink)  
Antiguo 04/12/2006, 10:09
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
1) En efecto tienes bien lo de ob_start().
2) Algo parecido al header(), podria ser window.location de javascript.
3) Cómo te mencionaban no puede haber ningun tipo de salida antes del header() ya sean echo "";o etiquetas tipo <html>.

Saludillos.
  #9 (permalink)  
Antiguo 04/12/2006, 10:16
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Gracias por tu ayuda muled, pero me estoy volviendo loco con el puñetero "header" ahora he comentado todos los echo no hay ningun tipo de salida antes del header, y nada de nada y como repito en el servidor de IESPANA gratuito si que funciona.

Como funciona lo de windows.location?

Alguien me quiere echar otra mano??
  #10 (permalink)  
Antiguo 04/12/2006, 10:21
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
1) Te recomiendo que postees el código tal cual, que se encuentre antes del header.

2)window.location es el equivalente a poner header("Location: www.yahoo.com");
Es decir

Código HTML:
<script>
window.location = "http://www.forosdelweb.com";
</script> 
Saludillos.
  #11 (permalink)  
Antiguo 04/12/2006, 10:35
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Mauled ahora si ke me funciona con el script windows.location, cuando termina de procesar la informacion (procesar.php) vuelve a la pagina insertar.php, pero hay un problema, jo entro a insertar.php mediante usuario y contraseña (sesiones) y cuando procesar.php vuelve a insertar.php me sale el error como si no estubiera logueado y me tengo ke volver a loguear

No me pasa en el PHP 5
hay alguna explicacion??
  #12 (permalink)  
Antiguo 04/12/2006, 10:49
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
De acuerdo

1)En tu script procesar.php ¿Estas eliminado acaso todas las variables de session?

2) Tendriamos que ver tu script para ver que esta sucediendo, si estas usando alguna función exclusiva de php5, o alguna declaración que tengas mal y en hosting externo los errores no esten actividos.

Saludillos.
  #13 (permalink)  
Antiguo 04/12/2006, 11:33
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
maulead gracias por tu ayuda y dedicacion me estas salvando, bueno pues el script procesar.php es este

Código PHP:
<?php 

        
include("conex.php"); 
       
$link=Conectarse(); 
       
$titulo=$_POST['titulo']; 
       
$categoria=$_POST['categoria']; 
       
$comentario=$_POST['comentario'];
       
//Variable para saber si se produce algun error
       
$error=0;
    
        
// Guarda las caracteristicas de la imagen
        //nombre_archivo=al directorio y al nombre que quieres que se guarde la foto
        
$nombre_archivo "img/".$_FILES['imagen']['name']; 
        
//tipo_archivo= a la extension del archivo en nuestro caso solo aceptamos imagenes (jpg, gif y png)
        
$tipo_archivo $_FILES['imagen']['type'];
        
// tamano_archivo= Almacena el tamaño del archivo en bytes
        
$tamano_archivo $_FILES['imagen']['size']; 
        
//compruebo si las características del archivo son las que deseo 
        
if($nombre_archivo!='img/'){
        if (!((
strpos($tipo_archivo"gif") || strpos($tipo_archivo"jpeg")) && ($tamano_archivo 200000))) { 
          
//el tamaño o la extension del archivo no son correctas se pone error=1
          
$error=1;

                         
        }else{ 
        if (
move_uploaded_file($_FILES['imagen']['tmp_name'], $nombre_archivo)){
         
// El archivo ha sido cargado con éxito     
           
        
        
}else{ 
        
//No se ha podido guardar el archivo en el servidor error=2
        
$error=2;
               
         } 
       }
       }
           
// Comprueba si tiene algun error
               
if ($error==1){
            echo 
"<script> alert (\"El archivo no debe tener un tamaño superior a 200 KB y deber ser JPG o GIF\"); </script>";
            echo 
"<script language=Javascript> location.href=\"insertar.php\"; </script>";
            die(); }
            elseif (
$error==2){
            echo 
"<script> alert (\"No se ha podido guardar la imagen en el SERVIDOR \"); </script>";
            echo 
"<script language=Javascript> location.href=\"insertar.php\"; </script>";
            die(); 
            }
            
//si no hay errores se inserta en la TABLA
            
else{
            
mysql_query("insert into peliculas (titulo,categoria,comentario,imagen) values ('$titulo','$categoria','$comentario','$nombre_archivo')");   
           
             
//header("Location: ./insertar.php"); 
            
echo "<script>window.location = './insertar.php';</script>";
               }
            
?>
y donde logueo a los usuarios es este archivo

index.php

Código PHP:
<?
  
// No almacenar en el cache del navegador esta página.
        
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");                     // Expira en fecha pasada
        
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");        // Siempre página modificada
        
header("Cache-Control: no-cache, must-revalidate");                   // HTTP/1.1
        
header("Pragma: no-cache");                                           // HTTP/1.0
?>
<html>
<title>&Aacute;rea de Administraci&oacute;n - www.tupagina.tal</title>
<style type="text/css">
<!--
.botones {  font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 9pt; color: #FFFFFF; background-color: #0099FF; border-color: #000000 ; border-top-width: 1pix; border-right-width: 1pix; border-bottom-width: 1pix; border-left-width: 1pix}
.imputbox {  font-size: 10pt; color: #000099; background-color: #CCFFCC; font-family: Verdana, Arial, Helvetica, sans-serif; border: 1pix #000000 solid; border-color: #000000 solid; font-weight: normal}
.Estilo1 {
    color: #FF6600;
    font-size: 15px;
}
-->
</style>

<body bgcolor="#FFFFFF">
<span class="botones"></span><span class="imputbox"></span>
<br><br><br>
<table width="250" border="1" align="center" cellpadding="0" cellspacing="0" bordercolor="#0099FF" bgcolor="#FF9933">
  <tr>
    <td>
      <table width=100% border=0 align="center" cellpadding="0" cellspacing="0" bordercolor="#FFCC99" bgcolor="#FFFFFF">
        <form action="insertar.php" method="post">
          <tr bgcolor="#0099FF"> 
            <td colspan="2" height="45"> 
              <div align="center"><font face="Arial" color="#FFFFFF" size=2><b>Identificaci&oacute;n
                Usuarios<br>
                </b></font><font face="Arial"><b><span class="Estilo1">Agencia Energ&egrave;tica de la Ribera               </span></b></font></div>
            </td>
          </tr>
          <tr> 
            <td colspan="2"> 
              <div align="center"> 
                <table width="100%" border="0" cellspacing="0" cellpadding="5">
                  <tr valign="middle"> 
                    <td colspan="2" height="30"> 
                      <div align="center">

                         <?
                          
// Mostrar error de Autentificación.
                          
include ("aut_mensaje_error.inc.php");
                          if (isset(
$_GET['error_login'])){
                              
$error=$_GET['error_login'];
                          echo 
"<font face='Verdana, Arial, Helvetica, sans-serif' size='1' color='#FF0000'>Error: $error_login_ms[$error]";
                          }
                         
?>
                         
                    </div>
                    </td>
                  </tr>
                  <tr> 
                    <td width="39%"> 
                      <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong>Usuario</strong>                        : </font></div>
                    </td>
                    <td width="61%"> 
                      <div align="left"> 
                        <input type="text" name="user" size="15" class="imputbox">
                      </div>
                    </td>
                  </tr>
                  <tr> 
                    <td width="39%"> 
                      <div align="right"><font face="Verdana, Arial, Helvetica, sans-serif" size="2"><strong>Password</strong>                        : </font></div>
                    </td>
                    <td width="61%"> 
                      <div align="left"> 
                        <input type="password" name="pass" size="15" class="imputbox">
                      </div>
                    </td>
                  </tr>
                </table>
              </div>
            </td>
          </tr>
          <tr valign="middle"> 
            <td colspan="2" height="50"> 
              <div align="center"><font face="Arial" color=black size=2> 
                <input name=submit type=submit value="  Entrar  " class="botones">
                </font></div>
            </td>
          </tr>
        </form>
      </table>
    </td>
  </tr>
</table>
</body>
</html>
Lo dicho muchas gracias!!
  #14 (permalink)  
Antiguo 04/12/2006, 12:38
Avatar de mauled  
Fecha de Ingreso: marzo-2005
Ubicación: Cd. de México.
Mensajes: 3.001
Antigüedad: 19 años, 1 mes
Puntos: 33
No veo en ninguna parte de tu script de insertar.php que hagas uso de sesiones o validez a los usuarios. ¿Olvidaste agregar algo?

Saludillos.
  #15 (permalink)  
Antiguo 04/12/2006, 14:12
Avatar de Bellenger  
Fecha de Ingreso: noviembre-2004
Ubicación: En un lugar del Mundo...
Mensajes: 599
Antigüedad: 19 años, 5 meses
Puntos: 4
Error....

Código PHP:
          else{ 
            
mysql_query("insert into noticias(titulo,categoria,comentario,imagen) values ('$titulo','$categoria','$comentario','$nombre_archivo')");    
            
             
header("Location: ./insertar.php");  
               } 
creo que en esta linea esta el error, pues antes de hacer un header, no debe haber nada, y cuando es nada, es nada, no echo, ni print, ni consultas sql...
  #16 (permalink)  
Antiguo 04/12/2006, 15:19
Avatar de g05l21  
Fecha de Ingreso: mayo-2006
Mensajes: 76
Antigüedad: 18 años
Puntos: 1
Hola alllebor,

Lo raro es que te funcione en un lado y en otro no, por lo cual se ha de suponer que más que un problema de tú código podría ser algo relacionado con el servidor. Tu servidor incluye cabeceras? espacios en blanco?

Está claro que antes del header no debe haber nada que vaya al buffer de impresión. Pero eso no significa que tengas que quitar los echos/print sobre los que no pases.

Debes tener en cuenta que posibles espacios, fuera del código php, también harán que el header no funcione.

Prueba, por ejemplo, a ver el código que te genera la página en blanco, a lo mejor ves algún espacio que no debería estar ahí ;)

A parte de eso, el usar redirecciones sin avisar al usuario es una práctica bastante mala. Por ejemplo, te puedes encontrar con mucha gente que tenga esa opción deshabilitada por defecto.

Prueba con includes o estructuralo de forma distinta para evitar esos problemas.

Un saludo.
__________________
.-. GeL/T0 .-. Quieres saber mas de mi? lee mi blog: http://g05l21.net
  #17 (permalink)  
Antiguo 04/12/2006, 17:06
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Bueno aqui os dejo el codigo de insertar.php es solo un formulario que le pasa los datos a procesar.php

Código PHP:
<?
//  Autentificator
//  Gestión de Usuarios PHP+Mysql+sesiones
//  by Pedro Noves V. (Cluster)
//  [email protected]
// ------------------------------------------
require("aut_verifica.inc.php");
$nivel_acceso=10// Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5");
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Panel del Administrador</title>

</head>


<body> 
<H1>PANEL DEL ADMINISTRADOR </H1>
<table border="1" bordercolor="#000000"> <tr>
  <td width="184"> <a href="aut_gestion_usuarios.php">GESTION DE USUARIOS</a></td> 
  <td width="64"> <a href="aut_logout.php">SALIR</a></tr></table> 
<FORM method="post" ACTION="procesar.php" enctype="multipart/form-data"> 
<TABLE width="247" height="93"> 
<TR> 
   <TD>Titulo:</TD> 
   <TD><INPUT TYPE="text" NAME="titulo" SIZE="60" MAXLENGTH="255"></TD> 
</TR> 
<TR> 
   <TD>Categoria:</TD> 
   <TD><INPUT TYPE="text" NAME="categoria" SIZE="60" MAXLENGTH="70"></TD> 
</TR> 
<TR> 
   <TD>Comentario:</TD> 
   <TD><textarea name="comentario" cols="60"></textarea></TD> 
</TR>
  <TD>Imagen: </TD>
  <TD> <input type="file" name="imagen"  id="imagen" size="60"></TD> 
</TR>
</TABLE> 
<INPUT TYPE="submit" NAME="accion" VALUE="Insertar"> 
</FORM> 
</body>
</html>
Cuando deciis que antes del header no debe de haber nada, entonces no se donde poner el header, por que algo tengo que poner la consulta es preciso, sino como lo hago??

No he encontrado espacios en blanco, y eso de las redireciones sin avisar no se a que te refieres g05l21, yo soy bastante novato en el tema, como lo harias tu??

Lo que me parece muy raro es eso que me funcione en un sitio y en otro no!
Bueno muchas gracias por ayudarme, si teneis alguna idea mas os lo agradeceria mucho que la escribierais!!!!
  #18 (permalink)  
Antiguo 05/12/2006, 01:14
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
Sigo sin encontrar la solución, ¿A alguien se le ocurre el por que de lo que me pasa? Estoy por llamar al alojamiento web y pedir expicaciones y sino me lo solucionan pues me cambio de alojamiento.
  #19 (permalink)  
Antiguo 05/12/2006, 07:03
Avatar de alllebor  
Fecha de Ingreso: septiembre-2006
Mensajes: 295
Antigüedad: 17 años, 7 meses
Puntos: 1
PROBLEMA RESUELTOOOOOO!!!

Menuda tonteria, no lo hubiera pensado nunca!!

Os explico por si os pasa a alguien más, yo me conectaba mediante un script "conex.php" y desde los otros archivos hacia un include para poder conectarme a la base de datos asi:

procesar.php
Código PHP:
<?
    
include("conex.php"); 
       
$link=Conectarse(); 
?>
Pues ese es el culpable de que no funcionara el HEADER
ahora me conecto directamente

<?
mysql_connect("localhost","user","pass");
mysql_select_db("base de datos");
?>
Y asi si que me funciona, dos dias con esto pa matarme
Alguien me lo podia haber dicho y no me hubiera vuelto locoooooooooooooooo

Bueno gracias a todos los que me han ayudado, sois unos crackss
  #20 (permalink)  
Antiguo 05/12/2006, 07:21
 
Fecha de Ingreso: julio-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.304
Antigüedad: 18 años, 9 meses
Puntos: 6
Seguramente el include tiene algun espacio en blanco de mas fuera de sus etiquetas <?php ?>, eso tambien cuenta como salida de datos aunque no sea un echo

Saludos.
__________________
Federico.

Mi página: www.jourmoly.com.ar
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:42.