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

2votos

carlossevi comentado

¿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.

1voto

gonzalss comentado

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

1voto

carlossevi comentado

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.

1voto

gonzalss comentado

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]

1voto

gonzalss comentado

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

2votos

gonzalss comentado

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

1voto

carlossevi comentado

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.

0voto

bl4z3r comentado

@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 Puntos16850

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.

0voto

gonzalss comentado

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> 

-1voto

gonzalss comentado

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 ?

0voto

gonzalss comentado

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

-1voto

PicaPiedras comentado

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

0voto

gonzalss comentado

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 ?

0voto

PicaPiedras comentado

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 Puntos740

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

0voto

gonzalss comentado

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

0voto

PicaPiedras comentado

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

0voto

gonzalss Puntos3720

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.

Otras Preguntas y Respuestas


...

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

Conecta