entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

funcion header de un formulario php

Buenos noches

Recibo los datos de un formulario llamado formu.php de una página web en este php

<?php
    session_start();

         // INSERTA EL CÓDIGO EXITOSO AQUI

         $cabecera ="From: andamiosSabadell\r\n"; 
         $sendTo = "[email protected]"; 
         $subject = "formulario"; 
         $nombre = $_POST["name"]; 
         $telefono = $_POST["telefono"]; 
         $email = $_POST["email"]; 
         $eltexto = $_POST["message"]; 
        // $headers .= ""; 
         $message = "\nNombre: " . $nombre . "\ntelefono: " . $telefono . "\nemail: " . $email . "\nArea Texto: " . $eltexto; 
         mail($sendTo, $subject, $message, $cabecera); 

        header ("Location: index.html");

?>

La pagina realiza el proceso ya que envía el correo a la dirección a la que le pongo con todos los datos pero se queda en el formu.php, no llega a ejecutar la acción ir a la pagina index.html se quede en formu.php

Muchas gracias

carlossevi comentado Abr 1, 2016

¿No se muestra ningún mensaje de error ni warning? ¿Tienes los mensajes activados? Puedes probar a activar error_reporting(E_ALL); o a revisar los logs del servidor.

gonzalss comentado Abr 1, 2016

Los correos llegan perfectamente . Lo que no se ejecuta es la última sentencia
header("Location:index.html"); enviar a la página index.html

carlossevi comentado Abr 1, 2016

Eso ya lo habías dicho en la pregunta, a lo que comentaba: ¿No se muestra ningún mensaje de error ni warning? ¿Tienes los mensajes (de error en PHP) activados? Puedes probar a activar error_reporting(E_ALL); o a revisar los logs del servidor.

Veo posible que esté relacionado con el típico error de que las cabeceras no pueden ser modificadas dado que ya se ha iniciado la salida, pero para confirmarlo convendría ver el log o el mensaje de error.

gonzalss comentado Abr 1, 2016

No se muestra ningún mensaje de error mensaje de error ni warning

En el formu.php he puesto lo siguiente el var_dump y el print

<?php

     **var_dump($_POST);**

         // INSERTA EL CÓDIGO EXITOSO AQUI

          $cabecera ="From: andamiosMadrid\r\n"; 
         $sendTo = "[email protected]";  
        $subject = "formulario"; 

        $nombre = $_POST["name"]; 

         $telefono = $_POST["telefono"]; 
         $email = $_POST["email"]; 
         $empresa = $_POST["empresa"]; 
         $eltexto = $_POST["message"]; 
        // $headers .= ""; 
         $message = "\nNombre: " . $nombre . "\ntelefono: " . $telefono ."\nempresa: " . $empresa . "\nemail: " . $email . "\nArea Texto: " . $eltexto; 
         mail($sendTo, $subject, $message, $cabecera); 

      print ( $sendTo );         

    //header("Location:contacto.html");

?>

Y me sale el siguiente mensaje

array(6) { ["name"]=> string(7) "Gonzalo" ["email"]=> string(26) "correo.com" ["telefono"]=> string(9) "690140550" ["empresa"]=> string(4) "dede" ["message"]=> string(4) "dede" ["submit"]=> string(0) "" } [email protected]

gonzalss comentado Abr 1, 2016

He puesto el siguiente control de error y me sale el siguiente información

32767
Warning: Cannot modify header information - headers already sent by (output started at /homepages/46/d401575049/htdocs/madrid/formu2.php:1) in /homepages/46/d401575049/htdocs/madrid/formu2.php on line 21

gonzalss comentado Abr 1, 2016

He leído en varios foros que el problema podría ser por poner un espacio en blanco en el PHP , he revisado el código

<?php   
ob_start(); 
 session_start();

error_reporting(E_ALL);

          $cabecera ="From: andamiosMadrid\r\n"; 
         $sendTo = "[email protected]";  
        $subject = "formulario"; 

        $nombre = $_POST["nombre"]; 

         $telefono = $_POST["telefono"]; 
         $email = $_POST["email"]; 
         $eltexto = $_POST["eltexto"]; 
        // $headers .= ""; 
         $message = "\nNombre: " . $nombre . "\ntelefono: " . $telefono . "\nemail: " . $email . "\nArea Texto: " . $eltexto; 
         mail($sendTo, $subject, $message, $cabecera); 

header( "location:contacto.html");

echo error_reporting(E_ALL);

ob_end_flush();
?>

He quitado los espacios en blanco y sigue sin funcionarme . Me da el siguiente error

Warning: Cannot modify header information - headers already sent by (output started at /homepages/46/d401575049/htdocs/madrid/formu2.php:1) in /homepages/46/d401575049/htdocs/madrid/formu2.php on line 21
32767

¿ Alguna idea ?

Me siguen llegando los correos a la dirección de correo que pongo , pero no me sale la página contacto.html

carlossevi comentado Abr 3, 2016

Estamos teniendo problemas para ayudarte porque en cada comentario pones una versión del código diferente y los mensajes de error que nos copias no se corresponden.

En el mensaje de error es importante ver en qué línea dice que se han empezado a enviar las cabeceras, que es lo que hace que de error el intentar modificarlas con el header().

En uno de los ejemplo, el problema te lo ocasiona la función ob_start(); pero en los siguientes ejemplos la función ya no la copias, aunque no vuelves a comentar el mensaje de error que recibes.

bl4z3r comentado Abr 4, 2016

@gonzalss ¿Hay alguna posibilidad de que envíes el mail usando AJAX? Otra duda que tengo es si, anteriormente, llamas tambien a la función header();.

3 Respuestas

1voto

bl4z3r Puntos16780

Que no te funcione el la función header puede ser de lo mas común de lo que piensas. Hay tantas variantes de por medio como la configuracion de PHP, espacios en blanco, llamadas a otras cosas, etc.

Para empezar, te recomiendo que instales la extensión xdebug en servidor web para poder dar un seguimiento mas detallado del problema.

Segundo, la documentación de la función en el manual de PHP deja en claro muchas cosas de por que no puede funcionar tu código. Por ejemplo:

1° Para empezar, ¿es necesario que inicies sesión en un ámbito donde no se consume una sesiones? Con borrar el session_start(); podría solucionarte el problema.

2° PHP es muy quejoso con el tema de los espacios. En tu primer script detecte un espacio entre el nombre de la función y sus paréntesis.

// Antiguo
header ("Location: index.html");

// Nuevo
header("Location: index.html");

Esa simple corrección puede solucionarte el problema.

3° No muestres/imprimas NADA antes de llamar a header() por que ensucias la salida de la cabecera HTTP.

Espero que te haya servido mi respuesta.

gonzalss comentado Abr 1, 2016

Lo he dejado limpio como una patena y continua fallando la función header . Lo raro es que es el mismo codigo que ocupo en otros formulario y nunca he tenido ningun problema

<?php

// session_start();

          $cabecera ="From: andamiosMadrid\r\n"; 
         $sendTo = "[email protected]";  
        $subject = "formulario"; 

        $nombre = $_POST["nombre"]; 

         $telefono = $_POST["telefono"]; 
         $email = $_POST["email"]; 
         $eltexto = $_POST["eltexto"]; 
        // $headers .= ""; 
         $message = "\nNombre: " . $nombre . "\ntelefono: " . $telefono . "\nemail: " . $email . "\nArea Texto: " . $eltexto; 
         mail($sendTo, $subject, $message, $cabecera); 
header("location:contacto.html");
?>

1-Le he quitado el session_start();
2- He quitado todos los espacio
3- He eliminado cualquier impresión

Llevo todo el día con este php

Este es el form del html

 <form  class="contact-form"  method="post" action="formu2.php">
                    <div class="col-sm-5 col-sm-offset-1">
                        <div class="form-group">
                            <label>Nombre *</label>
                            <input type="text" name="nombre" class="form-control" required>
                        </div>
                        <div class="form-group">
                            <label>Email *</label>
                            <input type="email" name="email" class="form-control" required>
                        </div>
                        <div class="form-group">
                            <label>Teléfono</label>
                            <input type="number" class="form-control" name="telefono">
                        </div>                        
                    </div>
                    <div class="col-sm-5">

                        <div class="form-group">
                            <label>Mensaje *</label>
                            <textarea name="eltexto" required class="form-control" rows="8" name="eltexto"></textarea>
                        </div>                        
                        <div class="form-group">
                            <button type="submit" name="submit" class="btn btn-primary btn-lg" required="required">Enviar el mensaje</button>
                        </div>
                    </div>
                </form> 

gonzalss comentado Abr 1, 2016

Estoy haciendo pruebas y algo va mal , ya que si pongo directamente en el php


?php
header("Location:http://google.es");
?>

Se sigue quedando en el php y no redirige donde he puesto

¿Alguna idea chicos ?

gonzalss comentado Abr 1, 2016

Estoy haciendo las siguientes pruebas, si llamo al php directamente
http://andamiosmadrid.com/prueba.php
me sale el echo que he puesto en el php
Pero si llamo al mismo php desde el formulario se queda en la php, por lo que el problema está en el html anterior

PicaPiedras comentado Abr 2, 2016

estas trabajando bajo que plataforma, pueda que si estas en wn alla fallado el servidor local, reiinstala haber si corrije, debes verificar otras cosas que pueden ser que lo que genere este error, como dice @bl4z3r esto es muy comun. pero pueda que el error sea externo

gonzalss comentado Abr 2, 2016

Tengo todas las páginas en 1&1 . Allí tengo muchos dominios y en todas las web que tengo uso siempre el mismo código para recoger los datos de un formulario. Y me falla sólo en esta ?
¿ Que más pruebas podría hacer ?

PicaPiedras comentado Abr 3, 2016

ahi estamos mal entonces, yo estoy desarrollando un sistema,. que debo entregar avances mañana para una correccion de funcijonamiento, GUI, etc, el sistema funcional, hoy amanecio que no actualiza nada, el modulo de actualizacion no esta funcionando.

sera que se salio un engranaje?. estaba muy operativo y wuala, ya nio trabaja.

1voto

PicaPiedras Puntos700

Monitorea los erros con esta funcion:

ini_set('display_errors', 'on');

tienes todo en el mismo directorio?.

header("Location: ../vistas/explab_new.php");
header( "location:contacto.html");

supongo que si, si no te saldria NOT FOUND

gonzalss comentado Abr 1, 2016

He puesto lo que me has comentado - ini_set('display_errors', 'on'); - y esto es lo que me sale :

Warning: Cannot modify header information - headers already sent by (output started at /homepages/46/d401575049/htdocs/madrid/formu2.php:1) in /homepages/46/d401575049/htdocs/madrid/formu2.php on line 22
32767
Notice: Use of undefined constant ini_set - assumed 'ini_set' in /homepages/46/d401575049/htdocs/madrid/formu2.php on line 25
ini_set

PicaPiedras comentado Abr 1, 2016

Mnmm, antes de tu session_start(); no tienes etiquetas de cabeceras HTML abiertas antes del header?, que arquitecturas estas utilizando, MVC?.

0voto

gonzalss Puntos3130

Acabo de dar con la solución -tampoco tengo claro el porque se ha solucionado pero el caso es que ahora funciona - He puesto un captcha en el html y en el php que lo invoca compruebo primero que los caracteres que el usuario ha introducido corresponde con el captcha ( con un if ), después incluyo lo mismo que antes no funcionaba ( redireccionamiento con el header) . Ahora funciona perfectamente .

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta