Ayuda con formulario por favor

Quisiera por favor que alguien me ayudara, tengo un formulario de contacto que no me funciona y no se por qué, cuando se presiona el botón de enviar el explorador se queda en la página del php, y no continua hacia la página de agradecimiento, no se si me explico,
De todas maneras agradecería que me ayudaran o me dieran un codigo OK, solo es un formulARIO DE CONTACTO SIMPLE.<span style="white-space: pre;"> </span>

1 respuesta

Respuesta
1
Postea el código que estás usando, para echarle un ojo y corregirlo si fuera necesario.
Aquí va el código:
<?php
$mail='[email protected]';
$nombre = $_POST['nombre'];
$telefono = $_POST['telefono'];
$email = $_POST['email'];
$mensaje = $_POST['mensaje'];
$thank="gracias1.html";
$message = "
nombre:".$nombre."
telefono:".$telefono."
email:".$email."
mensaje:".$mensaje."";
if (mail($mail,"Formulario de Contacto",$message)) 
Header ("Location: $thank");
?>
<?php
$mail='[email protected]';
$nombre = $_POST['nombre'];$telefono = $_POST['telefono'];$email = $_POST['email'];$mensaje = $_POST['mensaje'];
$thank="gracias1.html";
$message = "nombre:".$nombre."telefono:".$telefono."email:".$email."mensaje:".$mensaje."";
if (mail($mail,"Formulario de Contacto",$message)) Header ("Location: $thank");
?>
En teoría tendría que ir a la página gracias, ¿pero no lo hace y no se por qué?
Gracias otra vez.
No entiendo por qué repites el código. Me has pegado lo mismo dos veces!
A ver, lo primero, dos cosas. ¿Tienes configurado un servidor smtp en tu php.ini? Porque para poder utilizar la función mail() necesitas una configuración previa...
Y lo segundo, ¿tienes habilitada la notificación de errores, warnings, etc? Quizá te esté dando un error pero a lo mejor no lo ves por tener esto desactivado.
Ten en cuenta que le estás diciendo if (mail($mail,"Formulario de Contacto",$message)) Header ("Location: $thank"); pero no le estás diciendo qué hacer si falla, en cuyo caso, se queda quieto parado en la página del php.
Echale un ojo a lo que te digo y te dejo dos links, si sigue fallandote, me dices.
Configuración mail()
Runtime configuration (error reporting)
NAda, que no soy capaz, solo quiero saber si en teoría el código está correcto y si se mandaría el mail.
Es curioso porque ya he hecho un formulario de contacto que funciona perfectamente y esta en la red al 100%, pero ahora soy incapaz de repetirlo y lo necesito por mi trabajo.
¿La solución es quizás editar el diseño del enviar.php, y poner el mensaje de gracias en él,?
Muchas Gracias Otra vez, de verdad.
Para que envíe correos, tiene que estar configurado un servidor smtp en el php.ini tal y como te digo, sino, no te va a funcionar jamás.
Y si no tienes configurado el reporte de errores, tampoco podrás saber si te da algún error al enviar o por qué. Te recomendaría que hicieras ambas dos cosas.
El código lo veo correcto, simple pero correcto, aunque yo añadiría un else de manera que quedara así:
if (mail($mail,"Formulario de Contacto",$message)) Header ("Location: $thank");
else echo 'El mail no ha podido enviarse';
Me inclino por pensar que no tienes configurado un error de correo, entonces al no cumplir la condición del if (y por tanto no entrar) se queda sin hacer nada (en blanco).
Me inclino por pensar que no tienes configurado un servidor de correo, entonces al no cumplir la condición del if (y por tanto no entrar) se queda sin hacer nada (en blanco).
El que tiene boca, se equivoca!
Nada!, que no soy capaz, no se que hago mal, pero no me funciona, se sigue quedando en el php, y no se por qué..
Estoy un poco desesperado porque como ya comenté, lo necesito por trabajo,¿sería posible que alguien posteara un código entero o algo así?,, o alguien que me explique paso a paso como hacerlo, he buscado en la red, pero no encuentro nada que funcione 100%
Muchas gracias
¿Pero has hecho algo de lo que he dicho?
Revisar la configuración del mail, sacar un else con el if del mail o algo?
Es que te estoy dando consejos y te estoy preguntando cosas y no me estás contestando a nada!
Perdona, la verdad es que no te lo había dicho,
Revisar la configuración del mail, si, y en teoría esta todo correcto,
sacar un else con el if del mail, honestamente no tengo ni idea de que estas hablando, lo siento
gracias otra vez.
Una cosa, te repito (por si no lo leíste arriba...) que has hecho lo mismo dos veces, con lo cual, sustituye TODO tu código por esto:
¿<?php
$mail='[email protected]';
$nombre = $_POST['nombre'];
$telefono = $_POST['telefono'];
$email = $_POST['email'];
$mensaje = $_POST['mensaje'];
$thank="gracias1.html";
$message = "
nombre:".$nombre."
telefono:".$telefono."
email:".$email."
mensaje:".$mensaje."";
if (mail($mail,"Formulario de Contacto",$message)) 
Header ("Location: $thank");
?>

Añade en el php donde haces el envío lo que está en negrita:
if (mail($mail,"Formulario de Contacto",$message)) Header ("Location: $thank");
else echo 'El mail no ha podido enviarse';
Si falla al enviar el mail, te mostrará "El mail no ha podido enviarse", en cuyo caso, quizá deberías activar la notificación de errores. Al principio del script php, escribes:
ini_set('display_errors', 'On');
// Muestro todos los errores, incluso los estrictos
error_reporting(E_ALL | E_STRICT);

Y si estás teniendo algún error que impide que envíe el email, te lo mostrará (por lo general, un mensaje en inglés).
También comentarte que las comillas dobles interpretan lo que hay dentro de ellas, es decir, que si haces:
$hola = "pepito";
echo "hola $hola"; //te saca hola pepito
echo 'hola $hola'; //te saca hola $hola
Te lo digo porque (a lo mejor son manías profesionales que van relacionadas con optimizar rendimiento, velocidad de ejecución, etc), yo sustituiría:
$message = "
nombre:".$nombre."
telefono:".$telefono."
email:".$email."
mensaje:".$mensaje."";
Por: $message = "
nombre: $nombre
telefono: $telefono
email: $email
mensaje: $mensaje";
O incluso: $message = '
nombre: '.$nombre.'
telefono: '.$telefono.'
email: '.$email.'
mensaje: '.$mensaje';
Vas a pensar que soy un inútil, pero no consigo que funcione, el código queda así:
<?php
ini_set('display_errors', 'On'); 
// Muestro todos los errores, incluso los estrictos 
error_reporting(E_ALL | E_STRICT); 
$mail='[email protected]'; 
$nombre = $_POST['nombre']; 
$telefono = $_POST['telefono']; 
$email = $_POST['email']; 
$mensaje = $_POST['mensaje']; 
$thank="gracias1.html"; 
$message = " 
nombre:".$nombre." 
telefono:".$telefono." 
email:".$email." 
mensaje:".$mensaje.""; 
if (mail($mail,"Formulario de Contacto",$message))  
Header ("Location: $thank"); 
else echo 'El mail no ha podido enviarse'; 
?>
¿O no?
De esta manera, se sigue quedando en el archivo enviar.php, es decir, con la pantalla en blanco.
Lo he subido a la red, por si era algún problema de mi máquina, o del dreamweaver, pero al ir on line, se sifue quedando en el php.
Si quieres echar un vistazo, la pagina es, 
http://www.deluxe-dreams.com/DeluxeSiteESP/contacto.html
Muchas Gracias otra vez.
Haz una cosa.
Crea un archivo llamado hola.php dentro de la carpeta correspondiente a tu directorio web (de manera que lo llames desde localhost/hola.php o algo así).
Escribe: <?php echo "hola"; ?>
¿Funciona? ¿Te sale "Hola" cuando lo abres en un navegador?
Si la respuesta es no, es que no tienes configurado php como módulo del apache y por eso no "entiende" lo que le dices.
Creo que eso es lo que pasa porque cuando se queda en blanco, el código fuente de la página es todo el php que posteas arriba...
Puedes echar un vistazo aquí, posiblemente expliquen mejor lo que quiero hacerte llegar para que compruebes.
Si te ha funcionado, cierra y evalúa la pregunta, al menos...
Siento no haber respondido antes, pero he estado intentando hacer lo que me dices, y no sirve, creo que tengo el php instalado correctamente.
De todas maneras, aunque no funcionara en mi maquina, en la red si tendría que funcionar, y tampoco lo hace, ¿o no?.
Si puedes ayudarme pues bien, si no, pues puntúo la pregunta y ya está, pero igualmente te agradezco todo lo que has hecho.
Gracias otra vez.
No! No funciona en la red!
Tan sólo tienes que cargar el formulario, enviarlo y cuando queda en blanco darle a ver código fuente. Te saldrá todo el código php y eso quiere decir que no está interpretándolo y por tanto, ejecutándolo!
Si no te sale lo del "hola" (que me dices que no te sirve y no entiendo a qué te refieres, lo siento) es porque no está bien instalado.
¿Miraste el enlace que te puse sobre la configuración del php cómo modulo del apache? Así por lo menos puedes comprobar si está bien instalado...
Si, si, miré el link, hice todo lo que dice de copiar las .dll, me bajé el archivo .php, en fin, creo que si hice todo, y en teoría esta todo correcto.
De todas maneras es que yo no soy programador ni nada parecido, y quizás esta mal algo pero yo no consigo saber qué es.
Puede ser que haga algo mal con el Dreamweaver, ¿o puedo arreglar lo que sea desde el?
De hecho creo que los problemas empezaron cuando instalé el Apache, porque como ya te comenté, ya hice hace unos meses un formulario y funciona correctamente, ¿es posible?
Muchas gracias otra vez.
Si esto no te funciona:
Podemos crear un archivo llamado, por ejemplo, "prueba.php", en el que colocaremos dentro el siguiente código:
<?
phpinfo()
?>
Esta función simplemente creará una página de muestra de las configuraciones definidas para PHP en ese servidor.
Para acceder al archivo creado desde nuestro explorador, escribiremos en la barra de direcciones esta URL:
http://localhost/prueba.php

Es porque hay algo mal con el apache. El formulario que dices que hiciste hace tiempo y funcionaba... ¿era con php? Si es que sí, ¿Instalaste apache después? ¿Y antes cómo te funcionó? ¿Tenías otro servidor web? A ver si resulta que vas a tener dos servidores web!
Buenas noticias, he empezado desde el principio otra vez y al fin he podido hacerlo y sale perfecto:
Es decir:
1- He hecho el archivo prueba.php,
2- CUando lo cargo en el explorador,(http://localhost/prueba.php), me carga la página correcta:
info.php, y todo eso, todo correcto.
3- ¿Ahora qué hago?
Muchas Gracias
Estupendo.
Vamos a ver, se me acaba de ocurrir ahora, si el servidor donde alojas la página soporta php.
Sube el info.php a http://www.deluxe-dreams.com/DeluxeSiteESP/ y mira a ver si te funciona!
Perdona mi ignorancia, pero no te entiendo,
¿info.php?, lo siento de verdad, no se a que te refieres,
quieres decir que lo suba a la red y compruebe si funciona, hasta hi lo entiendo, pero como compruebo si funciona, que prueba tengo que hacer,?
Gracias otra vez.
A ver, en tu mensaje anterior me dices
Me carga la página correcta:
info.php, y todo eso, todo correcto.

Pues tan sólo te estoy pidiendo que hagas la misma prueba en deluxe-dreams.com... Tienes un archivo que se llama info.php en tu red local, ¿no? El que probaste en http://localhost/info.php, no? Pues subes ese mismo archivo (info.php) al servidor en donde tienes tu página y tienes que mirar a ver si te saca lo mismo que salió cuando lo ejecutaste en localhost/info.php o si por el contrario, te sale el contenido del archivo, es decir: <? php phpinfo();?> O lo que sea que pusieras.
La he subido al website, pero no carga la misma página que con el localhost, se queda en blanco, para variar.
Gracias.
Pues ya sabemos por qué no funciona el formulario.
Tu servidor no soporta php...
Podemos buscar otras alternativas, como por ejemplo, hospedar (únicamente) el archivo php en un servidor gratuito que sí soporte php (http://www.000webhost.com/ por ejemplo).
En el action del form pondrías la ruta completa (action="http://www.rutadelservidor.com/archivo.php") y luego en el php, puedes poner un redirect a una página de confirmación en deluxe-dreams.
¿Ya conseguiste que funcionara?
Perdona, no me he podido conectar en un par de días.
¿Crees qué es buena solución lo del redireccionamiento?
En tal caso, ¿cómo quedaría el código?( Es que ya no me fio de mi mismo):)
Voy a intentarlo así, a ver como va y te digo algo.
Muchas gracias.
No sé cómo se llama el archivo en donde tienes el código para enviar el mail, pero supongamos que se llama mail.php y el otro, formulario.html, ¿sí?
En mail.php tienes una variable que se llama thanks; para que funcione bien todo deberías ponerle la ruta http://www.deluxe-dreams.com/DeluxeSiteESP/gracias1.html
Mail.php lo subirías a un sitio de estos que te digo, entonces la ruta completa de ese archivo sería algo así:
http://www.000webhost.com/eolos/mail.php (es un ejemplo, no tengo ni idea de cómo quedaría la ruta).
Entonces en formulario.html, en el <form tienes un action, en donde ahora debería poner mail.php, colocas http://www.000webhost.com/eolos/mail.php ( o la ruta que corresponda).
Al enviar el formulario, los datos se enviarían a http://www.000webhost.com/eolos/mail.php, los procesaría y los enviaría por mail. Luego, se redirigiriría (vaya palabra!) Él sólo a deluxe-dreams.
¿Te queda más claro ahora? Si te quedas con dudas, pregunta... que pa eso estamos.
PERFECTO, simplemente perfecto.
Me llegan perfectamente los mails, pero solo hay una cosa:
No me llega la información introducida en los campos, es decir, me pone:
Nombre:
Teléfono:
Etc:...
Todo menos la información introducida en el formulario, supongo que será algo que hice mal con lo de las comillas que me comentaste. ¿Igualmente te pongo el código y le echas un ultimo vistazo a ver porqué puede ser?, muchas gracias.
<?php
ini_set('display_errors', 'On'); 
// Muestro todos los errores, incluso los estrictos 
error_reporting(E_ALL | E_STRICT); 
$mail='[email protected]'; 
$nombre = $_POST['nombre']; 
$telefono = $_POST['telefono']; 
$email = $_POST['email']; 
$mensaje = $_POST['mensaje']; 
$thank="http://www.deluxe-dreams.com/DeluxeSiteESP/gracias1.html"; 
$message = " 
nombre:$nombre 
telefono:$telefono 
email:$email 
mensaje:$mensaje"; 
if (mail($mail,"Formulario de Contacto",$message))  
Header ("Location: $thank"); 
else echo 'El mail no ha podido enviarse'; 
?>
Por cierto, dime como va lo de puntuar la pregunta para hacerlo correctamente.
Gracias.
Esto lo puedes quitar ya:
ini_set('display_errors', 'On'); 
// Muestro todos los errores, incluso los estrictos 
error_reporting(E_ALL | E_STRICT);
Prueba en tu formulario, a añadir en cada input correspondiente a nombre, teléfono, etc, un id con el mismo valor que el campo name.
Es decir, <input type="text" name="textfield" id="textfield"> y así sucesivamente...
Lo que pasa es que el script php no está recogiendo los datos que le envías y no sé si puede ser por esto del id.
¿En tu local te funciona bien?
No tengo mucha idea de cómo es el funcionamiento por parte del no experto, pero imagino que debajo de la caja en la que puedes escribir, tienes un "Cerrar pregunta" o "Evaluar pregunta" o algo así...
Pero primero vamos a ver si conseguimos que funcione del todo bien, que ya es hora!
Más raro aún, en la version italiana del site, si que se ve la información en el mail recibido, pero en la version de español e ingles no se ve dicha información.
¿Qué pasaaaa? ¿Es un poco rar no?, porque he copiado todo desde la misma base, que era la version española,
gracias.
No lo has copiado bien.
Ejemplo versión española:
<label>
<span class="Estilo3">Nombre</span>
<input type="text" name="textfield"/>
</label>
Ejemplo versión italiana:
<label>
<input id="nombre" type="text" name="nombre"/>
</label>
Ejemplo versión inglesa:
<label>
<span class="Estilo3">Name </span>
<input type="text" name="textfield"/>
</label>
Como te decía en el mensaje anterior, si los inputs no tienen id, es bastante posible que el script no los pueda recoger. Por eso, la versión italiana funciona bien, porque le pusiste un id.
Otra cosa, es que en cada formulario utilizas un nombre diferente, mientras que para la versión española e inglesa usas textfield para la versión italiana estás usando nombre.
No tendrá esto que ver con que estés recogiendo en el script:
$nombre = $_POST['nombre'];
¿Y ni desde la versión inglesa ni la española le estás mandando un nombre?
Resuelto, ya esta todo bien,
Era lo de los id que decías, creo que esta todo correcto, porque ya veo la información tanto desde la version inglesa, italiana o española, TODO PERFECTO.
Bueno solo me queda agradecerte un montón tu ayuda, de verdad, y gracias por tu paciencia.
Muchísimas gracias.
:)
Lo dicho, muchas gracias, y gracias por tu paciencia,
Sale todo perfecto .
MUCHAS GRACIAS.<span style="white-space: pre;"> </span>
Nada, pa eso estamos!
Seguro que has aprendido cosas para la próxima vez!
No te olvides de evaluar y cerrar la pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas