Actualización: Acabo de publicar un tutorial para usuarios avanzados de como hacer un formulario de contacto similar a este, capaz de enviar mensaje sin recargar la pagina usando AJAX, todo en un solo tutorial.
En este tutorial veremos como validar nuestro formulario del lado del servidor con PHP, ademas hacer que se envie el mensaje a una dirección de correo electrónico que le definamos.
Antes de empezar
Importante: en este tutorial vamos a trabajar con el metodo de envio POST, si no conoces este tema te recomendaria que le eches un ojo a este tutorial antes de seguir.
Ya que vamos a trabajar con PHP, es necesario que tengas instalado en tu sistema un servidor local que soporte PHP.
Luego tenemos que cambiar la extension del archivo index.html a index.php:
Te recomendaria tambien que desactives el Javascript del explorador en el que estes probando el formulario, para que te puedas asegurar que la validación del lado del servidor esta funcionando.
Validación
Lo primero es abrir un par de etiquetas PHP arriba del todo, dentro de estas hacemos un if para cuando el boton de envio es presionado, en el formulario definimos los atributos method y action.
<?php
if(isset($_POST['boton'])){
//aqui va nuestro codigo
}
?>
<html>
<head>
<title>Contacto</title>
<link rel='stylesheet' href='estilos.css'>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
<script src='funciones.js'></script>
</head>
<body>
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input type='text' class='nombre' value=''></div>
<div><label>Tu Email:</label><input type='text' class='email' value=''></div>
<div><label>Asunto:</label><input type='text' class='asunto' value=''></div>
<div><label>Mensaje:</label><textarea rows='6' class='mensaje'></textarea></div>
<div><input type='submit' value='Envia Mensaje' class='boton'></div>
</form>
</body>
</html>
Tenemos que definir tambien los atributos name a cada campo del formulario(incluyendo al boton de envio) para poder identificarlos con PHP:
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input name='nombre' type='text' class='nombre' value=''></div>
<div><label>Tu Email:</label><input name='email' type='text' class='email' value=''></div>
<div><label>Asunto:</label><input name='asunto' type='text' class='asunto' value=''></div>
<div><label>Mensaje:</label><textarea name='mensaje' rows='6' class='mensaje'></textarea></div>
<div><input name='boton' type='submit' value='Envia Mensaje' class='boton'></div>
</form>
Teniendo ya todos los atributos necesarios declarados, regresamos al codigo PHP de mas arriba y hacemos una serie de comparaciones similar a cuando lo validamos del lado del cliente.
<?php
if(isset($_POST['boton'])){
$errors = array(); // declaramos un array para almacenar los errores
if($_POST['nombre'] == ''){
$errors[1] = '<span class="error">Ingrese su nombre</span>';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$errors[2] = '<span class="error">Ingrese un email correcto</span>';
}else if($_POST['asunto'] == ''){
$errors[3] = '<span class="error">Ingrese un asunto</span>';
}else if($_POST['mensaje'] == ''){
$errors[4] = '<span class="error">Ingrese un mensaje</span>';
}else{
//si todo esta ok envia email
}
}
?>
Nota que en cada valor del array $errors le estamos declarando en el valor el mismo error que usamos en el anterior tutorial, así para reciclar las mismas clases y no volver a escribirlas.
Ahora tenemos que ubicar los errores en donde deberían aparecer si la prueba de validación no pasa:
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input name='nombre' type='text' class='nombre' value=''>
<?php echo $errors[1]; ?></div>
<div><label>Tu Email:</label><input name='email' type='text' class='email' value=''>
<?php echo $errors[2]; ?></div>
<div><label>Asunto:</label><input name='asunto' type='text' class='asunto' value=''>
<?php echo $errors[3]; ?></div>
<div><label>Mensaje:</label><textarea name='mensaje' rows='6' class='mensaje'></textarea>
<?php echo $errors[4]; ?></div>
<div><input name='boton' type='submit' value='Envia Mensaje' class='boton'></div>
</form>
Si probamos esto, podemos comprobar que esta validando pero que no esta guardando lo que rellenamos en los campos de textos cuando se muestra el error.
Por ejemplo si llenamos el primer campo pero no el segundo, se mostrara el error del segundo pero se eliminara lo que llenamos en el primero:
Para arreglar esto vamos a hacer que en el atributo value de cada uno de los campos del formulario se almacene lo que el usuario escribió, entonces el formulario quedaria asi:
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input type='text' class='nombre' value='<?php echo $_POST['nombre']; ?>'>
<?php echo $errors[1]; ?></div>
<div><label>Tu Email:</label><input type='text' class='email' value='<?php echo $_POST['email']; ?>'>
<?php echo $errors[2]; ?></div>
<div><label>Asunto:</label><input type='text' class='asunto' value='<?php echo $_POST['asunto']; ?>'>
<?php echo $errors[3]; ?></div>
<div><label>Mensaje:</label><textarea rows='6' class='mensaje'><?php echo $_POST['mensaje']; ?></textarea>
<?php echo $errors[4]; ?></div>
<div><input type='submit' value='Envia Mensaje' class='boton'></div>
</form>
En caso del textarea que no tiene atributo value va dentro de las etiquetas.
Envio
Ya con la validación del lado del servidor funcionando procederemos a hacer el envio del mensaje a una dirección de correo electrónico mediante la función mail() de PHP.
En el código PHP de arriba dentro del else (por la linea 14) que define si todas las pruebas de validación fueron pasadas ponemos lo que sera el envio:
}else{
$dest = "tu@email.com; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo para que no llegue a spam
$headers = "From: $nombre <$email>\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //
if(mail($dest,$asunto,$cuerpo,$headers)){ // esta es una comparacion para ver si envio el mail o no (\r\n = salto de linea)
$result = '<div class="result_ok">Email enviado correctamente</div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje</div>';
}
}
Si no logras entender muy bien esta parte del código te recomiendo que leas este tutorial donde se habla especificamente de la función mail de PHP.
La variable $result que he remarcado es para definir el mensaje que se le mostrara al usuario si el mensaje se envio correctamente o no, sin embargo tenemos que ubicar esta variable dentro del formulario para que se muestre:
<?php echo $result; ?>
</form>
Ten en cuenta que si intentas enviar el formulario no te va a funcionar si estas probandolo en tu servidor local a menos que tengas instalado un SMTP en tu sistema, lo ideal seria subirlo a un hosting y probarlo desde allí.
Si deseas puedes estilizar un poco el mensaje de error final($result) en la hoja de estilos:
.result_fail{
background: none repeat scroll 0 0 #BC1010;
border-radius: 20px 20px 20px 20px;
color: white;
font-weight: bold;
padding: 10px 20px;
text-align: center;
}
.result_ok{
background: none repeat scroll 0 0 #1EA700;
border-radius: 20px 20px 20px 20px;
color: white;
font-weight: bold;
padding: 10px 20px;
text-align: center;
}
Código final: index.php
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = '<span class="error">Ingrese su nombre</span>';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$errors[2] = '<span class="error">Ingrese un email correcto</span>';
}else if($_POST['asunto'] == ''){
$errors[3] = '<span class="error">Ingrese un asunto</span>';
}else if($_POST['mensaje'] == ''){
$errors[4] = '<span class="error">Ingrese un mensaje</span>';
}else{
$dest = "tu@email.com"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo
$headers = "From: $nombre <$email>\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = '<div class="result_ok">Email enviado correctamente </div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje </div>';
}
}
}
?>
<html>
<head>
<title>Contacto</title>
<link rel='stylesheet' href='estilos.css'>
<script src='http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js'></script>
<script src='funciones.js'></script>
</head>
<body>
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input type='text' class='nombre' name='nombre' value='<?php echo $_POST['nombre']; ?>'><?php echo $errors[1] ?></div>
<div><label>Tu Email:</label><input type='text' class='email' name='email' value='<?php echo $_POST['email']; ?>'><?php echo $errors[2] ?></div>
<div><label>Asunto:</label><input type='text' class='asunto' name='asunto' value='<?php echo $_POST['asunto']; ?>'><?php echo $errors[3] ?></div>
<div><label>Mensaje:</label><textarea rows='6' class='mensaje' name='mensaje'><?php echo $_POST['mensaje']; ?></textarea><?php echo $errors[4] ?></div>
<div><input type='submit' value='Envia Mensaje' class='boton' name='boton'></div>
<?php echo $result; ?>
</form>
</body>
</html>
Actualización:
Debido a los comentarios que escribieron, decidi continuar el tutorial añadiendo una parte mas, en esta veremos como almancenar los valores ingresados por el usuario a una base de datos MySQL usando PHP.
Como hacer un formulario de contacto IV: Almacenar en base de datos MySQL con PHP
Gracias por el tutorial esta muy bueno, quisiera saber como agrego más etiquetas al formulario para poner colonia, ciudad, telefóno. Gracias
Solo tendrías que duplicar uno de los campos por ejemplo el de asunto, y cambiar los atributos de class y name en cada input:
Ten en cuenta también duplicar las condicionales de validación del lado del servidor (PHP) y del lado del ciente (jQuery)
muchas gracias!! Lo hice entero y funciona!!
Solo recordar que los archivos php funcionan on line. Comento este detallle porque en la vista previa se ve mal pero cuando lo subis, se ve prefecto.
Al mio le hice un lindo fondo … estoy contenta!! ¡GRACIAS!!
Muy buenos tutoriales, estan excelentes, una preguna como hago esos cuadros de dialogos o de informacion que aparecen al pasar el mouse por los Contenidos relacionados? se ve muy elegante Gracias.
https://github.com/vadikom/poshytip
Muchas gracias por la respuesta ya quedo listo pero cuando llega el mail del formulario a la bandeja de entrada no aparece el teléfono, colonia y ciudad. Eso donde lo puedo arreglar?.
Saludos
Se me olvidaba también cambie el php y jquery como señalas. Saludos
No me llega el mail con todos los datos aquí el código, tengo algo mal pero no se que. Gracias por la ayuda de alguién.
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$error1 = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$error2 = ‘Ingrese un email correcto’;
}else if($_POST[‘telefono’] == »){
$error3 = ‘Ingrese un telefono’;
}else if($_POST[‘direccion’] == »){
$error4 = ‘Ingrese una direccion’;
}else if($_POST[‘ciudad’] == »){
$error5 = ‘Ingrese una ciudad’;
}else if($_POST[‘asunto’] == »){
$error6 = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$error7 = ‘Ingrese un mensaje’;
}else{
$dest = «envio@mimail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$telefono = $_POST[‘telefono’];
$direccion = $_POST[‘direccion’];
$ciudad = $_POST[‘ciudad’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email \r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo, $headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘telefono’] = »;
$_POST[‘ciudad’] = »;
$_POST[‘direccion’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
El problema que tienes esta en la variable de $cuerpo, esta solo enviando el valor de $mensaje y no de los otros valores $telefono, $direccion, $ciudad y $asunto, lo que tienes que hacer es agregar estas variables a la variable $cuerpo, esto lo haces así:
$cuerpo = $_POST['mensaje'];
$cuerpo .= $_POST['telefono'];
$cuerpo .= $_POST['ciudad'];
$cuerpo .= $_POST['direccion'];
$cuerpo .= $_POST['asunto'];
El punto antes del =, es para decirle que estas sumando valores a una misma variable, entonces al final la variable $cuerpo contiene todos los datos y los envía al email, espero te haya servido :).
Hola Josue! primero que todo gracias! sos un genio! funciona, anda perfecto. ahora el tema es el resultado, cuando me llega el mail, toda la informacion que el usuario escribio en el formulario esta junta. por ej: (nombremi@mail.com1565984852ciudadmensaje) .. es normal eso? lo lindo seria que el resultado fuese algo asi:
nombre: nombre
mail: mi@mail.com
telefono: 1565984852
ciudad: ciudad
mensaje: mensaje
saludos y gracias de antemano!!!
Anade una etiqueta br para hacer un salto de linea en cada uno, puedes combinar PHP con HTML en el valor de la variable mediante un punto seguido de comillas($var = php.»html»;), asi:
$cuerpo .= $_POST['mensaje']."
";
$cuerpo = .$_POST['nombre']."
";
$cuerpo = $_POST['email']."
";
$cuerpo .= $_POST['telefono']."
";
$cuerpo .= $_POST['ciudad']."
";
$cuerpo .= $_POST['direccion']."
";
$cuerpo .= $_POST['asunto']."
";
Gracias muchas!!!!! 🙂
Excelente tutorial.
Hace un mes que estoy tratando de hacer funcional mi formulario y no tengo suerte.
Copié y pegue el código. Actualicé algunas etiquetas y resulta que al probar la página se ve el código «literalmente».
El mismo es este:
<?php
if(isset($_POST['enviar'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre, apellido y empresa’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘titulo’] == »){
$errors[3] = ‘Ingrese un título’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = «matiasgmd@gmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘titulo’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$titulo,$mensaje,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘titulo’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
Nombre, apellido y empresa (si corresponde):
E-mail:
Título de su consulta:
Su consulta:
¿Me podrías ayudar? Lo escribí todo en «contacto.php» que antes era «contacto.html».
Muchas gracias.
Tu ordenador o donde lo estés probando tiene que tener un servidor local que soporte PHP, hay programas que te instalan un servidor local + PHP, si estas en Win tienes Xampp, Wamp y AppServ y en Mac tienes Mamp.
Si no tienes un servidor local, ningún archivo con extensión .php te va a correr.
¡Gracias! Era ese el problema. Lo subí a un servidor de prueba que tenemos acá y no se ven los códigos. Es el primer sitio web que desarrollo. Solo para llevar a cabo el diseño (soy diseñador gráfico).
Lo que me está pasando ahora es que no me envía nada. Además me di cuenta que tira error (no por el mensaje de error, que tampoco aparece) porque los campos no se vacían.
Te agregué a mi cuenta de Facebook (Gabriel Matias) hace unos minutos a ver si me puedes dar una mano. Así por ese medio te paso el link para que puedas comprobar lo que te digo.
Muchisimas gracias amigo. Aprendí mucho 😉
Gracias por el tutorial esta muy bueno, pero al hacer la prueba en mi servidor local, los campos donde se deben escribir los datos salen llenos de codigo, como se muestra anajo y ademas me marca varios errores. El codigo que uso es el que baje de tu siio, tal cual, agradece cualquier comentario que puedas hacerme al respecto para corregirlo.
gracias
El codigo que me salen en el fromulario es el sigueinte:
Tu Nombre:
Notice: Undefined variable: error1 in C:\xampp\htdocs\codigofuente\index.php on line 45
Tu Email:
Notice: Undefined variable: error2 in C:\xampp\htdocs\codigofuente\index.php on line 46
Asunto:
Notice: Undefined variable: error3 in C:\xampp\htdocs\codigofuente\index.php on line 47
Mensaje: Notice: Undefined index: mensaje in C:\xampp\htdocs\codigofuente\index.php on line 48
Notice: Undefined variable: error4 in C:\xampp\htdocs\codigofuente\index.php on line 48
Notice: Undefined variable: result in C:\xampp\htdocs\codigofuente\index.php on line 50
Es raro, yo tambien uso xampp y no me salieron esos errores, mira puedes poner este código antes de todo para solucionar tu problema:
Muchas gracias por responder tan rapido…
Ya aplique esas lineas que me indicaste y funciono como por arte de magia… Muchas gracias por la solucion y sigue adelante compartiendonos tus conocimientos…
Por cierto, te comento que utilice PIE.htc para agregarle las propiedades css3 a internet explorer y me funciono muy bien…
Saludos y hasta pronto…
Una pregunta, me gustaria poner el archivo para enviar el correo .php en un archivo aparte y llamarlo desde la funcion action»» del formulario, que cambios habria que hacerle??? no se si me explico, quiero dejar el puro codigo html y en otro archivo aparte el codigo php para validar y enviar el correo…
Agradeceria tu respuesta y disculpa la molestia…
Saludos
Si, creando un archivo proceso.php y poniéndolo en el action del form no tendrías problemas si copias todo el código php, sin embargo lo que si te puede dar algún problema es la cuestión de la validación del lado del servidor.
Muy bonito formulario pero no HACE NADA!!!
Puse mi mail para hacer pruebas y no manda nada, eso si, sale su mensajito que SE ENVIO.
Si manda, lo que pasa es que esta para que me llegue a mi correo, pero tienes razón voy a cambiar eso, para que llegue al correo del usuario en el demo.
Listo puedes probarlo ahora te va a llegar a tu correo el msj.
Hola, me refiero a que después de descargar el código, edité el index.php y cambié tu mail por el mío, incluso lo hice dos veces, uno con mi correo de gmail y otro con el correo de un dominio, subí los 3 archivos al hosting y lo probé y nada, no llegó el correo a ninguna de las dos cuentas 🙁
Mmm, en que servidor lo estas probando? sabes si soporta mail()?
Intenta subir un php y pon solo esto:
Saldrá una lista, alli te fijas si tu servidor soporta mail(); o no
No sé que pasó pero ya funciona……….y como dije en mi primer comentario…..MUY BONITO!!!
y funcional, y retiro mi crítica……:S
Saludos!!!
hola JO copie el codigo a mi pagina web y cambie el email destino pero no me llega el correo al correo destino lo estoy probando, otra pregunta necesito tener instalado en mi servidor un smtp para que pueda funcionar o no. tengo un servidor ubuntu, php apache. mysql, espero tu respuesta
Si, la función mail() no funcionara si no hay un servidor SMTP instalado.
Hola Josue!
Gracias por el tutorial! Però tengo un problema, no me llegan los emails al poner una dirección de destino con dominio propio y que tengo ubicada en google apps. Cuando pongo una dirección de dominio por ejemplo yahoo si que me funciona. A ver si me puedes ayudar. Muchas gracias!
Si dices que te funciona con cualquier otra cuenta de correo pero con la de google apps no, entonces es un problema de la cuenta con google apps, prueba a enviar un correo desde una cuenta normal a la del dominio propio y fíjate si llega, yo acabo de probar el demo que esta aquí(he modificado el demo para que el correo que pongas en el campo email sea el destinatario) con mi cuenta de google apps y me llego sin problemas.
Es muy raro ya que des de otro correo si que me llegan los emails al correo de google apps, però des del formulario no.
Debe ser algo de la configuración de google apps, però no encuentro el que, tendrias alguna idea?
Gracias por contestar!
Que hosting estas usando? te has fijado si te llega al Spam?
Utilizo Dinahosting, y no, no me llega al spam.. a ver si lo consigo resolver hoy. gracias
Hola…..Tengo Problemitas…me Toma error las comprovacion dentro del Form, y no me toma error en la Linea 31 con la «Mail»… 🙁
Que error es el que te sale exactamente? copialo acá para verlo.
Antes que Nada Funciona en un Server Local???
Como WampServer??
esto me sale….
Tu Nombre:
( ! ) Notice: Undefined index: nombre in C:\wamp\www\Proyect\Contacto\index.php on line 45
Call Stack
# Time Memory Function Location
1 0.0006 380256 {main}( ) ..\index.php:0
‘>
( ! ) Notice: Undefined variable: error1 in C:\wamp\www\Proyect\Contacto\index.php on line 45
Call Stack
# Time Memory Function Location
1 0.0006 380256 {main}( ) ..\index.php:0
Tu Email:
( ! ) Notice: Undefined index: email in C:\wamp\www\Proyect\Contacto\index.php on line 46
Call Stack
# Time Memory Function Location
1 0.0006 380256 {main}( ) ..\index.php:0
‘>
( ! ) Notice: Undefined variable: error2 in C:\wamp\www\Proyect\Contacto\index.php on line 46
Call Stack
# Time Memory Function Location
1 0.0006 380256 {main}( ) ..\index.php:0
Asunto:
( ! ) Notice: Undefined index: asunto in C:\wamp\www\Proyect\Contacto\index.php on line 47
Call Stack
# Time Memory Function Location
1 0.0006 380256 {main}( ) ..\index.php:0
‘>
( ! ) Notice: Undefined variable: error3 in C:\wamp\www\Proyect\Contacto\index.php on line 47
Call Stack
# Time Memory Function Location
1 0.0006 380256 {main}( ) ..\index.php:0
Mensaje:
( ! ) Notice: Undefined variable: error4 in C:\wamp\www\Proyect\Contacto\index.php on line 48
Call Stack
# Time Memory Function Location
1 0.0006 380256 {main}( ) ..\index.php:0
( ! ) Notice: Undefined variable: result in C:\wamp\www\Proyect\Contacto\index.php on line 50
Call Stack
# Time Memory Function Location
1 0.0006 380256 {main}( ) ..\index.php:0
Mmm, el mail no funcionara en un servidor local, la validacion deberia funcionarte, los errores que te salen son porque las variables no se definieron, prueba poner este codigo:
Ahora para que el mail funcione tiene que estar en un servidor real, tal vez uno de estos te sirva.
ps. yo lo he probado en XAMPP en Win y con MAMP en Mac.
amigo como puede agregar un archivo adjunto y que me llege tambien al mail??
saludos
La función mail() no soporta archivos adjuntos, para eso te recomiendo usar el plugin PHPMailer
Saludos.
Hola ! Excelente tutorial, yo usaba phpMailer y ahora voy a cambiarlo por este, que ademas se ve muy lindo, solo necesito que me lleguen mensajes y podes responderlos. Mi pregunta es sobre Seguridad, ya que en una oportunidad tuve Email Injection por una vulnerabilidad de php, mi pregunta es si con este codigo esta validado me pueden infectar de nuevo ? o habria que ponerle otro codigo ? Anteriormente tenia el formulario de contacto en un .htm ahora deberia direccionar el link a index.php no ? Desde ya muchas gracias !!! es muy uitl la info que nos das …. natalia
Hola Natalia, por lo de la seguridad creo que este articulo te puede servir para evitar las inyecciones, sobre lo del archivo .htm si, este formulario esta hecho en un solo archivo .php ahora tienes linkearlo de esa manera.
Muchas gracias por tan pronta respuesta, la verdad lo veo un poco complicado para mi, no soy programadora y no entiendo nada de ese codigo :-(. Por otro lado en el archivo index.php quise agregar un parrafo antes del formulario, para decir que: » Por favor rellenen el formulario debajo», y luego le quise agregar un «Gracias !!» antes de «Email enviado correctamente 🙂 » pero me sale un mensaje en dreamweaver de: » Violacion de recurso compartido durante acceso al index.php» y no me permite guardar los cambios. Por utlimo, en Motzilla se ve muy bien pero en el explorer no jala bien los estillos, por ejemplo el recuadro general se ve como un rectangulo vacio y fuera de esto los campos sin estilos, porque sera ? muchas gracias !
Para agregar un párrafo recuerda que tiene que ir fuera de las etiquetas PHP (), lo del mensaje de gracias, tendrías que modificar la variable $result:
$result = '
';
Y sobre el error que te sale en DW, la verdad que no se como ayudarte ya que no uso DW, te recomiendo usar un editor de textos, es mucho mas simple y ligero que DW :).
Sobre la compatibilidad de navegadores, te diré que el formulario se ve bien en todos los navegadores siempre y cuando estos estén actualizados a ultima versión, por ejm en IE9, esto es porque estoy usando solo CSS para generar toda la decoración del form, sin imágenes, sin embargo si deseas puedes usar imágenes pero yo te recomendaría poner un pequeño mensaje para los usuarios de navegadores antiguos instándoles a que actualicen su navegador:
Si el parrafo esta por fuera de las etiquetas de php, pero no me deja guardar los cambios.
El mensaje sobre el navegador, en parte del codigo iria ?
Me preocupa la seguridad porque ya me lo hicieron 2 veces :-(, el link a la libreria de google con las jquery es seguro ? como veras estoy perseguida por la seguridad …. mil gracias !
Copia el código que estas usando aquí para verlo.
El mensaje puede ir en cualquier parte.
La librería de Google es 100% confiable la he usado toda la vida y no he tenido problemas, sin embargo si quieres puedes usar una versión local bajándote la librería desde aqui.
Sobre la seguridad, estoy añadiendo al tutorial una parte relacionado a ello.
Ahora borre la pagina de prueba que tenia online, y me dejo guardar los cambios. Que bueno lo de la seguridad, se que hay mail() exploits y header injection … pero no se nada mas ….
He estado haciendo pruebas de seguridad y resulta que la validación que esta en el form es suficiente para repeler inyecciones de mail() y como esta tanto del lado del servidor como del cliente no creo que tengas problemas con ello.
Hola Josue!
He realizado el formulario y me envia todo correctamente, lo que pasa que mi correo lo detecta como spam, hay alguna manera de evitar esto y hacer que me llegue a la bandeja de entrada normal del correo.
Saludos: germán
Puede ser por el dominio que estas usando como remitente, tal vez los clientes de correo lo reconocen como spam, yo uso este form en gmail sin ese tipo de problemas.
Hola de nuevo!
Gracias por tu respuesta.
Quería saber como hacer que en el correo salga tambien las label del formulario, porque ahora mismo solamente me sale el telefono, el email, los comentarios, pero sin la eiqueta delante, es decir quiero que salga:
Nombre:pepito grillo
Telefono:96458962
etc
Saludos:germán
Une las variables a texto HTML con un .
$cuerpo = "Mensaje: ".$_POST['mensaje'];
$cuerpo .= "Telefono: ".$_POST['telefono'];
$cuerpo .= "Ciudad: ".$_POST['ciudad'];
$cuerpo .= "Direccion: ".$_POST['direccion'];
$cuerpo .= "Asunto: ".$_POST['asunto'];
Hola! Muchas gracias!
Si que funciona de esta forma.
Un saludo:germán
Hola de nuevo Josua !, estuve checando lo de la seguridad, y he leido que se deben validad todos los Input Data, entones en este caso deberiamos tener validado el nombre, el email y el asunto ? (si mal no entiendo esta validado el mail no ? en tu codigo). Encontre estos patrones que se pueden usar con la funcion PHP preg_match. Si la funcion regresa falsa, puedes prevenir que el usuario continue.
Patrones para filtrar campos como nombres
‘/^[a-z0-9()\/\'»:\*+|,.; \- !?&#$@]{2,75}$/i’
Patrones para filtrar campos de direcciones de email
‘/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i’
Examplo para email:
$emailPattern = ‘/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i’;
if (!preg_match($emailPattern, $emailFieldToTest)){
print ‘Please review the email address you entered. There seems to be a problem’;
}
Filtrar DESPUES de Submit (enviar)
Puedes permitir al usuario (o el atacante) a enviar o submit el form pero entonces se borrara la informacion antes que de esta sea procesada. Una funcion como la que se muestra debajo puede usarse para este proposito:
function safe( $name ) {
return( str_ireplace(array( «\r», «\n», «%0a», «%0d», «Content-Type:», «bcc:»,»to:»,»cc:» ), «», $name ) );
}
/*************
NOTE: str_ireplace is a PHP5 function. If you are using an
earlier version of PHP, you can use preg_replace
with the i modifier.
*************/
Se pueden agregar estas funciones al los input data del formulario para que sea mas seguro ?
Tambien encontre esto:
// Mail header removal
function remove_headers($string) {
$headers = array(
«/to\:/i»,
«/from\:/i»,
«/bcc\:/i»,
«/cc\:/i»,
«/Content\-Transfer\-Encoding\:/i»,
«/Content\-Type\:/i»,
«/Mime\-Version\:/i»
);
return preg_replace($headers, », $string);
}
Mil gracias por tu ayuda !!! ya no quiero que me ataquen mas, por eso es que estoy focalizada en la seguridad ….
Hola Josua, bueno queria felicitarte nuevamente por tu trabajo, realmente es muy bueno y ademas super estetico, tambien pedirte una disculpa por tantos comentarios sobre la seguridad, mi ignorancia en el tema hizo que preguntara tanto.
Ya lo he terminado le agregue un campo mas para el Pais, y funciona super, el unico detalle es que me queda el mensaje de que dice «Se ha Enviado el mail correctamente» dentro del Form y debajo del boton Enviar Mensaje. Es un problema ? o solo por estetica ?
Como le podriamos agregar un Captcha ? algo sencillo ….?
Mil gracias de nuevo, sos un genio!
Solo tendrías que mover la variable $result a donde quieras ponerla:
Por lo del captcha creo que este tutorial te puede servir.
Hola de nuevo.
A ver, vengo del tutorial anterior y ya valida bien, no se para que necesito validarlo en el lado del servidor. Además si lo hago así, me salen varios «NOTICE» de alerta indicándo que las variables están vacias. Lo que hice fue añadirles unos valores en la array de esta forma:
$errors =array(1 => "*Requerido", 2 => "*Requerido",3 => "*Requerido", 4 => "*Requerido", 5 => "*Requerido", 6 => "*Requerido", 7 => "*Requerido",8 => "*Requerido",9 => "*Requerido",10 => "*Requerido",11 => "*Requerido",12 => "*Requerido",13 => "*Requerido");
Pero queda algo feo, por eso me gusta más la forma de validar con js y jquery y una vez comprueba que todo esté hecho haga algo como unheader("location:procesa.php");
Alguna idea y muchas gracias (esto no es peloteo) me parece muy buena la web, instructiva, con un diseño sobrio pero agradable y muy funcional.
Saludos
Pues entonces borra toda la validacion del lado del servidor y deja solo el envio:
$dest = "tu@email.com"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo
$headers = "From: $nombre $email\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = '
';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '
';
}
Ok, ok, ya lo tengo, lo único que tengo que hacer es simplemente (no se si será un poco chapucero 🙂 no poner los
echo $errors[n];
¿Cierto?Exactamente y borrar también los value=»»
Muchas gracias
Increible tutorial! Enhorabuena… y además resuelves dudas… touché!
Hola Josue.
Muy buen tutorial el del formulario, en chrome y firefox funciona bien pero en internet explorer 9 (IE como siempre jodiendo), el formulario no se ve igual.
¿Como se podria solucionar eso?
En IE 9 se ve asi: http://4.bp.blogspot.com/-bA-gpo0KIts/Trf9OhI8_-I/AAAAAAAADaQ/JJZaHYIu_bI/s1600/formulario.PNG
Intenta implementar PIE, para que los efectos del CSS3 te funcionen en IE.
Mira pongo todo lo que hay en la pagina pero cuando abro este codigo con el generador no me funciona me sale codigo por todos las arriba del formulario.
Documento sin título
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$errors[3] = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = «tu@email.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
Tu Nombre:<input type='text' class='nombre' name='nombre' value='’>
Tu Email:<input type='text' class='email' name='email' value='’>
Asunto:<input type='text' class='asunto' name='asunto' value='’>
Mensaje:
perdon en pesto al principio generador queria poner navegador lo siento
El archivo es .php? lo estas trabajando en editor HTML visual?
Necesitas tener un servidor http (merjo apache) configurado para que ejecute «scripts» php. Si es en Windows puedes poner el Wamp, por ejemplo, que incluye todo lo necesario.
No entiendo lo de ¿ (El archivo es .php? lo estas trabajando en editor HTML visual?) esq llevo poco tiempo, pero bueno que lo estoy escribiendo el codigo desde dreamweaver en php pero cuando le doy a vista previa de la pagina me sale arriba del formulario
Ingrese su nombre’; }else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){ $errors[2] = ‘Ingrese un email correcto’; }else if($_POST[‘asunto’] == »){ $errors[3] = ‘Ingrese un asunto’; }else if($_POST[‘mensaje’] == »){ $errors[4] = ‘Ingrese un mensaje’; }else{ $dest = «tu@email.com»; //Email de destino $nombre = $_POST[‘nombre’]; $email = $_POST[‘email’]; $asunto = $_POST[‘asunto’]; //Asunto $cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje //Cabeceras del correo $headers = «From: $nombre $email\r\n»; //Quien envia? $headers .= «X-Mailer: PHP5\n»; $headers .= ‘MIME-Version: 1.0’ . «\n»; $headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; // if(mail($dest,$asunto,$cuerpo,$headers)){ $result = ‘
Email enviado correctamente
‘; // si el envio fue exitoso reseteamos lo que el usuario escribio: $_POST[‘nombre’] = »; $_POST[‘email’] = »; $_POST[‘asunto’] = »; $_POST[‘mensaje’] = »; }else{ $result = ‘
Hubo un error al enviar el mensaje
‘; } } } ?>
y luego me sale el formulario normal con sus imagenes y sus fondos y su boton
Ese es el problema. estas usando Dreamweaver en modo visual, al parecer no estas abriendo las etiquetas de PHP, ve al modo código y fijate que esten las etiquetas ?php antes del código PHP.
Ten en cuenta que este tutorial es de dificultad «Avanzada», te recomendaria revisases alguno de estos tutoriales de PHP básicos para que te hagas una idea de como funciona.
Hola Josue. No se si este es el lugar para hacer esta consulta, pero como reza el slogan… voy a hacerla:
Mira resulta que estoy haciendo un sistema de validación de usuarios para restringir el acceso a una página y la cosa es que suceden efectos extraños. Primero cuando pulsaba en el botón de atrás del navegador volvía a entrar, eso lo solucioné. Después entraba poniendo cualquier nombre y contraseña, es decir que con que no estuvieran vacíos los campos el tiraba para delante… ahora lo tengo resuelto, pero es mosqueante, cuando menos que sucedan esas cosas, pego el código para verlo mejor, valida con sesiones.
";
}
}
?>
Ahora viene el script que valida el usuario y la contraseña: De esta forma entraba con cualquier nombre y contraseña… raro, raro…
Introduce nombre de usuario y contraseña válidos
";
//header("location:index.php");
include('index.php');
}
?>
Ahora le di la vuelta a la forma de comprobarlo y no deja entrar a menos que introduzcas el usuario y la contraseña correctas, pero fíjate que es el mismo código:
Introduce los datos
";
//include('index.php');
}
// Si el nivel del usuario es menor de 10 entonces entra con todos los privilegios
elseif($datos['nombre']=$usuario AND $datos['clave'] = $password AND $datos['nivel']<='10'){ session_start(); $_SESSION['usuario'] = $usuario; $_SESSION['estado'] = 'Autentificado'; //$_SESSION['tiempo']=time(); header("location:panel.php"); } ?>
¿Qué crees que puede ser? Te diré por si sirve de algo, que tengo el php con register_globals a ON… aunque no creo que sea el problema.
Bueno muchas gracias por todo y perdón por el tostón 😉
Creo que el error que tienes es cuando haces la condición, estas usando solo =, recuerda que eso es para declarar una variable, para hacer una comparación se usan ==
Hola Josue te acuerdas de mi haber si me solucionas la pagina de que cuando abro la pagina con el navegador se me queda este testo arriba del formulario
Ingrese su nombre’; }else if($_POST[‘email’] == ” or !preg_match(“/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/”,$_POST[‘email’])){ $errors[2] = ‘Ingrese un email correcto’; }else if($_POST[‘asunto’] == ”){ $errors[3] = ‘Ingrese un asunto’; }else if($_POST[‘mensaje’] == ”){ $errors[4] = ‘Ingrese un mensaje’; }else{ $dest = “tu@email.com”; //Email de destino $nombre = $_POST[‘nombre’]; $email = $_POST[‘email’]; $asunto = $_POST[‘asunto’]; //Asunto $cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje //Cabeceras del correo $headers = “From: $nombre $email\r\n”; //Quien envia? $headers .= “X-Mailer: PHP5\n”; $headers .= ‘MIME-Version: 1.0′ . “\n”; $headers .= ‘Content-type: text/html; charset=iso-8859-1′ . “\r\n”; // if(mail($dest,$asunto,$cuerpo,$headers)){ $result = ‘
Email enviado correctamente
‘; // si el envio fue exitoso reseteamos lo que el usuario escribio: $_POST[‘nombre’] = ”; $_POST[‘email’] = ”; $_POST[‘asunto’] = ”; $_POST[‘mensaje’] = ”; }else{ $result = ‘
Hubo un error al enviar el mensaje
‘; } } } ?>
es como si no lo interpretase o como si me sobrara no entiendo??Ayuda
Gracias Josue.
Hola Fran. Mira, lo primero que tienes que hacer es comprobar que tienes php. Si tienes php entonces, comprueba que tienes un archivo .html con php embebido (es lo que creo), en tal caso puedes hacer dos cosas:
1- Configurar Apache (suponiendo que sea tu servidor http = web) para que mire los html como php. Debes editar el httpd.conf y buscar unas líneas como estas:
DirectoryIndex index.php index.php3 index.html index.htm
Pero lo más sencillo es la opción 2: Renombra el archivo «loquesea.html» a «loquesea.php»
Espero que te sirva
Hola, quisiera incluir el formulario que muestras, pero eh intentado y no llegan los mensajes, como puedo solucionar ese problema incluyendolo en mi web.
Pon la dirección en donde lo estas probando.
Hola yo realizo un insert con procedimiento almacenado, a traves de un formulario, pero quisiera saber si se puede realizar una consulta y que el resultado lo envia al formulario. Con solo poner en el input el id o identificador y darle enter.
No te logro entender, quieres hacer un formulario que inserte un valor en una base de datos o algo por el estilo?
Hola Josue,
Felicidades pelo tutorial! Muy Bueno!
Estoy intentando validar el tel, pero algo no está bien y me salta el mensaje «Ingrese su Teléfono».
Puedes echar me un cable?
Gracias!
Josue exelente tutorial, lo estoy probando en en la web pero el problema es que no mellegan los correos a mi e-mail, que es el que te estoy dando. Por favor dime si es que puse mal mi correo.
$dest = «arcadiomonroy@hotmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del
Va en este lugar verdad, Gracias por tu respuesta.
Tu correo lo has puesto bien, no veo porque no te debería funcionar, te has fijado si llega a Spam? si no llega ni a Spam, tal vez sea configuración de tu servidor que no tiene soporta para mail().
Josue, disculpa pero al servidor te refieres al hosting, yo tengo 1and1 y ellos tienen e-mail service. Sera que tengo que configurarlo alli, que piensas.
Si, pero si es un hosting profesional debería venir ya configurado y listo para usar, puedes hacer una prueba con este código en un .php y correrlo en el servidor para probar si puede usar mail():
mail('arcadiomonroy@hotmail.com', 'Asunto', 'Mensaje Prueba');
Josue, perdon me preguntaba como seria el codigo de la Validacion y Envio en JavaScript, no se si fueras tan amable
de poner el codigo en js.
Saludos.
Revisa el segundo tutorial de esta serie:
https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ii-validar-con-jquery
Pero, como hago para que los campos se envien a mi correo, usando javascript o ajax. ¡ me dijeron que no se puede con js !!!. hay alguna funcion como el mail de php.
Ah, hice otro tutorial de eso como hacer un formulario AJAX: https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ajax-con-php-y-jquery
Ahora si, ese es el link correcto no ¡¡, muy bien.
muchas gracias josue, ha por cierto tu web es de lo mejor con lo que me he topado.
porfa, recomienda un manual js y ajax.
Hola Josue hice la prueba que me recomendaste y sale este error.
Error 403 – Forbidden
You tried to access a document for which you don’t have privileges.
Tienes idea que debo hacer en mi hosting
Contactar con servicio al cliente, el problema esta allí.
Ok, Josue gracias por tu ayuda, espero poder solucionarlo porque me gusta el tipo de formulario para colocarlo en mi web.
Hola… excelente tutorial !!! No hay palabras para agradecerte =) … Solo que me quedan algunas dudas en el aire… Quisiera saber si pudieses añadir como validar chekboxes, listas desplegables y radiobuttons tanto del lado del cliente(JQuery) como del servidor (PHP) … Te estaría infinitamente agradecido. Salu2
Hola, estoy haciendo un tutorial sobre ello, te aviso cuando lo publique!
Gracias… Worale respondiste muy rapido… salu2… Sitio recomendado 😀
https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
Hola Josue,
Excelente tutorial, funciona a la perfección pero lo que quisiera es poder quitar la casilla ‘Asunto’ y que el formulario siga funcionando de la misma manera ya que al quitar las líneas que indico mas abajo lo que sucede es que el correo me llega con el nombre de usuario del hosting y en asunto me sale el mensaje
Por favor te pediría me indiques como quitar la casilla asunto sin que suceda lo que indico.
(estas son las lineas que retire del código)
– Asunto:
– }else if($_POST[‘asunto’] == »){
$error3 = ‘Ingrese un asunto’;
– $asunto = $_POST[‘asunto’]; //Asunto
– if(mail($dest,$asunto,$cuerpo,$headers)){
– $_POST[‘asunto’] = »;
Muchas gracias.
Saludos,
Mira el código PHP que te pongo, quite la validación del asunto y cambie el valor de la variable $asunto por un valor estático(antes lo recibía del form).
Ingrese su nombre';
}else if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$errors[2] = 'Ingrese un email correcto';
}else if($_POST['mensaje'] == ''){
$errors[4] = 'Ingrese un mensaje';
}else{
$dest = "tu@email.com"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = "Asunto"; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo
$headers = "From: $nombre $email\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = '
';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '
';
}
}
}
?>
Josue, gracias por tu respuesta.
He hecho el cambio pero no envía el correo ahora. Tal vez se tendría que cambiar también el archivo js?
Como te comentaba lo que deseo es el mismo formulario pero sin la casilla «Asunto», solo necesito el campo de nombre, correo y mensaje.
Muchas gracias.
Saludos,
El formulario envia, sale el mensaje de error o de exito?
el js deberia ir asi:
$(function() {
var emailreg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
$(".boton").click(function(){
$(".error").fadeOut().remove();
if ($(".nombre").val() == "") {
$(".nombre").focus().after('Ingrese su nombre');
return false;
}
if ($(".email").val() == "" || !emailreg.test($(".email").val())) {
$(".email").focus().after('Ingrese un email correcto');
return false;
}
if ($(".mensaje").val() == "") {
$(".mensaje").focus().after('Ingrese un mensaje');
return false;
}
});
$(".nombre, .mensaje").bind('blur keyup', function(){
if ($(this).val() != "") {
$('.error').fadeOut();
return false;
}
});
$(".email").bind('blur keyup', function(){
if ($(".email").val() != "" && emailreg.test($(".email").val())) {
$('.error').fadeOut();
return false;
}
});
});
Ahora si envía el correo, este llega pero no aparece el mensaje indicando que el correo se ha enviado correctamente.
A que se podría deber?
Gracias
Saludos,
El mensaje se almacena en la variable $result, fíjate donde lo estas poniendo, si ha sido declarado o no, fíjate también si te sale algún error PHP.
Hola Josue,
Antes de nada gracias por el tutorial. Muy completo. Te comento el problema que tengo.
Estoy realizando una página web y una de las opciones de menu es la de subscripción, que nos lanza una ventana modal, dejando de fondo el lugar donde te encontrabas en ese momento en la página.
Todas las páginas de la web son html. Pero dentro de esa ventana modal, por js hago una llamada al ficheo suscribir.php que nos pintará el formulario para escribir el e-mail, con validación del lado cliente y servidor.
Te copio el código, similar al realizado por ti:
Suscribir
<?php
if(isset($_POST['enviar'])){
if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$errorValidacion = 'Ingrese un e-mail correcto’;
}
else{
//No existen errores en la validación del e-mail. Recogemos el valor del email
$email =$_POST[‘email’];
//conexión con la BBDD de cerramientos Alumen
$conexion = mysql_connect(«localhost»,»root»,»»);
mysql_select_db(«email_cerramientos»,$conexion);
//consulta a la BBDD
$datos = mysql_query(«insert into clientes(id_clientes,email) value(»,’$email’)»,$conexion);
if($datos)
{
echo ‘Todo ok’;
}
else
{
echo ‘Error en la inserción’;
mysql_error($conexion); //sirve para conocer cual ha sido el error
}
}
}
?>
E-mail: <input type="text" id="email" class="email" name="email" value="» >
El problema es el siguiente. Si en el action del formulario dejo, como ahora está, suscribir.php, la validación del formulario se realiza perfectamente, así como la inserción en la BBDD, pero claro, el problema es que se carga una nueva página suscribir.php fuera del contenido de la web. Piero la situación en la página, la ventana modal, etc….
Y si dejo el action vació, lo que me ocurre directamente al pulsar en Enviar, es que se me carga la página principal y no realiza validación ni inserción en la BBDD.
¿Qué piensas que debería poner en el action?
Muchisimas gracias. Espero que me puedas ayudar, seguro es una tontería, pero no doy con la tecla 🙁
Creo que la solucion es hacer un formulario AJAX que no recarge la pagina al enviar, mira tengo un tutorial de como hacer uno: https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ajax-con-php-y-jquery
Ahora si se ve todo el código. Lo siento 🙁
<?php
if(isset($_POST['enviar'])){
if($_POST['email'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email'])){
$errorValidacion = 'Ingrese un e-mail correcto’;
}
else{
//No existen errores en la validación del e-mail. Recogemos el valor del email
$email =$_POST[‘email’];
//conexión con la BBDD de cerramientos Alumen
$conexion = mysql_connect(«localhost»,»root»,»»);
mysql_select_db(«email_cerramientos»,$conexion);
//consulta a la BBDD
$datos = mysql_query(«insert into clientes(id_clientes,email) value(»,’$email’)»,$conexion);
if($datos)
{
echo ‘Todo ok’;
}
else
{
echo ‘Error en la inserción’;
mysql_error($conexion); //sirve para conocer cual ha sido el error
}
}
}
?>
E-mail: <input type="text" id="email" class="email" name="email" value="» >
Josue, muchisimas gracias. Efectivamente con dicha opción funciona perfectamente.
En el else, si ha realizado el chequeo a nivel de cliente con javascript, llamo al método ajax y desde allí paso los datos del email al fichero php, que también realiza la validación y, al ser correcto, lo inserta en la BBDD.
La unica pega que le veo, claro, es que si el cliente no tiene javascript habilitado no funcionara, pero no se puede tener todo. Es esto correcto, ¿no?
Muchas gracias !!!
Cierto, lo que puedes hacer es incluir una etiqueta noscript para cuando el usuario no tenga JavaScript habilitado, algo como:
amigo buen post, y funciona muy bien! una pregunta como hago si quiero enviarlo a 2 o mas correos??? los separo por comas o como??
Efectivamente, en la variable $dest agregas los dos.
perfecto!! solo queria estar seguro! muchisimas gracias me fue de gran ayuda!!
Feliz Año nuevo! y muy buen tutorial y página en general (:
Una pregunta, integré el formulario en mi página, funciona perfectamente, me manda el mensaje a puse que lo hiciera, pero en la ventana que aparece después, la confirmación de envio aparece completamente desordenada, ya cheque el CSS del formulario pero la verdad no encuentro cual podria ser el problema.
La página que estoy haciendo es esta: http://manteles.neoprit.com puedes enviarme algo y ver a lo que me refiero.
Muchas gracias de antemano!
No esta funcionando el jQuery en tu pagina, intenta ver si lo estas llamando.
El jQuery funciona, sí me llegan los mensajes.
Pero después de enviar, las cajas se desajustan y se ven encimadas.
descargué el código del tutorial y solo le ajuste las medidas y el correo de destino.
Podrías usar mi formulario? (: http://manteles.neoprit.com/contacto.php estoy seguro que el problema es de CSS pero no logro ubicar el problema
Encontré el error. No había cerrado bien un DIV
Pero ahora tengo otro problema… en Outlook, en la cabeza del correo que me llega desde el formulario, el nombre y el correo aparecen de esta forma:
Nombre micorreo@dominio.com
Y cuando le doy reenviar copia esas dos variables como si fuera un correo, no me habia dado cuenta de eso y pensaba que era error de Outlook.
Cómo puedo modificar el PHP del archivo proceso.php para que en la cabeza del correo aparezca:
Nombre `[micorreo@dominio.com] que es la manera en que outlook no los junta.
Hola Josue, esta excelente el post, un formulario asi es lo que andaba buscando.. Ahora me gustaria saber como agregar campos en el formulario tales como «checkbox», «select», «radio»… Se podrian agregar, validar y recibir en el mail??
Muchas gracias de antemano.
Si, mira este tutorial te puede servir https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
Heyy muchas gracias, esta excelente el tutorial que me sugeriste, ahora como ultimo no se si tienes, aprovechando que el formulario usa PHP, algun codigo anti-spam como esos que ponen al usuario a realizar un tipo de suma o algo asi ?? Es solo para darle algo mas de seguridad …. Muchas gracias nuevamente
Este te puede servir:
https://tursos.com/tutoriales/php/como-hacer-un-sistema-captcha-con-php
Muy bueno el formulario, pero note que al enviar los datos al correo llegan sin ningun problema, la situacion esta que la refrescar la paginas (actualizarla), vuelve a mandar los datos, y si vuelves a refrescar la pagina vuelve a mandar los datos aun este limpio el formulario, … ¿por que es eso?… se supone que no deberia mandar nada hasta que sean introducidos nuevos datos, … ¿que hacer para evitar eso?
Es raro, a mi no me pasa eso, cuando quiero refrescar el navegador me pregunta si quiero re-enviar los datos, que navegador estas usando?
Ahora el IE8, … ¿sera este el problema?
Ahora que lo estoy probando en IE9 igual sucede, … entonces al parecer no es el navegador, … ¿que puede ser?
Hola sabes , eh intentado por todas partes hacer un formulario para enviar datos, lo prove con el wamp server, pero me dice hubo un error al enviar el mensaje
instale el xammp pero me dice lo mismo, quisas no se usarlo .
porfavor ayudame que eh estado ya como 1 mes tratando gracias.
No va a funcionar en un servidor local, a menos que tengas un SMTP instalado, que te permita enviar correos desde tu servidor local.
hola pucha , ya no se como hacerlo, mira mi papa tiene un servidor , donde juega el unreal y ahi tire el index.php , pero lo unico que me llega al correo es el mensaje, y el correo de la persona sale bien hasta que llega al @ de ahi sale otra infinidades de cosas.
prove con otro formulario que hice yo, me llega el correo , pero me sale que el frilstro de smartscreen lo bloquea y los datos que pongo en el formulario no aparecen.
ayudame plis te juro que he provado todo
El correo de la persona que envia? alli va siempre sale el nombre del host por ejm en mi caso me sale josue@hostgator.com o algo asi.
¿Josue como estas? Una consulta, … me gustaria pode saber como subir imagenes con php y que queden en una base de datos, con un cierto tamaño ya establecido … ¿podrias ayudarme con eso?, te lo agradeceria gracias desde ya.
Mmm no se pueden guardar imagenes en una base de datos, lo que puedes hacer es que las imagenes se suban a un directorio y en una base de datos guardes la direccion de esta imagen recien subida.
Si las imagenes a un directorio y el nombre a la base de datos, …
Saludos Camaradas:
Una pregunta para el administrador o para los participantes:
¿ Qué función cumple el código que aparece en la carpeta Macoxs?
¡Disculpen¡
Hola Omar! no cumple ninguna función, se crea automaticamente cuando creas un zip en cualquier sistema operativo de Mac, eliminalo si deseas no cambiara en nada la funcionalidad del script 🙂
Hola,
Muy interesante tu post, el enlace a codigo.zip no va 🙁
Le puedes volver a subir?
Gracias
Estas seguro? a mi me anda perfectamente
https://tursos.com/demo/cf/php/codigofuente.zip
intenta darle clic derecho «Guardar enlace como..»
Hola Josue, gracias por el aporte, he implementado en form y todo funciona bien, pero tengo dos dudas que espero me ayudes a resolver:
1. como hago para validar una lista select y que no se borre lo seleccionado
2. tengo un input file en el mismo form con esta validación:
$error = $_FILES[‘archivo’][‘error’];
$subido = false;
if(isset($_POST[‘boton’]) && $error==UPLOAD_ERR_OK)
{ if($_FILES[‘archivo’][‘type’]!= «application/vnd.openxmlformats-officedocument.wordprocessingml.document» || $_FILES[‘archivo’][‘size’] > 20479941) { $error = «Comprueba que el archivo esté en Word y pese menos de 2Mb.»; }
else { $subido = copy($_FILES[‘archivo’][‘tmp_name’], $uploadfile); }
} if($subido) { echo «El archivo ha subido exitosamente»; }
else { echo «Se ha producido un error: «.$error; }
como podría incluirla como un error 6 por ejemplo en tu validación?
muchas gracias por tu respuesta.
Para que no se borre lo que esta seleccionado te refieres(en el dropdown)? validalo con javascript asi la pagina no se recarga.
https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
Que tal, oye me podrías ayudar para agregar un checkbox de «Aceptar términos y condiciones» al final y poder validarlo, ya lo intenté usando tu tutorial de validación de checkbox pero nomás no lo puedo hacer funcionar, ya me quebré la cabeza y nada! Al parecer si me lo valida porqué cuando lo dejo sin checked me sale el mensaje que le pongo de que «Debe aceptar los términos y condiciones» pero ya al seleccionarlo y presionar el botón de send nada! No pasa nada y por más cosas que le he movido al código no logro hacerlo funcionar, te agradecería si me dieras un tip, por cierto tus tutoriales son fabulosos y funcionan a la perfección!
Que codigo estas usando? seria mejor si pones el comentario aqui https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery veo que aqui ya hay muchos.
Gracias por la respuesta, si me refería a la opcion seleccionada con select se pierde cuando oprimes el botón y falta algún otro campo.
Con javascript lo tengo todo ok con jquery , pero igual llegaban mensajes con todos o varios campos vacios incluidos los select, por eso también la validacion en php. Me sirvió mucho el tuto, igual si tienen desactivado javascript, el usuario debe tener algo más de cuidado para completar todos los campos. pero con ambos es mejor me parece, por lo menos ahora ya no llegan mensajes sin datos.
Gracias otra vez , buen trabajo.
Hola,
He creado el siguiente archivo php para que me envien un formulario a mi cuenta de email, pero no llega a la bandeja de entrada, ¿donde puede estar el error? La validación me da como correcta (aparece el mensaje):
<?php
//no se muestran errores de php
error_reporting(0);
//ahora vamos a realizar la validación de los datos del formulario
if($_POST['nombre'] != '' && preg_match("/^\s+$/",$_POST['nombre']) && $_POST['emailFormulario'] != '' && preg_match("/^[A-Za-z0-9_\-\.\+]+@[A-Za-z0-9_\-\.]+\.([A-Za-z]{2,4})+$/",$_POST['emailFormulario']) && $_POST['telefono'] != '' && preg_match("/^\d{9}+$/",$_POST['telefono']) && $_POST['mensaje'] != '' && preg_match("/^\s+$/",$_POST['mensaje'])){
$nombre = $_POST['nombre'];
$emailFormulario = $_POST['emailFormulario'];
$telefono = $_POST['telefono'];
$mensaje = $_POST['mensaje'];
$emailDestino = "info@xxx.com";
$headers = "From: $nombre $email\r\n";
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$asunto = "Contacto";
$cuerpo = "Nombre y apellidos: ".$nombre."»;
$cuerpo .= «E-mail: «.$emailFormulario.»»;
$cuerpo .= «Teléfono: «.$telefono.»»;
$cuerpo .= «Mensaje: «.$mensaje;
mail($emailDestino,$asunto,$cuerpo,$headers);
}
?>
Gracias por vuestra ayuda!!!
En el $headers = «From: $nombre $email\r\n»; estas usando $email y debe ir $emailFormulario inténtalo con eso, saludos…
Desgraciadamente sigo sin encontrarle solución al problema. ¿Donde puede estar el error para que no se envié el correo?
Gracias Carlos, lo intente pero sigue sin llegar el correo. Tengo subido el fichero php dentro de una página web en un servidor que permite el uso de php. ¿Se os ocurre alguna otra cosa?
Mil gracias!!!
La variable $emailDestino esta con info@xxx.com? te has fijado si llega a SPAM?
Hola Josue,
No, no llega a spam el correo. Me da ok a la validación (javascript y php) y me aparece el mensaje de mensaje enviado lo cual, quiero pensar, significa que hace la validación por php correctamente, pero al final el email no llega…
Gracias !!!
Muchísimas gracias josue
Hola solo felicitarle por su formulario.
hola k tal josue busco algun codigo para a la hora de inserter el captcha y si esta correcto q me inserte en la base de datos el registro sino q me vuelva a regresar a crearcuenta.php te agradeceria tu pronta respuesta gracias
Te envie un correo, por favor trata que tus comentarios se centren en el tema del articulo, gracias.
ok gracias te lo agradesco
Hola a todos!!
¿Se os ocurre alguna cosa para averiguar porque no llega el correo? ¿Puede estar algo mal en el código que he introducido?
Gracias!!!
Hola Josue
Todo me parece funcionar correcto. El formulario lo meto dentro de la sección contacto de mi web, pero cuando carga estilos.css me cambia todos los estilos ya definidos de la página contactos. He probado a ponerlos después, pero me lo cambia todo.
No estoy muy puesto en html, pero a base de probar he logrado que funcione tu código. Sino le meto los estilos.css, el formulario se queda un poco feo.
Me puedes echar una mano?
Hola Josue
he insertado en mi web tu formulario y me quedo muy bien y me manda emails,
lo que ocurre es que cuando me da el mensaje de «email enviado correctamente! se desconfigura los CSS de la página. ¿Me puedes ayudar al respecto?
http://www.maspacientes.info/contact_us.php
graciass!!!!!!!!
Es una etiqueta div que esta mal cerrada y el contenido se esta comiendo al sidebar.
Hola Josué.!
Estoy teniendo el mismo problema, después del envió se desconfiguran los CSS de la página..
Intente copiar tal cual el código que publicaste y modifique mi forma orginal y en las dos sucede lo mismo…
Pudieras dar más detalles de donde esta el error?
Muchas Gracias!!
Hola, no copies todo el codigo, obvia la parte del * y el body en el css, tal vez se arregle.
Hola, esta de lujo el tutorial, quisiera saber si no es mucha molestia como podría agregar la opcion de que los mensajes enviados tambien se almacenen en una base de datos Mysql, he intentado pero no se que me pasa que no logro a que me guarde los datos, por favor si me podrias decir o enviarme el codigo con este dato seria genial, ya que quiero guardar un resumen de todos los correos recibidos en una base de datos y a la vez tener la posibilidad de guardar el email para luego poder contactar el usuario, gracias y Dios te bendiga
Si entiendes un poquito de PHP, este tutorial te puede servir https://tursos.com/tutoriales/php/como-hacer-una-lista-de-tareas-en-php esta muy bien explicada la parte de como ingresar datos en una DB, solo seria cosa de mezclar los codigos con este y ya.
Hola Josue, veo que la forma de contacto funciona correctamente, lo publico igual en un servidor windows? o necesito instalar algo en el servidor?
saludos desde México
Mientras el servidor soporte PHP, puedes instalarlo en cualquier S. O.
es una pagina htm muy básica y esto es la hoja de contacto, pero no llegan alguna idea?
$value) {
$msg .= ucfirst ($key) .» : «. $value . «\n»;
}
}
else {
foreach ($_GET as $key => $value) {
$msg .= ucfirst ($key) .» : «. $value . «\n»;
}
}
mail($to, $subject, $msg, $headers);
if ($forward == 1) {
header («Location:$location»);
}
else {
echo «Thank you for contacting us. We will get back to you as soon as possible.»;
}
?>
Gracias por tu ayuda
hola muchisimas gracias por tu ayuda, ya puse un formulario tuyo en mi website.
me gustaria poner este «formulario de contacto iii validar y enviar con php» pero no se puede descargar el archivo y bueno sigo los paso del tutorial, pero al revisar el demo veo q no tiene los mismos codigos q el index php
m podrias aconsejar para mejorar lo cumunicacion «mi website Nota no es lucrativa» si pudieras revisartla x favor, sipudieras ayudarme en algomas t lo agredeseria muchisimos
ayuda por favor
No puedes descargar el archivo? prueba con este enlace https://tursos.com/demo/cf/php/codigofuente.zip
Hola hermano!!
Tengo problema cuando le doy a vizualizar me aparece el formulario lleno de los codigos, como hago par aque no me aparesca esto, como hago para que cuando el de llegue mi correo (como subirlo a PHP)
Hola Josue, un saludo!. Subí los archivos a mi servidor que soporta Php, todo carga perfecto pero no me envía el correo a la cuenta que asigné, q pasará?.
Por otra parate hay alguna forma de colocar en el formulario una selacción de 3 departamentos o áreas? Ejemplo: Compras, Ventas, Informática y que cuando el usuario seleccione alguna de esas se envíe aun correo específico, es decir, si seleccionas compras, el mail vaya al correo de compras y si seleccionas ventas, el mail vaya al correo de ventas?.
Gracias por tu amble ayuda!!
Este es mi código:
Contacto
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$errors[3] = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = «carlosacostatoro@gmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
Tu Nombre:<input type='text' class='nombre' name='nombre' value='’>
Tu Email:<input type='text' class='email' name='email' value='’>
Asunto:<input type='text' class='asunto' name='asunto' value='’>
Mensaje:
Hola Josue, un saludo!. Subí los archivos a mi servidor que soporta Php, todo carga perfecto pero no me envía el correo a la cuenta que asigné, q pasará?.
Por otra parate hay alguna forma de colocar en el formulario una selacción de 3 departamentos o áreas? Ejemplo: Compras, Ventas, Informática y que cuando el usuario seleccione alguna de esas se envíe aun correo específico, es decir, si seleccionas compras, el mail vaya al correo de compras y si seleccionas ventas, el mail vaya al correo de ventas?.
Gracias por tu amble ayuda!!
Este es mi código:
Contacto
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$errors[3] = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = «carlosacostatoro@gmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
Tu Nombre:<input type='text' class='nombre' name='nombre' value='’>
Tu Email:<input type='text' class='email' name='email' value='’>
Asunto:<input type='text' class='asunto' name='asunto' value='’>
Mensaje:
hola Josue
Gracias por tu explicacióny tu tiempo, me ha ayudado mucho.
Tengo una duda con respecto al reseteo de las variables introducidas por el usuario en campos tipo radio, una vez se haya enviado por correo el formulario, ya que los campos tipo text o textarea, los borra sin problemas, pero los tipo radio, siguen marcadas, checked.
Me podrias dar alguna idea para poder desmarcarlas?.. gracias
No me hagas caso… no estaba poniendo correctamente la variable a resetear
Hola a todos,
Sigo con el mismo problema con el código arriba posteado. No me llega el email ni a spam ni a ningún sitio, pero las validaciones, tanto en cliente con javascript como en servidor con php, las da como correctas
Gracias por vuestra inestimable ayuda
Sin palabras Josué, sos un genio!, está perfecto.
Hola!! Muchas gracias por el formulario y por responder todas las dudas tan rapido, lo que hace al post mucho mas interesante y completo.
Sigo teniendo problemas con el IE. En mozilla se ve de lujo, pero en IE se ve tal como postio Artuto el 7 de Noviembre de 2011.
Intente incluir
-webkit-border-radius:5px;
-moz-border-radius:5px;
-moz-box-shadow:rgba(0,0,0,0.15) 0 0 1px;
-webkit-box-shadow:rgba(0,0,0,0.15) 0 0 1px;
Aca el sitio que estoy armando, desde codigo fuente pueden acceder a ver el css a ver si me esta faltando algo.
MIL GRACIAS!!! ESPERO RTA PRONTO!!!!
http://redartistica.comze.com/php/inscripcion/ <– me olvide de poner el enlace.
🙂 gracias
Hola! Tengo un problema, el mail me llega sin los datos completos sólo con el mensaje.
Te paso el código que esta tal cual tu lo escribiste
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$errors[3] = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = «darkman_darkrider@hotmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
Quieres que el nombre, email, asunto te llege CON el mensaje?
Sí, que lleguen todos los campos, pues, en el mensaje.
Entonces tienes que combinarlos en la variable $mensaje
$cuerpo = $_POST[‘mensaje’];
$cuerpo .= $_POST[‘nombre’];
y asi
de forma similar como se combina la variable $headers
Entonces el código final queda así?
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$errors[3] = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = «darkman_darkrider@hotmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’];
$cuerpo .= $_POST[‘nombre’];
$cuerpo .= $_POST[‘email’];
$cuerpo .= $_POST[‘asunto’];
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
Parece que si, pruebalo.
Funcionó! muchísimas gracias! =)
Hola Josue.!
Te felicito por ser tan accesible y contestar cuanta cosa preguntamos..
Aqui va la mía..
Tengo instalado el XAMPP y dice ahi que el SMTP Service esta activado.. Sin embargo al correr el index.php menciona que «Hubo un error al enviar mensaje».
Que mas debo configurar.?
Muchas gracias por tu ayuda.!
Never mind… segui leyendo y vi que había que hacerlo en el servidor.
Y magic.. works!!!
Muchas gracias!
Hola Josué,
¿Puedo usar este formulario con localhost xampp en una página de Facebook?
Un saludo.
No.
Hola Josué.
Segui los pasos uno a uno y me aparecen 2 errores, creo que uno es mas grave que el otro.
el primero es que viendo el formulario aparecen dentro de los boxes de texto esto, <?php echo $_POST[
y asi en cada uno de los otros boxes.
y el segundo error aparece esto despues de mandar
The page cannot be displayed
The page you are looking for cannot be displayed because the page address is incorrect.
——————————————————————————–
Please try the following:
If you typed the page address in the Address bar, check that it is entered correctly.
Open the http://www.nachi.com.mx home page and then look for links to the information you want.
HTTP 405 – Resource not allowed
Internet Information Services
——————————————————————————–
Technical Information (for support personnel)
More information:
Microsoft Support
Gracias y espero que puedas ayudarme en esto.
Saludos desde México
Hola Josue, disculpa hermano, podrías ayudarme con la preguntas que te hice? Gracias
En que te puedo ayudar?
Hola..
Me gustaria saber si es posible que, después de que el correo se envia, pueda mandar a los usuarios a una pagina donde salga el mensaje de correo enviado correctamente y el usuario vea sus datos impresos. Muchas gracias por tu tiempo y te expreso cordialmente mi admiración por tu excelente trabajo, muchas gracias..
Atte: Dr.Studbaker.
Puedes hacerlo con header() de PHP.
https://tursos.com/tutoriales/otros/4-maneras-de-redireccionar-una-pagina-web
Gracias Por la respuesta…
Saludos…
hola, contigo se aprende de verdad, encantado de conocerte, saludos
Hola que tal.
Antes que nada muchas gracias por el grandioso trabajo que realizas. Bien por otro lado quiero hacerte una consulta, me gustaria saber si en lugar de que se envie el formulario a un correo, pueda aparecer los datos en la parte de abajo, algo asi como los comentarios que se colocan en las paginas.
De antemano muchas gracias por tu ayuda.
Hola! Muchas gracias por el tutorial. Me gustaria saber si una vez enviado el correo perfectamente y que me aparezca el mensaje de «Email enviado correctamente» hay alguna manera para esborrar este mensaje cuando pulsas a otro campo del formulario. Por si quiero volver a enviar un correo, que no se me quede este mensaje para siempre. Muchas gracias por todo.
MUCHAS GRACIAS ME SIRBIO MUCHO! SALUDOS!
Muchas Gracias por el tutorial me fue de mucha ayuda …. Tambien me gustaria un tutorial de como hacer un sistema de comentarios como el que tienes aqui , lo que pasa es que estoy haciendo un proyecto de la Universidad de un sitio web y me gustaria un sistema de comentarios como este , que sea elegante y simple como lo tienes aca… Espero tu respuesta Gracias 🙂
Usa WordPress, este blog esta basado en WP.
Que tal Josue, excelente trabajo, agradesco mucho tu aporte. Me estoy basando en tu trabajo para aplicar las funcionalidades en un formulario. En este caso, como podria redireccionar a otra pagina después de guardar los datos de mi formulario? En vez de que aparesca que se envio el mensaje correctamente, que se abriera otra página. Lo que pasa es que necesito que me redireccione a una página nueva donde tengo incluidos unos botones de compra para paypal y lo he intentado con la funcion del header(«location: mipagina.php»); =(
Saludos
Hola, tal vez el metodo Javascript de este tutorial te sirva.
Muchas gracias Josue. Efectivamente habia contemplado un par de estos metodos. Pero la duda que siempre me ha surgido, es como implementar alguno de estos metodos solamente cuando mi formulario este completo? y no que al momento de ingresar a la pagina me redireccione automaticamente. Ojala me puedas orientar un poco al respecto hermano. Saludos
Hola josue, veo que respondes rapido a los mensajes, yo tengo que hacer un login donde valide usuario y contraseña para que pueda entrar a la pagina principal usando php y scripts, ademas debe validar que el campo no esta en blanco, espero me puedas ayudar
Hola tengo una duda yo tengo que hacer un login donde valide usuario y contraseña para que pueda entrar a la pagina principal usando php y scripts, ademas debe validar que el campo no esta en blanco, espero me puedas ayudar por que deplano eh visto tantos que ya me confundieron y no tengo idea ya de como hacerlo
Tal vez este tutorial te sirva https://tursos.com/tutoriales/php/como-hacer-un-sistema-de-login-de-usuarios-en-php-con-mysql
Necesito comunicarme contigo, pero es importante que sea por correo, por que es algo largo de explicar por aca.. si puedes mandarme una respuesta a evil.tsuke@gmail.com
saludos cordiales
P.D.: es una ayuda para una pagina web que estoy diseñando
Crea un tema en la comunidad, allí podemos ayudarte 🙂
Buenas Josue! Enorabuena por el trabajo que realizas!! Tengo un pequeño problema: Me gustaría poner este formulario de contacto en una web que estoy intentando hacer para un amigo. He copiado el código tal y como explicastes solamente cambiando el mail de destino. y no me llega el correo a la direccion. Te adjunto el codigo:
Contacto
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$error1 = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$error2 = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$error3 = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$error4 = ‘Ingrese un mensaje’;
}else{
$dest = «juanitoiberico3@hotmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente 🙂‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje 🙁‘;
}
}
}
?>
Nombre:<input type='text' class='nombre' name='nombre' value='’>
Email:<input type='text' class='email' name='email' value='’>
Asunto:<input type='text' class='asunto' name='asunto' value='’>
Mensaje:
Agradeceria tu ayuda. Tengo alojada la pagina en un servidor de pruebas gratuitos que recomendastes en otro articulo (xtreemhost.com)
Gracias figura
el final del código no se ha pegado bien en el mensaje, pero es el mismo que lo explicado en el tutorial…espero tu respuesta.un saludo. y gracias de antemano
Estas seguro si xtreemhost.com soporta mail()?
Creo que si….tu puedes recomendarme alguno gratis para poder probar mi web y este formulario de contacto?? te lo agradecería…
Hola Josue! eh usado tu codigo con mi formulario y phpmailer, y me funciono correctamente!, pero tengo una pregunta, como hago para que limpie los campos del formulario cuando se haya enviado el mensaje correctamente?
Desde ya muchas gracias, Saludos! =)
Puedes hacer una redireccion a la misma pagina cuando el phpmailer se ha enviado, algo como http://www.experts-exchange.com/Web_Development/Web_Languages-Standards/PHP/Q_24699635.html
Hermano gracias por el aporte, ya termine mi formulario de contacto 😀 pero tengo una pregunta…
Si se puede añadir un menú desplegable en vez del cuadro de texto? desde ya agradezco tu respuesta.
Claro, solo agrega el campo correspondiente (select) y reemplaza los nombres y variables que hay que reemplazar.
Soy nuevo en esto y no se por donde empezar, me gustaría que me ayudaras en eso si no es tanta molestia 😀
Buen dia Josue
Antes que todo felicitaciones por el tiempo que le dedica a estos tutoriales tan bien explicados, tengo un inconveniente descarge los archivos completos del formulario y validación de este los subí a un hostin gratuito pero me sale ( Hubo un error al enviar el mensaje 🙁 ) este error tendrá que ver con algo del servidor local (tengo el xampp) o por que el hostin gratuito no soporta correo?
se puede utilizar para indexhibit
Grande! Gracias.
Buenos días Josué, brillante este post como todo lo que publicas. Tengo una cuestión, ¿sería posible añadir un casilla para marcar, como la que hay abajo del botón enviar, donde el usuario pudiera marcar si desea recibir newsletter? un saludo!!
Hola Josue, muy bueno tu tutorial.
Pude agregarle más items de formulario a tu ejemplo.
Agregué un segundo campo para que ingrese nuevamente el e-mail ( y que se comparen el email 1 con el email 2 y si es correcto que envie el form.. me podrás dar una mano. Desde ya muchas gracias!)
Hola Josue, muy bueno tu tutorial.
Pude agregarle más items de formulario a tu ejemplo.
Agregué un segundo campo para que ingrese nuevamente el e-mail ( y que se comparen el email 1 con el email 2 y si es correcto que envie el form.. me podrás dar una mano. Desde ya muchas gracias!)
muchas gracias men realmente me ayudo
Hola, oye tengo una superduda, oye puedes ayudarme mira soy nuevo en esto y el punto es que cuando hago un post desde un html a un php en la pagina que llamo me muestra el cogio y no el argumento que estoy pasando de la pagina html a php, si podrias ayudarme te agradeceria mucho
No te entendi muy bien, explicate.
Hola, existe alguna forma de vincular el formulario que este solo en html, en este caso se llama contacto.html y vincularlo a un php que se llame contacto.
Me funciona el envio pero si cambio contacto.php a index.php, y al hacerlo me toma el index.php como principal en vez de index.html.
Espero me puedas guiar gracias.
Fijate este tutorial https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ajax-con-php-y-jquery
Y si en vez de mandarlo por correo electronico quiero que el boton me redireccione a otro form como seria??
Incluye uno de estos codigos en la parte final, lo mejor seria usar el metodo PHP o Javascript.
Hola, muy buenos aportes,gracias por compartirlo. mi duda es como o donde agrego el codigo para tambien guardarlo en una base de datos de mysql y ala vez tambien te envie el mail ?
En la parte donde envia(linea 31) tendrias que incluir un query SQL que inserte los datos recogidos a una tabla, algo como:
include('conexion.php'); // incluir tu conexion
$sql = "INSERT INTO `tabla` ( `nombre` , `email`, `mensaje` ) VALUES( '{$_POST['nombre']}' , '{$_POST['email']}' , '{$_POST['mensaje']}' ) ";
mysql_query($sql) or die(mysql_error());
Hola Josué.
Muchas gracias por compartir estos tutoriales con todos nosotros. Me han sido de mucha ayuda.
Pero resulta tengo un pequeño problemita.
He añadido este formulario a mi sitio web, y he probado enviando un correo.
Efectivamente, el correo llega, Con el nombre y el asunto. Pero el mensaje no aparece.
En el correo lo veo así:
De: Natalia@, UNEXPECTED_DATA_AFTER_ADDRESS@.SYNTAX-ERROR.
Para: administracion@ifem.cl
Asunto: Probando formulario de contacto
He copiado exactamente el código que aquí aparece. No sé que pueda estar fallando. Quizás no veo mi error.
Ojalá me puedas ayudar.
Hasta luego y muchas gracias.
Hola Josue, por favor quisiera saber por que al subir el formulario llegan los mensajes con la siguiente descripcion : «De: cidet@, UNEXPECTED_DATA_AFTER_ADDRESS@.SYNTAX-ERROR.» en vez de «cidet@cursos.com» y no muestran los mensajes.
Espero me puedas ayudar gracias de antemano.
Pues si lees el error te esta diciendo que haz puesto algo incorrecto despues de la direccion, revisa tu codigo.
Muchísimas gracias Josue pude resolver el problema.
¡Ay no! Olvídalo. Solucioné el error.
Omite mi mensaje anterior!
¡Muchas gracias por tutoriales :)!
Muy buen tutorial. Me sirvio del todo, ni una falla, y eso que no entiendo mucho
Muchas gracias
Hola, justamente ayer encontre tu blog y tambien acerca de este script, hice algunos cambios:
funciones.js
———————-
$(function() {
var emailreg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
$(«.boton»).click(function(){
$(«.error»).fadeOut().remove();
if ($(«.nombre»).val() == «») {
$(«.nombre»).focus().after(‘Ingrese su nombre’);
return false;
}
if ($(«.email»).val() == «» || !emailreg.test($(«.email»).val())) {
$(«.email»).focus().after(‘Ingrese un email correcto’);
return false;
}
if ($(«.asunto»).val() == «») {
$(«.asunto»).focus().after(‘Ingrese un asunto’);
return false;
}
if ($(«.mensaje»).val() == «») {
$(«.mensaje»).focus().after(‘Ingrese un mensaje’);
return false;
}
/**/
if ($(«.cpersonas»).val() == «») {
$(«.cpersonas»).focus().after(‘Ingrese un mensaje’);
return false;
}
/**/
if ($(«.nrovllegada»).val() == «») {
$(«.nrovllegada»).focus().after(‘Ingrese un mensaje’);
return false;
}
/**/
if ($(«.procedencia»).val() == «») {
$(«.procedencia»).focus().after(‘Ingrese un mensaje’);
return false;
}
/**/
if ($(«.hllegada»).val() == «») {
$(«.hllegada»).focus().after(‘Ingrese un mensaje’);
return false;
}
/**/
if ($(«.fllegada»).val() == «») {
$(«.fllegada»).focus().after(‘Ingrese un mensaje’);
return false;
}
/**/
if ($(«.fsalida»).val() == «») {
$(«.fsalida»).focus().after(‘Ingrese un mensaje’);
return false;
}
/**/
if ($(«.tel»).val() == «») {
$(«.tel»).focus().after(‘Ingrese un mensaje’);
return false;
}
/**/
if ($(«.mensaje»).val() == «») {
$(«.mensaje»).focus().after(‘Ingrese un mensaje’);
return false;
}
});
$(«.nombre, .asunto, .mensaje»).bind(‘blur keyup’, function(){
if ($(this).val() != «») {
$(‘.error’).fadeOut();
return false;
}
});
$(«.email»).bind(‘blur keyup’, function(){
if ($(«.email»).val() != «» && emailreg.test($(«.email»).val())) {
$(‘.error’).fadeOut();
return false;
}
});
});
Ahora la parte PHP:
————————————–
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$errors[3] = ‘Ingrese un asunto’;
}
else if($_POST[‘mensaje’] == »)
{$errors[4] = ‘Ingrese un mensaje’;}
/**/
else if($_POST[‘cpersonas’] == »){
$errors[5] = ‘Ingrese un cpersonas’;
}
/**/
else if($_POST[‘nrovllegada’] == »){
$errors[6] = ‘Ingrese un nrovllegada’;
}
/**/
else if($_POST[‘procedencia’] == »){
$errors[7] = ‘Ingrese un procedencia’;
}
/**/
else if($_POST[‘hllegada’] == »){
$errors[8] = ‘Ingrese un hllegada’;
}
/**/
else if($_POST[‘fllegada’] == »){
$errors[9] = ‘Ingrese un fllegada’;
}
/**/
else if($_POST[‘fsalida’] == »){
$errors[10] = ‘Ingrese un fsalida’;
}
/**/
else if($_POST[‘tel’] == »){
$errors[11] = ‘Ingrese un tel’;
}
/**/
else if($_POST[‘transporte’] == »){
$errors[12] = ‘Ingrese un transporte’;
}
/**/
else{
$dest = «nexuxirc@gmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘cpersonas’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘nrovllegada’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘procedencia’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘hllegada’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘fllegada’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘fsalida’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘tel’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘transporte’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = ‘zdsds’;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
$_POST[‘cpersonas’] = »;
$_POST[‘nrovllegada’] = »;
$_POST[‘procedencia’] = »;
$_POST[‘hllegada’] = »;
$_POST[‘fllegada’] = »;
$_POST[‘fsalida’] = »;
$_POST[‘tel’] = »;
$_POST[‘transporte’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
No se, cual podria ser el error que no me envie, por que tengo en un dominio que soporta mail(), con el correo gmail tambien, pero nada.
Me podrias dar una mano?
Esta excelente tu script, felicitaciones
Al parecer el error esta en la parte de JS, haz mirado la Consola? te sale algo?
Me encanto tu formulario y todo me funciona de maravilla, solo me gustaria saber como podria validar los valores de un combo box que el usuario tenga que elejir una opcion no se si podria ser asi lo de mostrarlo en el correo que me llegara una vez que envie el formulario creo no tener problema muchas gracias de antemano fue genial haber dado con tu pagina saludos.
<select class='elije' name='elije' value='’>
Elija una opcion
primera opcion
segunda opcion
tercera opcion
Checa este tutorial
https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
Sobre lo del junk, en que correo te pasa? normalmente me dicen que eso les pasa unicamente en hotmail, este tutorial lo he probado con gmail sin problema alguno, eso tambien depende de tu servidor y como esta configurado el SMTP.
Muchas gracias por responder tan rapido si asi es solo pasa con hotmail, tengo cuenta en gmail y ahi todo funciona de maravilla 🙂 gracias checare el tuto que me recomendaste hoy descubri tu pagina y tu forma de ser, de compartir tu conosimiento me parese genial la pienso explorar al maximo gracias por tomarte el tiempo de responderme.
Ah tambien me gustaria saber como haga para evitar que los mensajes me lleguen al junk por que no llegan al inbox
Josue, primero quiero felicitarte por las enseñanzas que nos das a los que tenemos problemas.
Te detallo mi problema.
Hice una pagina en HTML5 el codigo de Contacto es el siguiente:
Razon Social:
Ciudad:
E-mail:
Mensaje:
El problema creo que esta en contacto.php. Como podria crearlo para que al darle click en Enviar reciba el correo. Intente de varias formas pero no pude dar con eso. Muchas Gracias!
Hola Josue, crack.
Mi problema es:
relleno todo, y sin problema, pero a la hora de darle a enviar, me ocurre esto:
PHP Warning: mail() [function.mail]: "sendmail_from" not set in php.ini or custom "From:" header missing in (mi pagina) on line 129
eso es problema del servidor o de mi codigo? la pagina ya esta colgada en internet.
Gracias de antemano. =)
Es un problema del servidor, tienes que modificar el archivo php.ini y buscar la funcion sendmail_from que probablemente este comentada (;senfmail_form), si no tienes acceso al php.ini prueba borrar las lineas de header y envia el mail() de forma basica.
Excelente Tutorial , excelente codigo , solo le hice una modificacion al codigo , le agregue un capcha para evitar robots manden correos masivos
Hola que tal muy buen tutorial.
Me gustaría saber como valido la contraseña tanto del lado del cliente como del lado del servidor
Hola que tal muy buen tutorial.
Me gustaría saber como valido la contraseña tanto del lado del cliente como del lado del servidor, por favor y gracias
Mira este tutorial
https://tursos.com/tutoriales/php/como-hacer-un-sistema-de-registro-de-usuarios-en-php-con-mysql
Espero te sirva.
Hola Josue! el formulario funciona perfecto, me sirvieron mucho las respuestas de los comentarios anteriores, ya que tenia algunos problemas similares.
Mi consulta es con respecto al subject o asunto del email que llega a la casilla de correo. En mi caso cuando recibo el mail, en el asunto figura por default, el teléfono (es un campo nuevo que cree). Puedo cambiar el asunto por la leyenda «consulta web» ?
Desde ya Muchas Gracias!
Si, solo tienes que cambiar el valor de la variable $asunto:
$asunto = «Consulta Web»;
hola! me ha venido genial el tuto, muchísimas gracias!
cuando tenga tiempo le tengo q echar un ojo al Formulario de Contacto AJAX, con PHP y jQuery.
solo recordarte que en el archivo de descarga, hay una etiqueta que cierra mal al crear el mensaje de resultado de envío.
$result = ‘Email enviado correctamente 🙂‘;
debería acabar en
un saludo!
jurl… perdón! se ha comido los codes… 🙂
el caso es q cierra con un «» cuando debería ser un «»
Voy a revisarlo, gracias por notarlo.
Hola esta muy bueno el tutorial de hoja de contactos pero soy nueva en esta area y tengo la siguiente consulta cuando llamo al hoja de formulario de contacto dentro de un div no funciona, pero cuando solo pruebo el formulario de contacto fuera de un div funciona perfectamente alguna sugerencia por favor….
Tal vez ese div tenga algun estilo CSS que hace que el formulario no se muestre.
Hola Josue, estoy trabajando con tu formulario y adaptandolo al mio y de momento la cosa me está quedando genial. Unos retoques con el CSS y listo. Queria agradecer tu aportación y felicitarte por tu web. saludos
Hola Javier, me alegra que te haya servido, gracias por comentar.
Lo primero de todo buenas tardes, y muy buena página con todo detalle.
He estado haciendo este tutorial, el cual tuve que reiniciar en dos ocasiones por fallos tontos y ahora que ya he conseguido que me funcione me da un fallo, al mandar el formulario me da error, el error que sale abajo del formulario.
No se muy bien lo que te tengo que mandar para que puedas observar el fallo porque llevo poco tiempo en esto y no si puede estar en el .js o en el .php. he hecho la prueba de php info ( ) y no encuentro nada de mail() ( http://www.motoclublavirgendelcamino.info/info.php ), no se si no veo ya de las horas que tengo enfrente del pc o que. También he puesto y no me llega nada al mail ni entrada ni spam ni nada. He mandado un correo a atención al cliente de donde tengo el dominio alojado a ver si soporta mail() y estoy a la espera.
Bueno espero respuesta y aporto lo que me pidas, un saludo
He estado buscando mas detenidamente en el php info y he visto esto que no se si tiene relación
en PHP
sendmail_from | no value | no value
sendmail_path | /usr/local/bin/swrapper -t -i | /usr/local/bin/swrapper -t -i
en PHP Variables
_SERVER[«MAILPATH»] | /var/www/motoclublavirgendelcamino.info
en APACHE
MAILPATH | /var/www/motoclublavirgendelcamino.info
Un saludo
ya me respondio el proovedor y si admite mail php.
sigo sin poder hacer que me llegue el correo, ni gmail, ni dominio propio ni hotmail, y encima tengo el menu desplegable que construi en otro post tuyo pero para cambiar de menu a menu por ajax para que no me recargue las páginas y claro cuando le doy a enviar ni me da errores ni me dice que hubo un error ni que está bien, me envía directamente al index, me gustaría que por ejemplo si todo está correcto pasen 2 secs con el mensaje en verde y luego cambie el div donde tengo el form por el del index, le estoy dando vueltas pero mi conocimiento en php es limitado y no consigo encontrar ninguno de los 2 fallos que tengo.
un saludo
mira para que veas el fallo te redirecciono a la carpeta de pruebas de mi pagina web y ayi pinchas en contacto. http://www.motoclublavirgendelcamino.info/pruebas/
Ese es otro problema, cuando usas AJAX para la navegacion hay que tener mucho cuidado porque todo el codigo que afecta a las paginas internas comunmente se ve deshabilitado ya que el AJAX carga el HTML mas no el JS.
para lo del AJAX puedo desactivarlo para los contactos, que se abra en una ventana aparte y cuando el mensaje es enviado correctamente que se cierre esa ventana y listo eso no me preocupa. El problema mas grave por decirlo de alguna manera es que no me envía nada al correo, he probado lo que dices en otros comentarios mas arriba pero no hay manera no lo consigo. Tampoco se o bien que parte tengo que mandarte ni de que archivo para poder ver el error, he seguido el tuto y cuando acabe por si acaso tenia algo mal copie el tuyo y lo único que hice fue cambiarle algún nombre de css, js, y poco mas, lo he revisado por si acaso había algo mas pero no he visto nada.
Un saludo y gracias por la respuesta.
2 cosinas que se me olvidaban preguntar, como se escriben los codigos con html?
??
y pa contestar y que salga debajo de donde quiero contestar??
Un saludo de nuevo
perdon por esto ultimo ya me he autocontestado a las 2 ultimas preguntas, puedes borrar esto ultimo 😀
Un saludo.
Hola Josue, hize todo lo de tu tutorial pero tengo problemas, cuando subo la web a mi servidor y abro la pestaña «contactar» que es donde tengo el formulario me aparece esto:
No modifiqué nada de «funciones.js» ni «index.php» (bueno el mail si claro jeje)
PHP Notice: Undefined index: nombre in D:\XVRT\xxx.es\Html\Contactar.php on line 123
PHP Notice: Undefined variable: error1 in D:\XVRT\xxx.es\Html\Contactar.php on line 123
PHP Notice: Undefined index: email in D:\XVRT\lxxx.es\Html\Contactar.php on line 124
PHP Notice: Undefined variable: error2 in D:\XVRT\xxx.es\Html\Contactar.php on line 124
PHP Notice: Undefined index: asunto in D:\XVRT\xxx.es\Html\Contactar.php on line 125
PHP Notice: Undefined variable: error3 in D:\XVRT\xxx.es\Html\Contactar.php on line 125
PHP Notice: Undefined index: mensaje in D:\XVRT\xxx.es\Html\Contactar.php on line 126
PHP Notice: Undefined variable: error4 in D:\XVRT\xxx.es\Html\Contactar.php on line 126
PHP Notice: Undefined variable: result in D:\XVRT\xxx.es\Html\Contactar.php on line 128
Te agradecería que me recomendases alguna solución!! Un saludo.
ah, es algo de las arrays pon esto antes del codigo dentro de las etiquetas PHP, error_reporting(0);
Hola Josue, necesito preguntarte lo siguiente: tengo un formulario hecho en flash con un archivo PHP para envío de mail. El asunto es que en principio utilizando el EXPLORER me funciona pero me lo toma pero al probarlo desde el CHROME no me llega el mensaje…. que puede ser? Gracias y espero que puedas responderme.
Mmm, algo raro, la verdad que no manejo Flash, solo haz probado con esos 2 navegadores? intenta con firefox/safari/opera.
Hola Josue, ya solucioné eso introduciendo esto en el principio:
Todo funciona bien menos que no puedo enviar el mensaje me sale error al enviar!, relleno todos los campos, los valida correctamente y luego no lo envia diciendome que hay un error, he probado con mail de yahoo y de dominio propio, no se… el e-mail de destino solo se pone una vez verdad?? Espero respuesta, gracias por tu atención y muy pero que muy bueno el tutorial.
Haz una prueba simple de mail(), crea un archivo php y pon:
mail(‘tucorreo@gmail.com’, ‘Mi título’, «Test»);
Hola, Josue. Me ha encantado tu tutorial. Has conseguido que parezca sencillo. Me está ayudando mucho para un proyecto de la facultad.
He seguido todos los pasos y parecía que iba a funcionar, pero me da el mensaje de que «Hubo un error al enviar el mensaje».
Tengo instalado Wamp Server y por lo que he leído en el manual de php, trae el smtp instalado por defecto. He hecho la prueba que has dicho del archivo simple sólo con la línea de mail(‘tucorreo@gmail.com’, ‘Mi título’, “Test”); pero tampoco funciona. Me dice que ha fallado la conexión al mailserver, aunque parece que todos los parámetros son correctos.
Parece que el problema es con el servidor. Lo siento porque no tiene nada que ver con el tutorial, pero es que no tengo idea de cómo arreglarlo. ¿Tienes alguna idea de qué podría ser?
Si ni envio la prueba simple, quiere decir que tu servidor local no soporta mail(), es muy raro que lo hagan por defecto, te recomiendo que lo pruebes en un servidor real.
Que tal amigo duda, como algunos tengo problemas al implementarlo en IE (chrome y firefox perfecto funciona bien) cree un formulario pero al momento de querer validar de modo que ningun campo este vacio se brinca hasta tipo de servicio y los que tengo antes no me los valida te dejo el js donde valido espero me puedas ayudar:
$(document).ready(function() {
var emailreg = /^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/;
$(‘.boton2’).click(function(){
$(«.error»).fadeOut().remove();
if( $(«.matricula»).val() == «»){
$(«.matricula»).focus().after(«Campo obligatorio»);
return false;
}else if( $(«.correo»).val() == «»){
$(«.correo»).focus().after(«Campo obligatorio.»);
return false;
}else if(!emailreg.test($(«.correo»).val()) ){
$(«.correo»).focus().after(«Ingrese un email correcto»);
return false;
}else if( $(«.telefono»).val() == «»){
$(«.telefono»).focus().after(«Campo obligatorio»);
return false;
}else if( $(«.estado»).val() == «0»){
$(«.estado»).focus().after(«Seleccione una opción»);
return false;
}else if( $(«.prioridad»).val() == «0»){
$(«.prioridad»).focus().after(«Seleccione una opción»);
return false;
} else if( $(«.asignar»).val() == «0»){
$(«.asignar»).focus().after(«Seleccione una opción»);
return false;
} else if( $(«.servicio»).val() == «0»){
$(«.servicio»).focus().after(«Seleccione una opción»);
return false;
} else if( $(«.subservicio»).val() == «0»){
$(«.subservicio»).focus().after(«Seleccione una opción»);
return false;
}else if( $(«.detalle»).val() == «»){
$(«.detalle»).focus().after(«Campo obligatorio»);
return false;
}
});
$(«.matricula, .correo, .telefono, .estado, .prioridad, .asignar, .servicio, .detalle»).bind(‘blur keyup’, function(){
if ($(this).val() != «») {
$(‘.error’).fadeOut();
return false;
}
});
$(«.correo»).bind(‘blur keyup’, function(){
if ($(«.email»).val() != «» && emailreg.test($(«.email»).val())) {
$(‘.error’).fadeOut();
return false;
}
});
});
y el HTML? revisa que las clases concuerden en el HTML y en el JS
Hola Josue debes de estar aburrido de responder pero espero si puedas contestarme. Me gusto full el form que hicistes, valida excelente y segun el envia pero por lo que lei, pero a mi no.
me imagino que no tengo mail() como hago para activar eso? y lo otro es que el receptor del correo es cambiante, es decir no llega unicamente a un correo en particular sino que deberia de elegirse de una lista que apareciera en scroll en el campo. los correos para usar de receptor estan en una tabla de datos en mysql. como hago para que liste de la base de datos y use el correo que elegi? la tabla consta de el nombre del contacto y su correo, lo ideal seria que aparecieran ambos pero que a la hora de colocar el destinatario usara solo el correo, el nombre es para referencia.
este es mi codigo:
<?php
if(isset($_POST['boton'])){
if($_POST['emisor'] == '' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['emisor'])){
$errors[1] = 'Ingrese un email correcto’;
}else if($_POST[‘receptor’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘receptor’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$errors[3] = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = $_POST[‘receptor’];
$nombre = «ADMIN IUNP»;
$email = $_POST[‘emisor’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘emisor’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
De:<input type='text' class='emisor' name='emisor' value='’>
Para:<input type='text' class='receptor' name='receptor' value='’>
Asunto:<input type='text' class='asunto' name='asunto' value='’>
Mensaje:
disculpa molestarte y gracias :).
es para una materia que me lo pidieron en el instituto
ya resolvi el problema del envio, envia chevere. mi host en particular requiere enviar desde una direccion de correo que sea del dominio en si. una vez creado el dominio, el empezo a enviar. hepsya
hola es que estube haciendo un formulario de usuario pero cuando le doy click y no tiene nada en el formulario no me aparece nada aqui te dejo mi link:»http://empaquesyservicios.com.co/php/Registro.php» mira y veras que no aparece nada hay tienes mi correo por si nesecitas el codigo gracias men por los tuto
Cuando entro a ese link, me sale el formulario con todos los errores afuera, pon el codigo PHP aqui, en etiquetas: <code lang=»php»> y </code>
Bueno ya resolvi eso pero lo que no puedo hacer es que se limpio el js osea si le doy en registrar me muestra todos los errores y si lo actualizo me muestra lo mismo como puedo solucionarlo
gracias men por el tuto me sirvio mucho
Hola Josue,
Exelentes tus tutoriales, tengo una duda, mira realice el formulario tal y como lo haces en los tres pasos, por medio de php, jquery y css. El problema que tengo es que los href que tengo en mi documento php, no funcionan, no me hacen el enlace, estos estan fuera del codigo de php, pero estan en el archivo.php donde tengo el formulario. Quisiera que me ayudaras a entender un poco mas, porque no ecuentro porque no puedo abrir unos enlaces que tengo en unas listas, y cada ves que doy click, no hace nada, solo se activa el mensaje de que tengo que llenar mi con mi nombre. Espero me haya explicado. Saludos
Pasame el link donde lo estas probando, esta raro eso.
Muchas gracias, funcionó muy bien!
http://www.utparral.edu.mx/Contacto/Contacto.php
ese es el formulario que pase del tutorial, pero el problema es cuando trato de irme a los enlaces de los botones que tengo en la pagina, los unicos enlaces que funcionan son los que me envian a paginas externas o el que esta en la cabecera y pie de pagina que me envia a la pag ppal.
El error esta en que tu menu tiene clase .boton, que es la misma clase que tiene el boton que envia el formulario, haz lo siguiente:
En este archivo http://www.utparral.edu.mx/Contacto/funciones.js cambia en la linea 5:
$("button.boton").click(function (){
Le he agregado un selector mas especifico que es el de elemento, osea solo va a seleccionar a los elementos (button) que tengan clase de .boton, de esta manera no se interfiere con tu menu.
men tengp un problema ingreso un registro de prueba lleno los campos pero no se insertan es las bases de datos podrias ayudarme con esto mira el codigo y me dices
<?php
include("Conexion.php");
if(isset($_POST['boton'])){
if($_POST['Nombre'] == '')
{
$errors[1] = 'Ingrese su nombre’;
}
else if($_POST[‘Apellido’] == »)
{
$errors[2] = ‘Ingrese su Apellido’;
}
else if($_POST[‘Email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘Email’]))
{
$errors[3] = ‘Ingrese su Email Correcto’;
}
else if($_POST[‘Cedula’] == »)
{
$errors[4] = ‘Ingrese su Cedula’;
}
else if($_POST[‘Contraseña’] == »)
{
$errors[5] = ‘Ingrese su Contraseña’;
}
else if($_POST[‘RepContra’] == »)
{
$errors[6] = ‘Ingrese Contraseña’;
}
else if ($_POST[‘RepContra’] != $_POST[‘Contraseña’])
{
$errors[7] = ‘Contraseñas No Coinciden’;
}
else//Esto Es el else 1
{
$sql = ‘SELECT * FROM registros_empleados’;
$rec = mysql_query($sql);
$verificar_usuario = 0;
$verificar_email = 0;
while($result = mysql_fetch_object($rec))
{//Esto Es el while1
if($result->usuario == $_POST[‘Nombre’])
{
$verificar_usuario = 1;
}
}//Fin De While1
if($verificar_usuario == 0)//Esto Es el Comienzo De if2
{
if (isset ($_POST[‘Nombre’]) && ($_POST[‘Nombre’]) !=»» //Esto Es el Comienzo De if3
&& isset ($_POST[‘Apellido’]) && ($_POST[‘Apellido’]) !=»»
&&isset ($_POST[‘Email’]) && ($_POST[‘Email’]) !=»»
&& isset ($_POST[‘Cedula’])&& ($_POST[‘Cedula’]) !=»»
&&isset ($_POST[‘Contraseña’]) && ($_POST[‘Contraseña’]) !=»»
&& isset($_POST[‘RepContra’]) && ($_POST[‘RepContra’]) !=»»)
{
$conexion = mysql_connect($host, $Usuario, $Contraseña)or die(«Problema Con El Servidor»);
mysql_select_db($Bd, $conexion)or die(«Problemas Con La Base De Datos»);
$sql = «INSERT INTO registros_empleados (Nombre, Apellido,
Email, Cedula, Contrasena, RepContra)
VALUES (‘$_POST[Nombre]’, ‘$_POST[Apellido]’,
‘$_POST[Email]’, ‘$_POST[Cedula]’, ‘$_POST[Contraseña]’ ,’$_POST[RepContra]’)»;
mysql_query($sql);
$_POST[‘Nombre’] = »;
$_POST[‘Apellido’] = »;
$_POST[‘Email’] = »;
$_POST[‘Cedula’] = »;
$_POST[‘Contraseña’] = »;
$_POST[‘RepContra’] = »;
$result = ‘Usted Se Ha Registrado Correctamente’;
}//Esto Es el Fin De if3
else //Esto Es el Comienzo De else2
{
$result = ‘Rellene Todos Los Campos ‘;
}//Esto Es el Final De else2
}//Esto Es el Final De if2
else//Esto Es el Comienzo De else3
{
$result = ‘Este Usuario Ya Esta Registrado ‘;
}//Esto Es el Final De else3
}//Esto Es el else 1
}
?>
Nombre:(Usuario)<input type='text' class='nombre' name='Nombre' value='’ />
Apellido:
<input type='text' class='apellido' name='Apellido' value='’ />
Correo:
<input type="text" class="email" name="Email" height="25px" value='’ />
Cedula:
<input type="text" class="cedula" name="Cedula" height="25px" value='’ />
Contraseña:
<input type="password" class="contrasena" name="Contraseña" height="25px" value='’ />
Repita Contraseña:
<input type="password" class="repcontra" name="RepContra" height="25px" value='’ />
En este tutorial no se toca el tema de insercion de datos a la DB, sin embargo te podria aconsejar que antes de hacer eso pruebes tu consulta SQL ($sql) en phpMyAdmin o algo parecido para que encuentres los errores y los puedas arreglar.
Hola excelecte tuto!
Pero tengo un problema. cuando lo pruebo en mi hosting, funciona todo lo de validacion pero a la hora de mandar el mensaje no manda nada…
y tampoco lo puedo correr desde mi servidor local usando un servidor SMTP..
Me podrias explicar minimo como funciona o que debo hacer para probarlo en mi hosting???
Gracias
Haz una prueba simple de mail(), sube un .php y ponle:
mail('tuemail@gmail.com', 'Asunto', 'Mensaje Prueba');
Si no envia con eso es porque tu servidor no soporta mail() o no lo tiene activado.
Uso Direct Admin..
Sabes como activarle la opcion mail, o que debo hacer?
me dicen que si soporta la funcion pero no se como activarla o algo asi….
PD:Perdon por el doble comentario…
Hiciste la prueba y no funciono?
Si te dicen que si soporta la funcion, no necesita ser activada deberia venir asi ya por defecto.
si ya hice la prueba, pero no me manda el correo.
El ejemplo que pruebo es este https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ajax-con-php-y-jquery. pues el css y validaciones si salen pero no manda el correo esta algo raro… as usado Direct Admin??
Gracias por tu tiempo..
Desconozco Direct Admin, pero despues de todo eso es solo la interfaz de tu servidor, el problema esta en el servidor. Lo mejor que puedes hacer es contactar con tu soporte y explicarles tu problema.
Hola excelente tuto!
Pero tengo un problema. Cuando lo pruebo en mi hosting, funciona todo lo de validación pero a la hora de mandar el mensaje no manda nada…
y tampoco lo puedo correr desde mi servidor local usando un servidor SMTP..
Me podrías explicar mínimo como funciona o que debo hacer para probarlo en mi hosting???
Gracias
Hola; de verdad que es estupendo tu tutorial, pero podrías agregarle a este para hacerlo más perfecto que los datos enviados se guarden en una base de datos, para de esta forma poder usarlos para un posible boletin o algo parecido, quizás poniendo la opción de un check box para preguntarle al usuario si desea agregarse a la lista, son solo ideas que pudiesen mejorarlo mucho, yo se hacer inserciones a base de datos, updates, etc, pero no se en que fallo que no he podido agregarle esta opción, por favor responderme como lo puedo hacer o si hay la posibilidad de que puedas actualizar este con esas funciones para nosotros tus seguidores, Gracias por todo amigo
Hola Oscar, es una buena idea, voy a trabajar en ello, es bastante sencillo hacerlo.
Gracias Josue, de verdad esperare esta actualización con ansias, jajaja, tengo el BB que cuando veo el nombre de Webtursos lo abro al instante para ver como va todo, pués si esta es muy buena idea, ya que da más opciones y usos futuros, mi idea es agregar un formulario como este de contacto a una página facebook, pero ir recolectando los email y nombre en una base de datos para agregarlos al Boletín, igualmente trabajo en una ONG y pienso que podría usar algo parecido para las personas que quieren ser voluntarios, los cuales llenarían una ficha (agregaría muchos más datos) y luego cuando los necesitemos ponernos en contacto con los mismos, cuando tenga algo parecido haría un sistema para la administración del voluntariado en la base de datos, desde ya muchas gracias
Hola soy nuevo en esto y sigo paso a paso tu tutorial, ahora bien cuando me dices que cambie la extención del archivo, tengo que crear otra página con nombre index.php y la que tengo index.html ( o solo cambiarle el nombre?? ).
Hasta ahora todo me iba bien pero se me trabo la carreta puedes indicarme si es así, Gracias de antemano y muy buen tutorial…
Tienes que cambiar la extension.
Xq cuando el campo del correo electronico esta escrito mal el focus que haces no sombrea todo el campo como
haces esa parte para que empieze en la ultima palabra
No te entendi, si quieres cambiar eso lo haces simplemente por CSS
hola disculpa.. estoy creando un sistema, un archivo php cuando accedo a la pagina inicio me salen varios notice como hagopara q no me salgan
hola disculpa.. estoy creando un sistema, un archivo php cuando accedo a la pagina inicio me salen varios notice como hago para q no me salgan
Pon error_reporting(0);
hola muy bueno el tutorial me ayudo de mucho gracias ademas me gustaria saber como hacer en vez de label porner los datos en el caja de texto algo asi con f formulario de escribe un comentario de antemano muchas gracias josue
Utiliza el atributo de HTML5 «placeholder’:
ok muchas gracias
Josue tenes idea porque me llegan así los mensajes? (mas arriba postie)
Mmm me dices que te llega el correo pero te llega el mensaje en un archivo que lo descargas? sobre los br, debe ser por las etiquetas que se pone en el mensaje para hacer saltos de linea, supongo que ha de ser algo de tu hosting a menos que hayas modificado el codigo.
exactamente en gmail me llegan los mensajes en un archivo y en wl webmail que proporciona el hosting solo llega «>>» como mensaje. Lo de los br es lo que menos me importa. Quisiera saber que es esa dirección que me aparece en el asunto (@web.godns.net)
Esa es la direccion de tu servidor, creo que eso tiene que ver con como esta configurado el SMTP
http://www.who.is/nameserver/ns1.godns.net/
haha entiendo, deberé comunicarme con ellos entonces. Y lo del mensaje alguna idea?
Pues si me dices que hasta en el webmail no envia nada es un problema grave del servidor, preguntales de eso tambien. Por cierto, que servidor haz contratado?
contrate elserver.com
Josue Ochoa, muy bueno el tutorial, una consulta, y como haria o si pudieras hacer un tutorial donde ademas de texto plano como el tutorial se pueda mandar tambien una imagen incrustrada, osea que pueda mandar por ejemplo el logo de una empresa en jpg y salga en el mail sumado al texto del formulario enviado, te agradeceria que me ayudes con eso, desde ay te doy las gracias
Para enviar adjuntos se tendria que usar una libreria externa de PHP, porque con mail() seria muy complicado, checa este tutorial, tal vez te sirva.
el server.com
Buenas antes que nada gracias por dedicar el tiempo a hacer ‘tutoriales’ y compartir la sabiduría y los estudios de uno mismo con el resto de cibernautas.
Seguí el pasado tutorial anterior a este sobre la primera parte del formulario que es la HTML (+Css) y ahora estoy medio enganchado en esta 2nda parte de PHP.
Una cosa que no entiendo de la primera parte HTML del formulario es que no hay (action=»contacto.php») Porque?
Luego me he bajado tu contenido de este tutorial PHP pero no me funciona (he editado los datos editables: como el mensaje de correcto o el de error).
Pero nada funciona, cuando entro los datos en el HTML y los envío al PHP se me pone la pantalla toda llena de funciones. Es por que devo descargarme el Xampp o algun otro gestor? Gracias
Hola Josep, te explico:
Lo del action es porque en la primera parte de HTML y CSS, se trato unicamente los aspectos esteticos del formulario, no se toco la funcionalidad
Ahora, para que el formulario te funcione tiene que estar en un servidor que soporte PHP y que sea capaz de enviar correos electronicos, cosa que XAMPP no puede hacer de forma nativa, lo mas recomendable es contratar un servidor de pago o buscarse uno gratuito para hacer pruebas.
Y otra cosa recuerda que son 3 partes, en una se toca al tema de la validacion usando JS.
Buenos días antes que nada muchas gracias por este gran tutorial en serio me ha servido muchisimo, aquí va mi pregunta veras necesito mandar el mensaje a un correo oculto e intentado algunas maneras como: $headers .= «Cc: tucorreo@gmail.com\r\n»; o $headers .= «BCC: Rosa Maria \r\n»;
,pero simplemente no llega el correo, muchas gracias de antemano por tu respuesta.
Saludos 🙂
Hola Nataliem mira por lo que he leido donde pones el BBC deberias poner una direccion de correo, no un nombre.
gracias por tu respuestas en realidad si le pongo el correo luego del nombre entre ($headers .= “BCC: Rosa Maria \r\n”;) parece que se copio mal 😛 bueno intente otras maneras lo unico que consegui es mandar una copia a otro correo pero no como copia oculta pongo el ejemplo por si alguien lo necesita (yo pongo el correo en una variable aparte pero tbm se puede poner directamente)
$copia = ‘123456@gmail.com’;
$header .=»CC: «. «Natalie Pamela» .» \r\n»;
psdta: si por alguien sabe la solución la ingresa xfa.
saludos 🙂
gracias por tu respuesta en realidad si le pongo el correo luego del nombre
\r\n";
$headers .= "BCC: Rosa Maria
parece que no copie bien el codgio bueno intente otras maneras lo unico que consegui es mandar una copia a otro correo pero no como copia oculta pongo el ejemplo por si alguien lo necesita (yo pongo el correo en una variable aparte pero tbm se puede poner directamente)
$copia = ’123456@gmail.com’;
$header .="CC: ". "Natalie Pamela" ." <". $copia .">\r\n";
psdta: si por alguien sabe la solución la ingresa xfa.
saludos 🙂
Intenta usar PHPMailer, creo que maneja mejor ese asunto de los correos ocultos, en este tutorial se explica claramente.
ok muchas gracias lo voy a revisar 🙂
saludos
Me sale esto al copiar todo el codigo que has puesto al final del post http://imageshack.us/photo/my-images/808/capturacu.png/ .No se porque me sale eso.He probado a ponerle un isset() dentro de las variables globales $_POST pero aun asi luego, al enviarlo, el script no funciona bien.Espero que me ayuden.
Gracias <3
Pon error_reporting(0) antes.
Muchas gracias, me imagine que era por ese lado, saludos!
Ave Joshua, un saludo fraternal y nuevamente felicitarte por tan magnifico tutorial, de ante mano darte las gracias no solo por mi sino por todos los que con tú conocimiento aprendemos más, gracias por tú infinita paciencia.
Ya supere el problema anterior de cambiar la extensión de ahí que todo salio bien, bien digo yo?? pues cuando ingreso datos y doy click en en envía mensaje lastimosamente me tira el error al enviar el mensaje, quisiera mandarte el trozo donde creo tener el error solo te pregunto para digitar el código tengo que pasarlo a HTML en esta caja de comentario??
Gracias mil y prosperidad en todos tus proyectos……
probare copiando y pegando!!
$dest = «corneliosila@gmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$telefono = $_POST[‘telefono’];
$direccion = $_POST[‘direccion’];
$pais = $_POST[‘pais’];
$ciudad = $_POST[‘ciudad’];
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo para que no llegue a spam
$cuerpo .= $_POST[‘asunto’].»»;
$cuerpo .= $_POST[‘telefono’].»»;
$cuerpo .= $_POST[‘direccion’].»»;
$cuerpo .= $_POST[‘pais’].»»;
$cuerpo .= $_POST[‘ciudad’].»»;
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$telefono,$direccion,$pais,$ciudad,$cuerpo,$headers)){ // esta es una comparacion para ver si envio el mail o no
$result = ‘Email enviado correctamente’;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘telefono’] = »;
$_POST[‘direccion’] = »;
$_POST[‘pais’] = »;
$_POST[‘ciudad’] = »;
$_POST[‘mensaje’] = »
Hasta ahí el pequeño trozo, es en la comparación para ver si envio el mail donde esta el error y otra pregunta donde coloco ($var = php.”html”;) para que al recibir (hipoteticamente hablando) en orden los datos en mi mail…
de nuevo gracias mil y ave Joshua maximus….
Ave de nuevo Joshua, he probado cambiando la comparación pues como explicas en tú tutorial introducción a la función mail , es innecesario colocarlos todos de nuevo pues los abarca su respectiva variable verdad!! Bueno de tal forma que lo dejo así:
if(mail($dest,$asunto,$cuerpo,$headers))
Pero tampoco me manda lo escrito en el formulario a mi email, otra cosa no se borra los datos ingresados en cada caja de texto ( es así??? ) cree un boton de borrar el formulario antes me funcionaba y hoy ya no, también es normal, pero lo esencial es que no puedo mandar el formulario a mi correo.
Otra ves saludos y de nuevo exitos en tus proyectos….
Lo estas trabajando en un servidor local o en uno real? haz probado hacer una prueba simple? en un archivo test.php pon:
mail(‘tucorreo@gmail.com’, ‘Mi título’, “Test”);
Josue como estas? … soy quien te consulto con fecha «29 junio, 2012», yo no deseo que el cliente adjunte el documento, sino que ellogo este adjunto ya y que cada vez que alguien mande los datos del formulario el logo sea enviadoy que aparesca en el mail siempre como cuando se envia newsletters o algo asi
Puedes hacerlo con PHPMailer de igual manera:
require("class.phpmailer.php");
$mail = new PHPMailer();
$mail->Host = "localhost";
$mail->From = "remite@email.com";
$mail->FromName = "Nombre del Remitente";
$mail->Subject = "Asunto";
$mail->AddAddress("destino@email.com","Nombre");
$mail->Body = $body;
$mail->AddAttachment("images/logo.jpg", "logo.jpg");
$mail->Send();
La diferencia esta en que no recibes el archivo adj del usuario sino que tu mismo lo especificas.
Hola, en primer lugar mi felicitacion por tu explicación, tengo una consulta, en mi página puse todo el código y recibe perfectamente los correos, lo hace todo bien, excepto que en cuanto le pincho a «Enviar» se mueve toda la pagina, que puede ser? gracias¡¡¡
Ya vi, es un error mio en el zip, cuando te bajaste el codigo fuente, en la linea 32 del index.php donde se muestra el mensaje de exito o de error, abro un div class=»result…» pero cierro con un a, entonces queda un div sin cerrar, ese es el problema.
Esta exelente, haces mejoras de pagina?
Yo soy de Chile.
Saludos David
Contactame por aqui.
Ya está arreglado, Muchas gracias Josue ¡¡¡¡¡¡
Ave Joshua, nuevamente saludándote y deseando que en todos tus proyectos obtengas los éxitos que te mereces de ante mano gracias ok.
te pregunto ahora, tienes algún código programado o un tutorial para configurar el test.php, te cuento que es un servidor local el que utilizo ( si por tal nos referimos al CPU ) trabajando con WanpServer y con editor de texto Geany, en tal caso he creado un dominio con uno de los hosting que recomiendas ( 000webhost ) aunque tengo problemas para colocar los dos servidores que dan pues no encuentro los «name» del servidor DNS. donde colocarlos??, de tal forma que me he decidido por pagar ( pregunto me lo recomiendas?? este webhost?? ) todo para probar si he seguido bien tus tutoriales, dudo de mi trabajo no el tuyo ok…
Y así comprobar lo aprendido verdad, bueno sin mas de nuevo agradecerte tu amabilidad con todos y por compartir tus conocimientos ( totus tus ).
Ave Johua……
Hola Cornelio, lo que pasa es que mail() no funcionara en servidores locales (wampserver), lo otro no puedes conectar tu servidor local al de 000webhost, hasta donde tengo entendido 000webhost te da un dominio x como nombre.00webhost, por ultimo si quieres un host de pago te recomendaria bluehost o hostgator.
Hola a todos.
Yo creo que la función mail() si funciona en servidores locales; de todas formas si vas a tener un servidor de Internet (http, smtp, etc) debes usar autentificación segura tipo ssl o similar, pero creo que mail() no soporta eso y necesitaras usar (yo la uso) la clase phpmail o similares.
También te la puedes programar tu si tienes conocimientos y paciencia :).
En el contacto de mi web lo puedes ver, aunque la web deja mucho que desear, a ver si me pongo a ello.
Un saludo a todos
Josua como estas? … me esplicas la parte de: «require(«class.phpmailer.php»);» y «$mail = new PHPMailer();» , no te seria mucha molestia poder postera un tutorial que trate profundice bien este tema, te lo agradesco desde ya, me ayuda mucho tus tutoriales, como puedo hacer para contactar contigo y poder consultarte algunas cosas
Perdón que no leí el post completo :). Josue Ochoa te responde con esa clase que es phpmailer…
Wow excelente tutorial, el mas completo que he encontrado sobre esto, me encantó felicidades.
Hola, adapte lo visto en este tutorial pero al subir esto a un servidor (justhost) se envían los mensajes pero no aparecen el nombre ni correo de la persona que lo ha enviado (solo aparece el mensaje). Escribí al soporte de mi hosting y me dicen que vea lo siguiente:
https://my.justhost.com/cgi/help/206
Esto quiere decir que este formulario no podrá ser utilizado o que debería cambiar para que aparezcan el nombre del usuario y su correo?
Muchísimas gracias.
Saludos,
buenos dias , mi pregunta es como puedo hacer un sistema de login unico (solo un usuario y un password)
y cuando le den enviar se redireccione a una pagina especifica porfavor ayuda si se puede explicado seria de mucha ayuda
logicamente en el codigo yo ponga mi usuario y mi contraseña en el php ?
Puedes hacerlo con PHP:
amigo muy bueno el tutorial pero me sale este error:
puedes ayudarme.
Warning: mail() [function.mail]: Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set() in C:\Archivos de programa\xampp\htdocs\xampp\estilo\index.php on line 31
«Ten en cuenta que si intentas enviar el formulario no te va a funcionar si estas probandolo en tu servidor local a menos que tengas instalado un SMTP en tu sistema, lo ideal seria subirlo a un hosting (lista de 7 hostings gratuitos) y probarlo desde allí.»
No se puede usar en un servidor local como XAMPP, mail() no funcionara.
Cordial saludo, he implementado su codigo web en un proyecto personal que tengo pero tanto en el servidor local, como directamente en el hosting : siempre sale el msj: «Hubo un error al enviar el mensaje» es decir entra al else en el código.
no entiendo debido a que puede ser este error, dado que pense q era por estar en el servidor local, pero al subirlo al hosting continuo.
el hosting lo tengo contratado con dominioamigo. http://www.dominioamigo.com.co/
espero pueda colaborarme y de antemano muchas gracias.
Hola pablo quisiera saber si solucionaste ese error ami me pasa lo mismo, tanto en el local como el hosting no me quiere servir sale el mensaje de que no se envio el mail. 🙁 te lo agradeceria mucho si puedes ayudarme
Hola ! Mi pregunta es: tengo un autoresponder cuando se completa el formulario. ¿Como hago para que esa autorespuesta atache un archivo (word, PDF o jpg ) y le llegue automaticamente a quien completo el form ?
Muchas gracias.
gracias Josue tenias razón
Hola Josue mi pregunta es como validaria un sistema de registro q me compruebe un unico usuario y eso del password y un repassword y q soluciones me darias para cuidarme de los diferentes metodos de inyeccion
Osea quieres que se registre siempre con el mismo usuario?
Ps tendria q verificar q para registrarlo no tiene q repetirse el usuario dentro de la base de datos y acerca de la validacion del password algo asi como codeigniter q permite asignar un password y volver a escribir el password y comprobar si los dos passwords ingresados coinciden y q soluciones propones para la no inyeccion
Ah, para eso tendrias que hacer algo mas complicado con SQL, tal vez esto te sirva.
Que tal Josue! Muy bueno el tutorial, absolutamente claro!! Muchas gracias por compartirlo y por aclarar las dudas que surgen al utilizarlo.
Te quería hacer una pregunta, ya que quiero usar este formulario en un sitio que estoy haciendo con HTML, CSS3 y JS: el archivo PHP, se puede linkear al archivo HTML, que estoy usando como página de contacto, como se linkean los .css y los .js? O puede surgir algún problema?
Desde ya muchas gracias
Si se puede, tendrias que cambiar el action=»» a action=»proceso.php» y en proceso manejar el PHP, el incoveniente es que no podras hacer la validacion de PHP (puesto que esta en otra pagina) y te tendrias que quedar solo con la de Javascript.
tengo un problema,
mi servidor no permite enviar correos sin que la cuenta origen sea una cuenta valida,
como puedo indicar cual es la cuenta de correo electronico desde donde se originara el email
enviado con el formulario???
Saludos
No te entendi muy bien, quieres definir el correo que envia? que es una ‘cuenta valida’?
headers = 'From: webmaster@example.com' . "\r\n" .
'Reply-To: webmaster@example.com' . "\r\n" ;
¡LO SIENTO EL CODIGO ANTERIOR QUE PUBLIQUE NO ESTA COMPLETO (ESTE ES EL BUENO)!
Hola, muy buen totorial pero mi problema es el sigueinte:
Estoy haciendo un proyecto en mi escuela y tengo que extraer los datos de un usurio desde una base de datos de MYSQL (eso ya lo tengo) pero quiero editar esos datos y si borro algun dato extraido y dejo vacio el campo comprobar y avisar cual es el error al momento de actualizar los datos y si no hay error pues que permita enviar los datos a la base de datos de MYSQL (phpmyadmin)
NOTA: No estoy enviando los datos por correo asi que no utilizo cuentas de correo electronico.
Mi codigo en el siguiente:
***************************************************************************************************************************************
<?php
if(isset($_POST['cmd'])){
$errors = array(); // declaramos un array para almacenar los errores
if($_POST['matricula'] == ''){
$errors[1] = 'Ingrese la matricula correcta’;
}else if($_POST[‘tipo_usuario’] == »){
$errors[2] = ‘Ingrese el tipo de usuario’;
}else if($_POST[‘nombre’] == »){
$errors[3] = ‘Ingrese el nombre del usuario’;
}else if($_POST[‘apellido_p’] == »){
$errors[4] = ‘Ingrese el apellido paterno del usuario’;
}else if($_POST[‘apellido_m’] == »){
$errors[5] = ‘Ingrese el apellido materno del usuaeio’;
}else if($_POST[‘contrasena’] == »){
$errors[6] = ‘Ingrese una contraseña correcta’;
}else if($_POST[‘activo’] == »){
$errors[7] = ‘Ingrese el estado del usurio’;
}else{
//si todo esta ok envia email
}
}
?>
matricula:
<input type="Text" name="matricula" value ="»>
Tipo de usuario:
<option value="1" selected=»selected»>Administrador
<option value="2" selected=»selected»>PTC
Nombre:
<input type="Text" name="nombre" value ="»>
Primer apellido
<input type="Text" name="apellido_p" value ="»>
Segundo apellido
<input type="Text" name="apellido_m" value ="»>
Contraseña:
<input type="hidden" name="oldcontrasena" value ="»>
Estado:
<option value="0" selected=»selected»>0-Desactivado
<option value="1" selected=»selected»>1-Activado
aqui va un input oculto para conservar el id del usuario que queremos actualizar
<input type="hidden" name="tid" value="» />
**************************************************************************************************************************************
GRACIAS SI VOS PODEIS AYUDARME LO MAS PRONTO POSIBLE YA QUE TENGO POCO TIEMPO PARA ENTREGARLO =D
Hola Xavier, te cuento que este es un tutorial de un formulario de contacto que envia correos y tu me estas pidiendo ayuda de algo muy diferente, sin embargo te puedo dar un link que tal vez te pueda ayudar:
http://www.phpscaffold.com/
Solo pones tu SQL y te va a crear los archivos necesarios para hacer un CRUD, y por favor no escribas en mayusculas 🙂
Buenas, soy nuevo en esto y estoy un poco pez, estoy intentando crear una web y en este apartado estoy un poco atascado, no se me envían los correos al mail que pogo, y no se por donde salir. Tampoco me aparece el mensaje de envío correcto. Me puedes ayudar.
Te pongo en enlace y el codigo.
http://www.autoarpa.com/contacto.html
<?php
if(isset($_post['boton'])){
if($_post['nombre'] == ''){
$error1 = 'Ingrese su nombre’;
}else if($_post[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_post[‘email’])){
$error2 = ‘Ingrese un email correcto’;
}else if($_post[‘asunto’] == »){
$error3 = ‘Ingrese un asunto’;
}else if($_post[‘mensaje’] == »){
$error4 = ‘Ingrese un mensaje’;
}else{
$dest = «taller@autoarpa.com»; //Email de destino
$nombre = $_post[‘nombre’];
$email = $_post[‘email’];
$asunto = $_post[‘asunto’]; //Asunto
$cuerpo = $_post[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente :)’;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_post[‘nombre’] = »;
$_post[‘email’] = »;
$_post[‘asunto’] = »;
$_post[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje :(‘;
}
}
}
?>
Tu Nombre:
Tu Email:
Asunto:
Mensaje:
FUNCIONES.JS
$(function() {
var emailreg = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/;
$(«.boton»).click(function(){
$(«.error»).fadeOut().remove();
if ($(«.nombre»).val() == «») {
$(«.nombre»).focus().after(‘Ingrese su nombre’);
return false;
}
if ($(«.email»).val() == «» || !emailreg.test($(«.email»).val())) {
$(«.email»).focus().after(‘Ingrese un email correcto’);
return false;
}
if ($(«.asunto»).val() == «») {
$(«.asunto»).focus().after(‘Ingrese un asunto’);
return false;
}
if ($(«.mensaje»).val() == «») {
$(«.mensaje»).focus().after(‘Ingrese un mensaje’);
return false;
}
});
$(«.nombre, .asunto, .mensaje»).bind(‘blur keyup’, function(){
if ($(this).val() != «») {
$(‘.error’).fadeOut();
return false;
}
});
$(«.email»).bind(‘blur keyup’, function(){
if ($(«.email»).val() != «» && emailreg.test($(«.email»).val())) {
$(‘.error’).fadeOut();
return false;
}
});
});
Tienes que cambiar la extension de tu archivo, esta en HTML, esto es PHP, tendrias que ponerlo http://www.autoarpa.com/contacto.php
lo se pero cuando lo renombro, me sale un error al cargar la pagina y no tengo ni idea que hacer:
FastCGI Error
The FastCGI Handler was unable to process the request.
——————————————————————————–
Error Details:
•Unable to place a FastCGI process in a JobObject. Try disable the Application Pool CPU Limit feature
•Error Number: 5 (0x80070005).
•Error Description: Access is denied.
HTTP Error 500 – Server Error.
Internet Information Services (IIS)
Si sabes de que va te lo agradeceria mucho, toy volviendome loco.
Gracias
muchas gracias por este gran tuto, pero me gustaría saber como agrego una lista, ya que mi formulario agregara referencias de productos?
Buenass,
Muchas gracias por el tutorial, és muy bueno, aún así y siendo nueva en esto creo que me estoy equivocando en algun lugar del codigo pero no puedo encontrar el error..
No sé si tiene que ir algo delante o detras de <?php pero me sale todo el codigo en la web, y eso creo que es que me estoy olbidando de algo.. podria dejarte el codigo aqui a ver si me lo pudieras solucionar.
Muchas gracias.
Contacte
<?php
if(isset($_POST['enviar'])){
$errors = array();
if($_POST['nom'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘assumpte’] == »){
$errors[3] = ‘Ingrese un asunto’;
}else if($_POST[‘missatge’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = «judit_kate@hotmail.com»; //Email de destino
$nom = $_POST[‘nom’];
$email = $_POST[‘email’];
$assumpte = $_POST[‘assumpte’]; //Asunto
$missatge = $_POST[‘missatge’]; //Cuerpo del mensaje
//Cabeceras del correo para que no llegue a spam
$headers = «From: $nom $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$assumpte,$missatge,$headers)){ // esta es una comparacion para ver si envio el mail o no
$result = ‘Email enviat correctament’;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nom’] = »;
$_POST[‘email’] = »;
$_POST[‘assumpte’] = »;
$_POST[‘missatge’] = »;
}else{
$result = ‘Hi ha hagut un error al enviar el missatge’;
}
}
}
?>
Nom:<input name='nom' type='text' class='nom' value='’>
Email:<input name='email' type='text' class='email' value='’>
Assumpte:<input name='assumpte' type='text' class='assumpte' value='’>
Missatge:
Muchisimas gracias!!
Si me dices que te sale TODO el codigo en la pagina web es porque no esta funcionando PHP, esto puede deberse a que tu servidor no soporta PHP o que estas trabajando en un archivo que no es .php, espero haberte ayudado 🙂
Ave Joshua, que todo sea un exito para ti y los que te rodean, para los otros amigos que estan comenzando con este formulario, !ANIMO¡¡ pues es muy bueno y en verdad funciona, para ti Joshua felicidades de new por tu tutorial y por tu infinita paciencia, pues encontre como hacerlo funcionar más adelante copiare el trozo completo para ver si a alguien le sirve…
Ahora bien como dije ya me funciona a las mil pero estoy realizando una pagina web y lo he introducido cuidando los enlaces y todo ( carpeta css y js ) pero cambia todo el fondo y la forma de la página original ¿ Que estoy haciendo mal?? bueno no se si puedas ayudarme, pero de antemano gracias mil por mi y por todos, de nuevo Ave et opusdei tu trabajo…
De nuevo Ave, Joshua Sobre mi comentario anterior ya resuelto la inconveniencia, el formulario se muestra tal cual nos has enseñado a programarlo, funciona y todo pero como siempre de tanto probar di en el clavo, mi pregunta versa así:
subi a mi dominio los archivos y a la vez las carpetas js y css, cuando ejecutaba ya en la web cambiaba todo el fondo de la página creada y se quedaba con el background que se programo en la carpeta css, despues de varios intentos ( innecesarios comentarlos por el momento ) saque las carpetas ( js y css ) del dominio y Consumatum est, todo dio como dije al principio, ahora bien el lema «No existen preguntas tontas, sino tontos que no preguntan.» me lleva a lo siguiente pues me estoy quebrando la cabeza el porque?? ya que saque los archivos antes mencionados del dominio aun logra leer los enlaces, de new Por que??? si no están, en tu infinita paciencia Semsey tal vez me ilumines, pues el bosque no me deja ver el árbol.
De nuevo mil gracias por mi y por todos – por cierto la web es de prueba ok no es comercial pero quise practicar lo que he aprendido – Ave Joshua, que la fortuna sea contigo et opus dei tú tutorial…
El fondo es una imagen? tal vez tu estructura de archivos es asi:
index.html
css/estilo.css
imagenes/fondo.jpg
Ave, Que la fortuna sea contigo, Joshua.
Ya me explicaron el porque, y es que como la librerías están en linea las reconoce pues para eso están Linkeadas, aún así he pasado la respectiva carpeta al directorio y para solucionar el problema de el fondo solo le copie el body que trae la página CSS que he ocupado de machote (ejemplo base) a la carpeta CSS de el formulario y se soluciona el problema y trabaja muy bien.
De nuevo Mil gracias por tu tutorial pues lo he aplicado a algo real y funciona, estoy por ponerlo en un hosting para así quede plasmada la idea, claro inmediatamente lo sacare pues es una prueba, pero gracias por su trabajo y tu infinita paciencia Dios sea contigo. Vine, vidy vicy…..
Que bueno fué encontrar este tuto, gracias por compartir.
Hola, esta muy bueno tu formulario.
Mi pregunta es:
veo que se envia al correo que tu pongas, pero es posible que tu formulario envíe al correo del usuario dentro de la base de datos(imaginate una lista de usuarios que venden algo y por medio de tu formulario la persona que visite la pagina y vea un articulo de algun usuario pueda enviarle un comentario a ese usuario y no a otro), pienso que en vez de poner un email sería una variable que llame el id del usuario o el email del usuario….se puede en tu formulario??
gracias
OLVIDA MI MENSAJE ANTERIOR…YA LO LOGRÉ….EN DEFINITIVA TU FORMULARIO ES MUY BUENO…FELICIDADES
Josue, gracias por ayudar a tanta gente que como yo no somos expertos. Quiero preguntarte algo.
Quiero personaliza el mensaje de «Envio Correctamente» con una pagina html. ¿Que linea debo de describir o agregar?.
Gracias espero tu respuesta
Linea 32
descarge el codigo php al descomprimirlo me sale una carmeta llamada: _macosx. dentro de ella hay estilos funciones index.php hay que subirla toda junta o esa carpeta no es necesaria.
No hagas caso a esa carpeta, es algo que genera el sistema operativo.
Una pregunta por qué el formulario en la propiedad action está vacía???? no debería de tener alguna llamada a PHP???
Cuando lo dejas asi le estas indicado que cuando el formulario sea enviado haga la llamada en la misma pagina, ya que alli esta el codigo PHP, tambien he visto que para hacer este comportamiento se usa PHP_SELF:
Hola Josue, muchas gracias por compartir tus conocimientos, tengo varios días sufriendo para encontrar la manera de que el formulario funcione «dentro» de mi página, pero tengo un problema, todo anda perfecto, pude personalizar el estilo de los mensajes, si no llenas un campo te manda el aviso, todo está bien, el problema es que no puedo completar el proceso de enviar el correo, porque el sitio tiene ya varios y al agregar la línea
deja de funcionar el sitio.
Tengo arriba la prueba en http://www.avantlaser.com.mx/pruebas/index4.php
Por favor dime si existe otra manera,
¿podría agregar la línea de desde otro archivo y que aún haga la validación y los mensajes de confirmación en la misma pantalla?
o se puede poner ese dentro del espacio del
Muchísimas gracias por tu ayuda.
Haz probado con un iframe que llame a una pagina aislada donde este el formulario de contacto? para evitar conflictos.
Que tal, estoy llmando el formulario a un index con ajax de jquery, Pero al llenar los campos y enviar el mensaje, el formulario se resetea y pone el home. Las validaciones las hace sin problemas, pero el envio no lo ejecuta. Probe el formulario solo desde el mismo host y funciona, al parecer es la llamada ajax.
Sabes cúal es el ajuste a hacer?
De antemano muchas gracias.
Buenos días,
Gracias, he utilizado tu formulario para hacer una pequeña aplicación para realizar pedidos.
Ahora bien, quiero que el cliente haga el pago del pedido antes de pinchar en el botón de ENVIAR, y por tanto que no me llegue el email con la información hasta que se haya realizado el pago mediante PAYPAL.
He pensado en hacerle un display:none al botón ENVIAR, y en su lugar incluir el botón de paypal COMPRAR.
Pero entonces, cuando el cliente rellena el formulario y se dispone a pagar se abre la nueva ventana de paypal.
¿Como lo puedo hacer para que se procese el PHP cuando finalmente se haga el pago por paypal?
Un saludo y gracias
Me gustaria ayudarte pero la verdad que no conozco el API de PayPal, supongo que debe haber una funcion que capture el momento cuando el pago haya sido efectuado, en ese momento tendrias que mostrar el boton de enviar.
hola buenas noches, estoy realizando un formulario para una pagina, me deje guiar por su tema para realizar la validacion, pero me gustaria saber como tendria que hacer para hacer que si el formulario va a ser enviado y esta todo vacio como hago para que me senale que todos los campos estan vacios y no uno por uno como sale en su ejemplo. de antemano gracias
Este formulario esta validado si el usuario le da al boton sin haber rellenado le va a salir error.
Hola, bueno mi situacion se podria decir que es un poco extraña baje el demo y bn si funciona las validaciones y todo pero como lo ago local no funciona lo de enviar datos a mi mail, lo entiendo, pero mi duda es si me puedes no se enviar un archivo de html en el cual que expliques como ago una coneccion a mysqlyog mira lo que digo es que un formulario en el cual solo aguarde un solo dato en cuanto le des enviar lo guarde en la base de datos solo eso un solo campo, quiero mas que nada una idea, soy nuevo aqui pero ps aprendo rapido solo con ver un ejemplo y listo.
Te agradeceria que me contestaras encerio nadie explica como hacer la coneccion en si.
tengo el problema antispam de mi servidor y no se programar para que este formulario que la salida del php sea desde mi correo y asi pasar el cortafuegos antispam del servidor, ya que si llega desde otro correo que no sea el mio no lo recoge.
Te agradecería me ayudaras
Att.
Juan Ignacio
Buenas tardes, estoy intentando hacer un formulario un poco atractivo para la empresa, y estoy haciendo mis primeros tirillos con el tema, mas o menos estoy pillando el tema, pero no logro sacar para que me verifique una opcion de de escoger entre unas opciones, lo que quiero es que si no se rellena esa opción no me envíe el formulario, aun no tengo la pagina volcada en el servidor, aqui te pongo el codigo por si me puedes echar un cable.
Merci de antemano.
$(document).ready(function () {
var emailreg = /^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/;
// aqui va a ir la validacion
$(«.buton»).click(function (){
$(«.error»).remove();
if( $(«.nombre»).val() == «» ){
$(«.nombre»).focus().after(«Ingrese su nombre»);
return false;
}else if( $(«.email»).val() == «» || !emailreg.test($(«.email»).val()) ){
$(«.email»).focus().after(«Ingrese un email correcto»);
return false;
}else if( $(«.telefono»).val() == «»){
$(«.telefono»).focus().after(«Ingrese un teléfono»);
return false;
}else if( $(«.consulta»).val() == «» ){
$(«.consulta»).focus().after(«Ingrese su consulta»);
return false;
}
});
$(«.nombre, .telefono, .consulta»).keyup(function(){
if( $(this).val() != «» ){
$(«.error»).fadeOut();
return false;
}
});
$(«.email»).keyup(function(){
if( $(this).val() != «» && emailreg.test($(this).val())){
$(«.error»).fadeOut();
return false;
}
});
});
HTML:
Nombre:
Mail:
Teléfono:
Consulta:
Elija el Departamento:
Gerencia
Administración
Taller
Recambios
Necesitas hacer algun tipo de validacion de checkboxes o radios?
https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
Gracias, pero me equivoqué, era con jquery, te lo he puesto en el otro foro, lo he logrado pero me surgen dudas, estan puestas alli.
Hola compañero. muy buen tutorial, funcionando a la perfección solo una cosita que no se si será por el php o por el servidor que utilizo.cuando me llega un email procendente del formulario me pone el nombre que haya puesto y luego a través de kundenserver.de
Es decir Hugo a través de kundenserver.de
esto se puede cambiar? por lo demas perfecto.
Muchisimas gracias y un saludo Josue
Hola Josue buen dia, espero y me puedas ayudar,
me podrias decir como le doy presentacion a este
formulario, que hago para que no se vea tan simple a la
hora que un cliente, llegue a ver ese formulario, quiero
hacer algo como el demo que pusiste tu.
me gustaria saber ya que soy novata en php
gracias
Hola Josue. Me podrias decir por favor, cual seria el codigo PHP para que cuando lo reciba en mi correo, se vean los campos en NEGRITA, y en color ROJO por ejm.
Y las respuestas del que rellena el formulario sea texto normal.
NOMBRE (esta parte en negrita y color rojo): Antonio (la respuesta del cliente, que sea texto normal)
EMAIL:
TU COMENTARIO:
Muchisimas gracias Josue.
Un saludo.
Para negrita puedes usar <bold> o <strong>, para color creo que puedes usar <font color=»red»>Rojo</font>
Hola, creo que ya resolví mi problema de todos modos muchas gracias por tu formulario
ahora tengo otra duda: ¿como hago para que la persona que lleno el formulario, le
llegue una respuesta personalizada, como tipo agradecimiento? , porfis necesito tu ayuda.
Es muy simple, solo corres una segunda funcion mail() pero en este caso pones como destino el correo que la persona ingreso y con el mensaje personalizado que quieras, se podria acoplar al codigo actual asi:
if(mail($dest,$asunto,$cuerpo,$headers)){
mail($email, «Agredecimiento», $mensaje);
}
Hola, ok gracias ya me salio, realice unos correos de prueba, y si resulta , pero ahora tengo un problema, ¿porque no puedo ver los datos ingresados de la persona que llena el formulario, solo veo el asunto y el correo (pero en el correo no es el correo que ingreso si no otro del hosting gratuito en donde subi mi pagina)?
Y si, a veces el hosting pone su marca alli en el correo, ya que usa su servidor SMTP entonces envia el correo con su dominio.
Hola Josue.
Perdona que te vuelva a molestar otra vez.
Realice lo que me dijiste, pero lo que me salio en el email fue:
Nombre: Antonio
No me salio el campo NOMBRE en rojo.
Si puedes volver a contestarme te lo agradeceria.
Muchisimas gracias un saludo.
Esto fue lo que me salio.
<code lang="Nombre: Antonio»>
Es para formulario PHP.
Muchas gracias.
no se vio el código que pusiste, en que cliente de correo lo haz probado?
Hola Josue.
Muchas gracias por volverme a contestar.
Te dire que puse el codigo tal cual me lo dijiste, y cuando me llega el formulario a mi correo, se ve impreso tal cual con las comillas etc, etc, (sin actuar el PHP)
Y lo he probado en 000webhost.com.
Te queria pedir por favor, que si podrias decirme el codigo de este formulario.
Muchisimas gracias, un saludo.
Te preguntaba por el cliente de correo (gmail, hotmail, etc).
Es gmail.
Ok, mira, hice unas pruebas y asi me funciono a mi:
Hola
";
$body .= "rojo";
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
mail('tucorreo@gmail.com', 'Asunto', $body, $headers);
Es necesario poner los headers sino no lo va a reconocer como un correo con HTML, para color se tiene que usar span y estilos en linea.
Para que pueda enviar e-mails es necesario que la pagina ya este alojada en algun servidor o puedo enviar correos desde un servidor local???.
Si, necesitas un servidor ‘real’.
Josue , Si quiero enviar el mail por smtp, utilizando phpmail, que debería modificar? e intentado de varias maneras pero no encuentro la manera.
Quitar la condicion if(mail(….)) y ponerle lo de PHPMailer:
require(«class.phpmailer.php»);
$mail = new PHPMailer();
Un alma que se apiade de mi y me diga porque los combobox depedientes y tambien los select independientes no me llegan al correo metiendolos por post? me llegan todos menos los select :S
Debes poner el código para verlo.
Hola compañero. muy buen tutorial, funcionando a la perfección solo una cosita que no se si será por el php o por el servidor que utilizo.cuando me llega un email procendente del formulario me pone el nombre que haya puesto y luego a través de kundenserver.de
Es decir Hugo a través de kundenserver.de
esto se puede cambiar? por lo demas perfecto.
Muchisimas gracias y un saludo Josue
Es por el servidor, sin embargo con PHPMailer puedes solucionarlo.
Perdome Josue, pero estoy un poco verde en esto, podrias darme alguna pista… muchisimas gracias.
Hola Josue, tu post es muy bueno, e interesante… es mucho mas claro q otros q he visto.. saludos
Hola josua.
Tras unos pequeños ajustes el formulario me funciona perfectamente, pero quiero añadirle la opción de enviarla a un correo o a otro (en una empresa por ejemplo enviarla a departamento comercial, o a almacen, o a departamento técnico… no se si me explico)
Aparte quería tambien como se puede hacer para que al ser enviado el correo al cabo de 5 segundos se cierre la ventana.
Un saludo
Hola Josue, primero que todo felicitarte y agradecer el esfuerzo y paciencia al hacer este tuto.
Mi problema es el siguiente copie el codigo tal cual, solo modifique el correo de destino y el nombre de Index.html por contacto.html pues en la estructura que tengo hecha ya hay uno llamado index; lo subi a un hosting gratis para probarlo antes, pero no me valida los datos ni salen mensajes de error aun cometiendolos adredre y me manda a el mismo formulario pero sin los otros elementos de la pagina (eg. menu cabeceros footers etc.) es cuestion del hosting o algo que hice mal?.
pd. el hosting tiene soporte php y mysql.
Si tu archivo es .html no va a funcionar, cambialo a .php y pruebalo.
Hola josua.
Tras unos pequeños ajustes el formulario me funciona perfectamente, pero quiero añadirle la opción de enviarla a un correo o a otro (en una empresa por ejemplo enviarla a departamento comercial, o a almacen, o a departamento técnico… no se si me explico)
Aparte quería tambien como se puede hacer para que al ser enviado el correo al cabo de 5 segundos se cierre la ventana.
Un saludo
Añade un select en el formulario:
Y luego en PHP cambias:
$dest = $_POST['destino'];
Hola Josue.
Le cambie a php e igual no envía nada o mejor dicho no llega ningún correo a la cuenta y utilice los mismos archivos que colocas aquí, únicamente modificando el correo del destinatario.
Pues que raro, corre la siguiente prueba y si no envia es problema de tu servidor:
mail('tuemail@gmail.com', 'Asunto', 'Mensaje Prueba');
Hola Gracias por colocoar esta herramienta, la he probado y funciona perfectamente pero tengo un pequeño problema, y es que siempre se muestra el mensaje: Email enviado correctamente
me podrías ayudar
te lo agradezco..
Pues eso quiere decir que envio, explicate.
Hola Josue
Gracias por tu formulario, funciona PERFECTAMENTE, pero me he quedado bloqueado tratando de agregar un campo teléfono, quiero validarlo para que sólo acepte números pero no logro hacerlo.
Espero me puedas ayudar. De ante mano gracias.
Tienes problemas con validarlo para que sea solo de numeros?
Encontre dos formas de hacerlo, con un plugin de jQuery o hacerlo con HTML5 que seria mas facil:
Gracias Josue
Voy a usar el plugin.
Hola Josue y a los demas posteadores.
Afecta que la cuenta de destino sea de hotmail??? porque veo que a los demás les funciona de maravilla pero a mi no, bien sea integrándolo a la estructura de la pagina o subiéndolo únicamente, nada no trabaja como debería, si alguien puede darme una mano se lo agradeceré, por cierto lo subí al hosting byehost.com
Hola, estan muy buenos los tutoriales, tengo unos errores en este que no los he podido solucionar me sale esto:
Tu Nombre:
( ! ) Notice: Undefined index: nombre in C:\wamp\www\probando\form.php on line 45
Call Stack
# Time Memory Function Location
1 0.0007 689400 {main}( ) ..\form.php:0
‘>
( ! ) Notice: Undefined variable: errors in C:\wamp\www\probando\form.php on line 46
Call Stack
# Time Memory Function Location
1 0.0007 689400 {main}( ) ..\form.php:0
Tu Email:
( ! ) Notice: Undefined index: email in C:\wamp\www\probando\form.php on line 47
Call Stack
# Time Memory Function Location
1 0.0007 689400 {main}( ) ..\form.php:0
‘>
( ! ) Notice: Undefined variable: errors in C:\wamp\www\probando\form.php on line 47
Call Stack
# Time Memory Function Location
1 0.0007 689400 {main}( ) ..\form.php:0
Asunto:
( ! ) Notice: Undefined index: asunto in C:\wamp\www\probando\form.php on line 48
Call Stack
# Time Memory Function Location
1 0.0007 689400 {main}( ) ..\form.php:0
‘>
( ! ) Notice: Undefined variable: errors in C:\wamp\www\probando\form.php on line 48
Call Stack
# Time Memory Function Location
1 0.0007 689400 {main}( ) ..\form.php:0
Mensaje: ( ! ) Notice: Undefined index: mensaje in C:\wamp\www\probando\form.php on line 49 Call Stack #TimeMemoryFunctionLocation 10.0007689400{main}( )..\form.php:0
( ! ) Notice: Undefined variable: errors in C:\wamp\www\probando\form.php on line 49
Call Stack
# Time Memory Function Location
1 0.0007 689400 {main}( ) ..\form.php:0
( ! ) Notice: Undefined variable: result in C:\wamp\www\probando\form.php on line 51
Call Stack
# Time Memory Function Location
1 0.0007 689400 {main}( ) ..\form.php:0
todo esto me aparece en una tabla, puse el código que les dijiste mas arriba: pero igual me sigue tirando estos errores. Uso Wamp server y me corren todos los servicios ok.
gracias y saludos!
Pon error_reporting(0); apenas abres el
Hola Josue, que pena molestar tanto pero deberás necesito que ese formulario funcione, esa linea de código que me dices en que parte la coloco o como la hago correr para probar.
Crea un nuevo archivo .php, pones ese código (cambias el correo), lo subes y luego lo ejecutas, accediendo a esa URL.
cree el archivo prueba.php lo subi al hosting lo llame desde un link y me sale este error
Error del servidor
El sitio web ha detectado un error al recuperar rolo16.byethost32.com/prueba.php . Es posible que esta esté inactiva debido a tareas de mantenimiento o que se haya configurado de forma incorrecta.
A continuación se detallan algunas sugerencias:
Vuelve a cargar esta página más tarde.
Error de HTTP 500 (Internal Server Error): Se ha detectado una condición inesperada cuando el servidor intentaba atender la solicitud.
Pues es un problema de tu servidor al parecer, contacta con soporte tecnico.
Ok gracias
Buenas tarde Josue, he implementado tu codigo y me arroja este error
Warning: mail() [function.mail]: «sendmail_from» not set in php.ini or custom «From:» header missing in C:\AppServ\www\food\contacto.php on line 31
si puedes entregarme una ayuda estaría agradecido.
Recuerda que si usas un servidor local como AppServ no va a funcionar la función mail().
Josue Mil gracias por la respuesta!, se me desaparecieron los errores con esas líneas que me dijiste, lo que te quería consultar ahora es que me da error cuando hago el envió. Es por que el wamp no soporta smtp?, hay que agregar alguna librería al código php?
Gracias por todo y saludos
No te va a funcionar, mail() no funciona en un servidor local.
Ok Josue, gracias por todo muy buenos los tutoriales!!
Hola Josue
Creo sera la ultima vez que moleste por este asunto pues ya he probado incluyendo los códigos que me dijiste y nada, ademas averigüe con soporte técnico en el sitio del domino y si tienen soporte para php y mail().
Ademas ahora así se llene solo un campo limpia pantalla y no reporte ningún error, y obviamente no envía ningún dato, ni a la carpeta spam de la cuenta, lastima porque me gusto el estilo y organización de formulario.
Es posible que en vez de enviarlo a un correo lo haga a un archivo de texto y se almacenen los mensajes en el, quizás haga un archivo por día, digo sino es muy complicado.
Lamento que luego de tantos intentos aun no lo logres, esta puede ser una solucion 🙂
el ultimo codigo ke me enviaste:
mail(‘tuemail@gmail.com’, ‘Asunto’, ‘Mensaje Prueba’);
llego al correo, pero veo que esa linea mail() no aparece en el codigo que publicas, no deberia ir por esta párte:
$dest = «mimail@hotmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
Mail va en una condicion en la linea 31.
Hola Josue.
Tengo el formato de formulario, aunque necesito agregarle una casilla de verificación de aceptación a una suscripción, y que me devuelva a la misma pagina del formulario al enviar los datos ademas de un mensaje de enviado satisfactoriamente.
como podría hacerlo, si eres tan gentil de darme una ayuda te lo agradecería inmensamente.
Pues, agregas un checkbox y listo, recojer los datos de un checkbox con PHP es igual que cualquier otro elemento de formulario, con lo que respecta al header lo que tendrias que hacer es añadir una linea de redireccion si envio:
header("Location: http://direccion.com");
Ok, pero si la página a la que quiero redireccionar esa la misma de contacto que precedió a la del php?, es decir no es una dirección nueva ni nada de eso, sino una dentro del mismo website; ademas en que parte del codigo deberia agregarla pues lo he hecho declarándola como variable al inicio junto con nombre, mail y asunto y abajo en la funcion mail() y se me bloquea, no envía los mensajes, que hay mal en el codigo o ubicacion de las mismas lineas???
Te agradezco tu valiosa ayuda.
Ok, primero, si es en tu mismo website pues pones header asi:
header("Location: http://tuwebsite.com/contacto.php");
Segundo, para que header funcion no tiene que haber nada de HTML antes, por eso mueve todo el codigo PHP hacia la linea 1 antes de que se declaren las etiquetas HTML.
Hola Josue,
Hice todo tal cual tu lo publicaste, pero no llega el mail, me podria ayudar?
muchas gracias.
<?php
error_reporting(0);
if(isset($_POST['boton'])){
$errors = array(); // declaramos un array para almacenar los errores
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘asunto’] == »){
$errors[3] = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = $_POST[‘departamento’]; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
Indique a que departamento desea dirigirse:
Ventas / Consultas
Gerencia
Service
Importaciones
Nombre:<input name="nombre" type='text' class="nombre" value='’>
Email:<input name="email" type='text' class="email" value='’>
Asunto:<input name="asunto" type='text' class="asunto" value='’>
Mensaje:
Aclaro por las dudas xxxx@xxxx.com ya lo probé con los mails originales, esos los puse de ejemplo y ademas ya esta puesto en el servidor que va definitivamente el sitio.
Ya probaste hacer una prueba simple de mail()?
mail('tuemail@hotmail.com', 'Asunto', 'Mensaje Prueba');
hola 🙂 disculpa esq yo ya tengo el formulario y esta conectado a mi base d datos, pero lo que no se es donde poner codigo para que valide mis datos.
Ya tienes un formulario hecho y solo quieres la parte de validacion?
Muy buen aporte, sin embargo, tengo una duda, como le digo al sistema que el smtp requiere autenticación, ya que no me esta enviado los e-mail y de acuerdo al soporte técnico debo especificar la autenticación.
De antemano mil gracias
No soy experimentado en esos temas, pero googleando encontre esto
Logré hacer que funcionara con la liga que me recomendaste, Me costo un poco de trabajo, pero valió la pena
Mil gracias
Hola Josue.
Cuando o hice por primera vez me funcionó perfecto. Lo he intentado con 2 clientes, con hosting de Linux y Windows, y no me ha vuelto a funcionar. Para no equivocarme he copiado y pegado todo el código. También cambié la versión del script de jquery por la 1.8.3, bajé los script y los subí a los servidores de hosting y nada. No me ha vuelto a funcionar y veo que hay varios que están en la misma situación. Te agradezco cualquier información al respecto.
Haz una prueba simple de mail(), es la forma mas segura y rapida de descartar:
mail('tuemail@hotmail.com', 'Asunto', 'Mensaje Prueba');
Si envia, el problema esta en tu codigo, sino el problema esta en el servidor.
Hola Josue,
Lo primero felicitarte y darte las gracias por este fantástico tutorial.
Quería comentarte un problema con la codificación de los caracteres, en el cuerpo del mensaje no hay ningún problema, aparecen bien tanto las tildes como las «ñ», pero no así en el header, no consigo que aparezcan de manera legible, he probado cambiando la codificación iso-8859-1 por UTF-8, pero nada en el header sigue apareciendo, por ejemplo en nombre, caracteres de este tipo Frán.
Un saludo y de nuevo gracias
Tal vez esto te sirva http://bitprison.net/php_mail_utf-8_subject_and_message
Debo ser el único que no se entera de nada…
Yo lo estoy montando en local, con un servidor wamp, pero es que claro, obviamente en el momento en el que estoy poniendo $_POST[‘namedelformulario’] el php me va a soltar y me suelta un error de que no existe esa variable y asi con todos los $_POST…
No sé, no me entero.
El problema con WAMP y con la mayoria de servidores locales es que siempre tiene las alertas de errores activadas ya que se entiende que es un entorno de desarrollo y es necesario, para que no te salgan todos esos errores pon la siguiente funcion antes de todo:
error_reporting(0);
Hola josue, de antemano muchas gracias por los tutoriales, me han sido de gran ayuda, tengo un problema con el envío de los datos a mi correo, no llegan, que puede estar pasando, o sera mi servidor? Te agradeceria la respuesta 🙂
http://pao-sanchez-sopo.com/contact.html en ese link está la prueba.
Tienes varios errores en la Consola, el primero:
jQuery no se esta cargando http://pao-sanchez-sopo.com/js/jquery/jquery-1.7.1.min.js 😛
Hola Josue!
Felicitaciones por este tutorial! Muy bueno!
Quisiera preguntar, como podría hacer que en caso de result positivo derireccione directamente a otra página del sitio (url) y no muestre el mensaje de result?
Desde ya muchas gracias!
Pedro
Añadiendo una redireccion.
Hola Josue,
de nuevo con el tema edireccionamiento. Gracias a tu grán trabajo en responder todas las consultas que hacemos los newbees, he encontrado una respuesta respecto al redireccionamiento luego de completado el form
En tu script, en qué linea insertarías el header:
header(«Location: http://tuwebsite.com/contacto.php«);
De antemano ya muchas gracias
Si usas header, debe ir antes de cualquier codigo HTML, para eso tendrias que mover el codigo PHP a la linea numero 1.
Gracias Josue!!
Luego te hago llegar la url con el resultado final!
Abrazos
Pedro
Gracias Josue!
Realmente me has anonadado con tu rapidez! Aún estaba leyendo los otros post y ya tenía tu respuesta en mi inbox!!
Nuevamente mis felicitaciones por este gran trabajo que haces!!
Cordialmente
Pedro
Bueno, como dicen, no hay 2 sin 3!
Una vez insertado el header con la location recibo el siguiente mensaje de error:
Warning: Cannot modify header information – headers already sent by (output started at /www/docs/ph-web.com.ar/public_html/10_pasos_previos.php:1) in /www/docs/ph-web.com.ar/public_html/10_pasos_previos.php on line 2
Algo está duplicado y no encuentro donde
Donde estas poniendo el header()? tiene que estar antes de cualquier HTML.
Antes de cualquier etiqueta HTML en línea 2 despues de <?php .
Puede que el error se deba a que dentro del <?php tambien esté el script de la validación y envío?
<?php
header ("Location: http://www.ph-web.com.ar/10_pasos_previos_ver.php");
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$error1 = 'Ingrese su nombre’;
}else if($_POST[‘apellido’] == »){
$error4 = ‘Ingrese su apellido’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$error2 = ‘Ingrese un email correcto’;
}else{
$dest = «info@ph-web.com.ar»; //Email de destino
$nombre = $_POST[‘nombre’];
$nombre = $_POST[‘apellido’];
$email = $_POST[‘email’];
//Cabeceras del correo
$headers = «From: $nombre $apellido $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$headers)){
$result = »;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘apellido’] = »;
$_POST[‘email’] = »;
}else{
$result = »;
}
}
}
?>
Por otra parte tampoco estan llegando los mails.
El header lo puedes poner dentro del PHP tambien, por ejemplo en tu caso seria despues de que se haya ejecutado mail() (por donde esta $result), lo otro es que veo que estas poniendo header (), ese espacio esta demas, es todo junto header().
Hola Josue,
gracias por todas tus repuestas. Ahora he movido el header a linea 24 y la página se presenta bien
Completo el form y envía el mail pero no redirecciona. Es decir vuelve a la misma página y ahora sí
vuelve a presentar el mismo mensage de Warning ….. etc. etc.
b>Warning: Cannot modify header information – headers already sent by (output started at /www/docs/ph-web.com.ar/public_html/10_pasos_previos.php:1) in /www/docs/ph-web.com.ar/public_html/10_pasos_previos.php on line 24
Creo que estiempo de descansar y verlo mañana con una mente más fresca! Ha ha ha !!
Desde ya muchas gracias!!
En ultima si no lo puedes hacer con header tienes la opcion de hacer la redireccion con JS que es mas facil de aplicar que header():
function redireccion(){
window.locationf="https://tursos.com";
}
setTimeout ("redireccion()", 5000); //cuenta regresiva
como hago para poner el formulario en una pagina .html ?
Con este metodo no se puede, tal vez esto te sirva: https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ajax-con-php-y-jquery
Que tal Josue, ando con el mismo rollo para la redireccion, he probado los metodos de php y java y ninguno me funciona, te copio el código php y me dices donde puede estar el error, creo es de ubicación del codigo pero no estoy seguro:
<?php
ob_start();
ob_end_clean();
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto'];
$confirmar = $_POST ['confirmar'];
$header = 'From: ' . $email . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";
$mensaje = «Este mensaje fue enviado por » . $nombre . «, con asunto » . $asunto . » \r\n»;
$mensaje .= «Su e-mail es: » . $email . » \r\n»;
$mensaje .= «Mensaje: » . $_POST[‘mensaje’] . » \r\n»;
$mensaje .= «Enviado el » . date(‘d/m/Y’, time());
$para = ‘comepa***@hotmail.com’;
$asunto = ‘Asunto del mail recibido’;
$confirmar = ‘suscripcion al boletin’;
mail($para, $asunto, $confirmar, utf8_decode($mensaje), $header);
echo ‘Mensaje enviado correctamente, gracias por contactarnos’;
?>
contacto
el código htm lo tenia al inicio pero leyendo tu recomendación lo baje al final, y aun así no me redirecciona, ni php ni javaScript, ademas lo de validar esta bien ubicado ahi; pues necesito ese dato en los correos que me llegan.
Gracias de antemano por tu ayuda.
Copiame tu codigo completo aqui y me lo pasas.
La linea de código no se copio correctamente! les dejo la linea en este enlace! (Linea de redirección) http://snippi.com/s/s9chnpx
Eres Genial Ramses!!!
Lo he probado y funciona! Muchas gracias
Gracias Josue!!
Por tu excelente formulario y por hacer posible que se encuentren solución a cada problema.
Haces un gran trabajo!
Oops!
un pequeño problemita. En IE8 no logra redireccionar a la nueva página.
este es el codigo del archivo php
http://snippi.com/s/mlwh8v8
Hola,
Oye muchas gracias por tu tutorial es un bonito y funcional formulario.
Tengo una pregunta, como puedo ponerle asunto al email que llega a mi correo.
Mil gracias!
Podes usar $subject colocandolo antes de los $header http://snippi.com/s/a5dnsyl
Linea 25: la variable $asunto define eso, por defecto obtiene el valor del formulario, sin embargo puedes definirle un valor estatico.
Hola, llevo dos días pegándome con mi web y el formulario sigue sin funcionar. El hosting dice soportar PHP pero siempre da error. Estoy desesperado…
No me digáis por qué pero ya funciona. Mil gracias por el post, no hay ninguna página mejor sobre el tema
Muchas gracias, lo probe en 2 host, en uno no funciono y en el otro si, investigando un poco me di cuenta que uno de ellos no tenia servicio SMTP por eso no funcionaba. A tener en cuenta eso, Gracias otra vez.
Hola!
El tuto me ha funcionado perfecto. Mucha gracias.
Sólo me queda una pregunta: Sólo se ve correctamente (con estilos) en explorer 9 si activo la vista de compatibilidad. Se supone que el explorer 9 si que es compatible con css3 no? sabes porque entonces por ejemplo no puedo ver los bordes redondeados en explorer 9?
Gracias!
me aparece el siguiente mensaje y no puedo abrir la pagina de contacto.php: Error HTTP 404.3 – Not Found
No puede obtener acceso a la página solicitada debido a la configuración de la extensión. Si la página es un script, agregue un controlador. Si se debe cargar el archivo, agregue una asignación MIME.
pork sera?
Me podria ayudar alguien?
Muchas gracias!!!
Un error 404 es porque el archivo no existe, tal vez no lo subiste bien.
pruebo otras paginas «.php» que hice y si funcionan bien pero esta no m funciona.
Estimado
Excelente el tuto , de hecho lo mezcle con cosas que tenia propias y lo adapte a mis requerimientos, pero me gustaría si me pudieras ayudar con un tema que tengo, funciona todo bien pero cuando quiero actualizar la pagina con F5 o por medio del explorador, me envía nuevamente el mensaje, hay alguna forma de solucionarlo.
Dejo mi código:
Documento sin título
<?php
if(isset($_POST['submit'])){
$errors = array();//declaramos un array para almacenar los errores
if($_POST['nombre'] ==''){
$errors[1] ='Ingrese su nombre’;
}else if($_POST[‘email’] ==» or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$errors[2] =’Ingrese su email correcto’;
}else if($_POST[‘empresa’] ==»){
$errors[3] =’Ingrese un empresa’;
}else if($_POST[‘telefono’] ==»){
$errors[4] =’Ingrese su telefono’;
}else if($_POST[‘coment’] ==»){
$errors[5] =’Ingrese su mensaje’;
}else {
//si todo esta ok envia email
/* Recepcionamos los datos enviados asincrnicamente */
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$empresa = $_POST[‘empresa’];
$telefono = $_POST[‘telefono’];
$comentario = $_POST[‘coment’];
$fecha = date(«d-m-Y»);
$hora = date(«H:i:s»);
/* Definimos el correo donde enviaremos el mensaje y el asunto */
$destino = «miemail@midomio.cl»;
$asunto = «CONTACTO SITIO WEB «;
$de =»sitio@misitio.cl»;
/* Definimos el formato del mensaje a enviar */
$cuerpo = ‘
Formulario de contacto / Recupac
Datos del Usuario:
Nombre:‘.$nombre.’
E-mail:‘.$email.’
Empresa o Colegio: ‘.$empresa.’
Telefono: ‘.$telefono.’
Fecha de envio: ‘.$fecha.’
Hora de envio: ‘.$hora.’
Consulta:
‘.$comentario.’
‘;
/* Definimos las cabeceras del mensaje */
$cabecera = «MIME-Version: 1.0\r\n»;
$cabecera .= «Content-type:text/html; charset=iso-8859-1\r\n»;
$cabecera .= «From: $email\r\n»;
$cabecera .= «Reply-to: $email\r\n»;
$cabecera .= «X-Mailer: PHP5\r\n»;
//$cabecera .= «Cc: $email\r\n»;
/* Enviamos va correo, devolviendo un mensaje en caso de éxito o falla */
if(mail($destino, $asunto, $cuerpo, $cabecera)) {
$result = ‘Email enviado correctamente’;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘empresa’] = »;
$_POST[‘telefono’] = »;
$_POST[‘coment’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje’;
}
}
mail($email, $asunto, «Estimado(a) $nombre:\r\r
Gracias por tu visita, hemos recibido su consulta y pronto seras contactado por nuestro departamento de servicio al cliente. \r
Recuerda que para asegurar la entrega de nuestros e-mail en tu correo, por favor agrega (miemail@midomio.c) a tu libreta de direcciones o revisa también tu carpeta spam o carpeta Junk Email. \r\r
Saludos,\r
Mi sitio. \r Servicio al Cliente \rTel.xxxxxxx -xxxxxx\r email:miemail@midomio.c\r\r—\rXXXXXXXXXXXXX\r
{Si imprimes este mail, no dudes en reciclar el papel.}»);
//»Contacto sitio Recupac» ,»From: $de»,»-f$de»
}
?>
Tu nombre
<input name='nombre' type='text' id='nombre' value='’ size=’32’ class=’nombre’ />
Tu email
<input name='email' type='text' id='email' value='’ size=’32’ class=’email’ />
Tu empresa
<input name='empresa' type='text' id='empresa' value="» size=’32’ class=’empresa’ />
Tu teléfono
<input name='telefono' type="text" id='telefono' value="» size=’32’ class=’telefono’ />
Mensaje
Ya, lo primero sube todo tu código PHP a la linea 1 (porque vamos a usar header()), antes del HTML, luego abajo de donde limpias los campos despues de haber enviado el correo(antes del else) pones:
header("Location: http://URL-de-tu-formulario");
Una redirección HTTP impide ese circulo vicioso de envio tras envio al refrescar la pagina.
Hola!!!, muchas gracias por el tutorial. Gracias a los comentarios logré dejar funcionando ok todo. Lo unico que no me funciona bien son los saltos de linea con br. No se por que no me permite ocuparlos para que me lleguen separados los contenidos al mail. No sé si será problema que esté trabajando en mi archivo que es .php para poder ocupar esta etiqueta br de html. Esto es lo que tengo escrito:
$cuerpo .= $_POST[‘mensaje’].»»;
$cuerpo = .$_POST[‘nombre’].»»;
$cuerpo = $_POST[‘email’].»»;
$cuerpo .= $_POST[‘telefono’].»»;
$cuerpo .= $_POST[‘ciudad’].»»;
$cuerpo .= $_POST[‘direccion’].»»;
$cuerpo .= $_POST[‘asunto’].»»;
Estimado siempre tenia ese problema
y el problema de br, es que funciona solo en html y no php, para ello utiliza \r\r
Hola Claudio, esto probando y no logro hacer el salto de linea.
Todo me llega en una misma linea.. probe con » rr» » rn» y nada..
Hola!. Logré hacer que funcione el formulario y llegue con la info como quiero, pero tengo un problema. Al subir la web a mi servidor, funciona perfecto. Me muestra el formulario con el estilo que le di, se manda el correo, etc. El problema es que al entregar a mi cliente la web (exactamente los mismo archivos) al presionar contacto en Chrome, me abre la ventana de descarga, como para guardar mi archivo. No sé si se producirá porque la sección contacto tiene la extensión .php o qué, pero lo raro es que en mi servidor funciona perfecto y no me sucede esto.
Por otra parte, al verlo en explorer, me muestra el formulario solo por partes, sin el estilo y con parte del código php visible. Nuevamente, lo raro es que desde explorer al meterme a la web alojada en mi servidor se ve perfecto y funciona.
Que puede pasar?, no sé si hay algún problema con que el archivo no sea un html que llama al archivo php y que todo el código esté en un mismo archivo. Nuevamente, lo raro es que en mi servidor funciona tal cual, y en el de mi cliente, no.
Please!!!, S.O.S !!!!. Muchas gracias.
Hola Sebastian, eso es algo muy común, cuando pasa eso es porque el servidor no soporta archivos PHP.
Josue, efectivamente es lo que me dices. Cuales son los requerimientos minimos de servidor para que funcione correctamente este formulario?. Nuevamente, muchas gracias por tu ayuda
Que soporte PHP y que la función mail() funcione, si quieres almacenar los datos tambien necesitas MySQL funcionando.
Buenas tardes,
Intento agregarle a mi formulario una lista desplegable con opciones, pero no sé cómo escribir los valores en “enviar_mensaje.php” para que me llegue la opción seleccionada por el cliente a mi correo electrónico. Espero me entiendas y puedas orientarme un poco.
Saludos.
De la misma forma como llamas un campo de texto, si tu select en el HTML luce asi:
en PHP lo obtienes asi:
$valor = $_POST['nombre_x'];
Josue,
Ya entendi el codigo y se soluciono!!!
Muchisimas gracias por tu ayuda.
josue! antes que nada gracias por el tutorial y felices fiestas.
te consulto. segui el tutorial pero al mandar el mail me aparece este texto. que podra ser?
Warning: mail() [function.mail]: SMTP server response: 554 No se permite el envio de correo sin especificar una cuenta valida desde donde sale el correo. in \\hmfsw\web\dtc008\avdg.com.ar\public_html\OESTE\index.php on line 32
Estimado ponga el código para ver el problema, ya que parece un problema del hosting o si no del correo mal puesto.
gracias chicos. era lo que decia josue nomas! anda diez puntos! grazie mile! buen comienzo de año para todos.
No, es una cuestión del hosting por lo que he leido, pon esta linea de código antes del mail():
ini_set('sendmail_from','correo@queenvia.com');
josue quiero agregar un campo para el tel, logro hacerlo pero no que me aparezca en el cuerpo del mail. q puse mal?
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$error1 = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/»,$_POST[‘email’])){
$error2 = ‘Ingrese un email correcto’;
}else if($_POST[‘tel’] == »){
$error3 = ‘Ingrese un teléfono correcto’;} else if($_POST[‘asunto’] == »){
$error3 = ‘Ingrese un asunto’;
}else if($_POST[‘mensaje’] == »){
$error4 = ‘Ingrese un mensaje’;
}else{
ini_set(‘sendmail_from’,’info@avdg.com.ar’);
$dest = «info@avdg.com.ar»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’]; //Asunto
$cuerpo = $_POST[‘mensaje’];
$cuerpo = $_POST[‘tel’]; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre $email\r\n»; //Quien envia?
$headers .= «X-Mailer: PHP5\n»;
$headers .= ‘MIME-Version: 1.0’ . «\n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «\r\n»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Su Consulta fue enviada correctamente’;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘tel’] = »;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje’;
}
}
}
?>
Nombre<input type='text' class='nombre' name='nombre' value='’>
Email
<input type='text' class='email' name='email' value='’>
Teléfono<input type='text' class='asunto' name='tel' value='’>
Asunto<input type='text' class='asunto' name='asunto' value='’>
Mensaje
El mensaje lo tienes que poner asi:
$cuerpo = $_POST[‘mensaje’];
$cuerpo .= $_POST[‘tel’];
El punto añade un valor a $cuerpo
grande josue! sos un crack. gracias por todo!
No, no es necesario, el código que se usa es bastante simple, usa la funciona nativa mail() de PHP, prueba a hacer un test de mail() solo a ver si envia.
Para poner codigo usa <code></code> que error te sale?
Hola, me podrias ayudar?
tengo que envias un mail en php y tiene que llegar en html y no logro hacerlo, el codigo que tengo es este:
//envío de mails con alta de cliente
//$cuerpo .= "Informe de Alta de cliente " ;
$cuerpo .= "Name: " ;
$cuerpo .= $nombre ;
$cuerpo .= "#DNI#:" ;
$cuerpo .= $dni ;
$cuerpo .= "Lastname: " ;
$cuerpo .= $apellido. "" ;
$cuerpo .= "Telefono: " ;
$cuerpo .= $tel." " ;
$cuerpo .= "Dia: " ;
$cuerpo .= $dia. " " ;
$cuerpo .= "Mes: " ;
$cuerpo .= $mes. " " ;
$cuerpo .= "EMAIL " ;
$cuerpo .= $email ;
$destinatario = "devoluciones@duvasba.com";
$asunto = "Subscribe DUVAS - Alta de cliente VIP (cliente)";
//para el envío en formato HTML
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
//dirección del remitente
$headers .= "From: $email";
mail($destinatario,$asunto,$cuerpo,$headers) ;
que puedo hacer, muchas gracias
Muchas gracias me sirvió pero me prgunto si seria posible crear un enlace en el cual al hacer clic me enviará un mensaje predeterminado. Pense que seria algo así mipagina.es/contacto.php?nombre=dani&email=support@mipagina.es&asunto=Hola&mensaje=mimensaje
Pero no funciona algun idea?
Tendrías que cambiar las variables POST a GET.
una sugerencia, no seria mejor ponerle un recapcha para evitar el spam?
Claro, seria buena idea.
Estimado Josue
De que forma puede arreglar este codigo, no logro validarlo:
if(isset($_POST['submit'])){
$errors = array();//declaramos un array para almacenar los errores
//Datos colegio
if($_POST['nombre_colegio'] ==''){
$errors[1] ='Ingrese el nombre de su colegio';
}else if($_POST['direccion_colegio'] ==''){
$errors[2] ='Ingrese la dirección del colegio';
}else if($_POST['comuna'] =='NULL'){
//echo "tu valor esta vacido"
}else if($_POST['email_colegio'] =='' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email_colegio'])){
$errors[3] ='Ingrese un email correcto';
}else if($_POST['telefono_colegio'] ==''){
$errors[4] ='Ingrese su teléfono';
}else if($_POST['total_alumnos'] ==''){
$errors[5] ='Ingrese cantidad de alumnos del colegio';
}else if($_POST['educacion_basica'] =='NULL'){
//$errors[6] ='Seleccione al menos un nivel';
}else if($_POST['educacion_media'] =='NULL'){
//$errors[7] ='Seleccione al menos un nivel';
//Datos Coordinador
}else if($_POST['nombre_coordinador'] ==''){
$errors[8] ='Ingrese el nombre del coodinador';
}else if($_POST['email_coordinador'] =='' or !preg_match("/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/",$_POST['email_coordinador'])){
$errors[9] ='Ingrese un email correcto';
}else if($_POST['cargo_coordinador'] ==''){
$errors[10] ='Ingrese cargo del coodinador';
}else if($_POST['telefono_coordinador'] ==''){
$errors[11] ='Ingrese su teléfono';
}else if($_POST['coment'] ==''){
//$errors[5] ='Ingrese su mensaje';
}else {
//si todo esta ok envia email
Estimado Josue
Y como puede validarlo de acuerdo al js?.
$(document).ready(function () {
var emailreg = /^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/;
// aqui va a ir la validacion
$(".button").click(function (){
$(".error").remove();
//validacion datos colegio
if( $(".nombre_colegio").val() ==""){
$(".nombre_colegio").focus().after("Ingrese el nombre del colegio");
return false;
}else if( $(".direccion_colegio").val() ==""){
$(".direccion_colegio").focus().after("Ingrese la direccion del colegio");
return false;
}else if( $(".email_colegio").val() =="" || !emailreg.test($(".email_colegio").val()) ){
$(".email_colegio").focus().after("Ingrese su email correctamente");
return false;
}else if( $(".telefono_colegio").val() ==""){
$(".telefono_colegio").focus().after("Ingrese el telefono de contacto");
return false;
}else if( $(".total_alumnos").val() ==""){
$(".total_alumnos").focus().after("Ingrese el total de alumnos del colegio");
return false;
//datos validacion coordinador
}else if( $(".nombre_coordinador").val() ==""){
$(".nombre_coordinador").focus().after("Ingrese el nombre del coordinador");
return false;
}else if( $(".email_coordinador").val() =="" || !emailreg.test($(".email_coordinador").val()) ){
$(".email_coordinador").focus().after("Ingrese el email correctamente");
return false;
}else if( $(".cargo_coordinador").val() ==""){
$(".cargo_coordinador").focus().after("Ingrese el cargo del coordinador");
return false;
}else if( $(".telefono_coordinador").val() ==""){
$(".telefono_coordinador").focus().after("Ingrese el telefono de contacto");
return false;
}else if( $(".coment").val() ==""){
}
});
$(".nombre_colegio, .direccion_colegio, .telefono_colegio, .total_alumnos, .nombre_coordinador, .cargo_coordinador, .telefono_coordinador, .coment").keyup(function(){
if( $(this).val() !=""){
$(".error").fadeOut();
return false;
}
});
$(".email_colegio, .email_coordinador").keyup(function(){
if( $(this).val() !="" && emailreg.test($(this).val())){
$(".error").fadeOut();
return false;
}
});
$(".contacto").submit( function(){
var check = $("input[type='checkbox']:checked").length;
var radio = $("input[type='radio']:checked").length;
var select = $("comunas option:selected").val();
if(check == ""){
$('.error7').text("Seleccione al menos un nivel");
return false;
} else if(radio == ""){
$('.error2').text("Seleccione un radio button");
return false;
} else if(select == ""){
$('.error3').text("Seleccione una opcion");
return false;
} else {
$('.errors').hide();
alert('Ok!');
return true;
}
});
});
Con tantos campos, te haz fijado que los nombres coincidan en cada uno de las clases/nombres del formulario en HTML? viendolo asi rapido vi que pusiste «.coment», tal vez en el HTML sea «.comment»
Este es mi php del formulario:
Saludos, a todos en especial a Josue, que ha realizado un gran trabajo al compartir esta información.
Por favor alguien me podría explicar con detalles los pasos a seguir para integrar este formulario a una página html?
Gracias
Pero estimado , no es difícil incorpóralo a un html , copia el código de la demo y listo, el tema es que tendrás después que cambiar la extensión del archivo a php y listo.
Ahora como se hace eso?, terminas de hacerlo en html y despues que este listo lo guardo como php y no como html.
Hola, puedes hacer esto mismo con asp??? es que soy novato y no se si se puede XD, pero de poder hacerlo, por favor explícamelo, please
Por que usas asp, si es un código que tienes que pagar?.
es solo para aprender y ver si se puede hacer…
Hola Josué, cómo estás?. En principio gracias por tu trabajo. Es excelente. Sólo quisiera hacerte una consulta. Los mails que envío desde este formulario llegan a correo no deseado. Hay alguna forma de resolver este problema? Mil gracias!!.
Aun despues que hayas seteado los headers? lo mas probable es que sea un problema del SMTP de tu host que puede estar en el blacklist de ese cliente de correo.
Ola ..oye una pregunta .. este formulario no envia la informacion a la base de datos si no hay nada en el porque he echo otros que validan segun y pues envia datos aunque no haya nada dentro pero lo voy revisar ..
Si no hay nada no debería enviar, se ahorran recursos y se evita el spam 😉
Estupendisimo aporte me has ayudado un montón Josue, sólo necesito una ayuda más. Necesito incorporar un campo de teléfono en el que sólo se puedan incorporar números y no letras. No se como hacerlo y llevo toda la tarde volviéndome loca. Muchas gracias
Mira, justo he estado trabajando en un código para un nuevo tutorial sobre ese tema, ya lo tengo funcionando, puedes mirarlo aqui http://codepen.io/josueochoa/pen/ofaIs (la parte de JS)
Estaba trabajando en un ejemplo relacionado a eso, tal vez te sirva http://codepen.io/josueochoa/pen/ofaIs
Esta hecho en html pasado a php
Hola,
Tengo un formulario en mi pagina web que funcionaba perfectamente, sin embargo de una dia para otro ya no envio más los e-mail. yo no he tocado nada en los archivos. ¿Sabes que puede estar fallando?, como lo arreglo?
Gracias de antemano.
Estimado puede ser miles de cosas como por ejemplo:
Si tienes un servicio de hosting el correo que utilizas para la recepción de los correos puede estar lleno.
Problemas con servicio que has contratado.
etc, etc.
si no pones el código no te podríamos decir si el formulario esta malo.
Me llegan correos de otros e-mail, por lo que no creo que mi casilla este llena.
Intente escribir el codigo html de mi formulario, osea el codigo , pero no me fue posible ya que automaticamente lo borraba. Si hay otra forma de enviarlo, me dices.
Este es el codigo php:
<?
$your_email = "contacto@miweb.com";
$headers= "From: ".$_POST['nombre']." \r\n»;
$headers.=’Content-type: text/html; charset=utf-8′;
mail($your_email, $_POST[‘asunto’], »
Formulario de Contacto
Formulario de Contacto
Datos personales
Nombre : «.$_POST[‘nombre’].»
Rut : «.$_POST[‘rut’].»
Email : «.$_POST[‘email’].»
Telefono : «.$_POST[‘telefono’].»
Mas datos
Tipo de atencion: $valor «.$_POST[‘atencion’].»
Sucursal: $valor «.$_POST[‘sucursal’].»
Mensaje
Asunto : «.$_POST[‘asunto’].»
Mensaje : «.$_POST[‘mensaje’].»
» , $headers);
header(«Location: ./contacto2.html»);
?>
Es este formulario? dices que funcionaba y ahora no, haz mirado los error_logs?
Donde puedo checkear los error_logs?
Es un formulario que venia en una plantilla que descarge.
Funciono bien durante aprox. un año. Ahora al pinchar enviar en mi web funciona la pagina de comprobacion (como si hubiera enviado) pero no me llega nada al correo. Yo no he tocado nada en el codigo.
Sabes que puede ser?, te agradeceria un monton si me ayudas…
Hazlo con este formulario para poder ayudarte.
Los error_logs estan en el / de tu hosting, accede alli mediante FTP.
estos son los error_logs:
[13-Dec-2012 03:31:33 America/New_York] PHP Warning: Unknown: POST Content-Length of 337 bytes exceeds the limit of 105 bytes in Unknown on line 0
[19-Dec-2012 08:14:35 America/New_York] PHP Warning: Unknown: POST Content-Length of 221 bytes exceeds the limit of 105 bytes in Unknown on line 0
[20-Dec-2012 01:25:48 America/Santiago] PHP Parse error: syntax error, unexpected ‘]’ in /home/suterapi/public_html/suterapia.cl/boletin.php on line 7
[20-Dec-2012 01:58:14 America/Santiago] PHP Parse error: syntax error, unexpected ‘]’ in /home/suterapi/public_html/suterapia.cl/boletin.php on line 7
[20-Dec-2012 01:58:33 America/Santiago] PHP Parse error: syntax error, unexpected ‘]’ in /home/suterapi/public_html/suterapia.cl/boletin.php on line 7
Hola Josue.
Tu turorial es fantástico y muy bien explicado.
Muchas gracias por compartirlo con los que estamos empezando en este mundillo.
También me gusta mucho el diseño que habéis hecho de la página.
Tengo un reto que estoy intentando averiguar, a ver si me puedes echar una mano.
Observa este código:
function isEmail(str){
if(str == «») return false;
var regex = /^[^\s()@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
return regex.test(str);
}
Es para comprobar que se escribe bien la casilla del e-mail en el formulario.
Es muy parecido al que tienes en el documento funciones.js de tu formulario.
Yo entiendo que lo que dice var regex es una codificación de la variable para que compruebe si escriben letras o números y la @.
Aquí otro ejemplo:
function isZip(str){
var regex = /\d{5,}/;
if(regex.test(str)) return true;
return false;
}
Este es para pedir el código postal (ZIP en inglés) y donde pone var regex, parece que comprueba si escriben 5 carácteres.
Mi pregunta es la siguiente:
Según los ejemplos anteriores yo quiero poner una línea más en el formulario utilizando ese sistema.
Esa línea es esta:
– Pregunta de seguridad ¿2+3?
Mi duda es esta:
– Cuando el usuario rellene la casilla y ponga un 5 quisiera que el código comprobara que pone un 5 y si no lo hace que el formulario no continúe.
Sería algo así:
function isPregunta(str){
var regex = NO_SE_QUE_PONGO_AQUÍ
if(regex.test(str)) return true;
return false;
}
No sé cuál es el código para que compruebe que en la casilla del formulario la respuesta sea 5, y ningún otro número y ya que estamos que el usuario no ponga más de un carácter.
¿Tienes alguna idea de cómo puedo resolverlo?
Desde ya muchas gracias por tu ayuda. Eres una gran persona compartiendo tus conocimientos con los demás. Un gran saludo.
01 Gracias mil.
02 Goto 01
No habría necesidad de hacer regex, porque no es algo tan complicado de comprobar:
function isPregunta($str){
if($str == «5») return true;
return false;
}
Hola Josue, gracias por responder tan rápido.
Eres una máquina. Ya me ha funcionado con tu código.
Le he puesto una línea más al formulario que hace una simple pegunta ¿2+3? (como te he comentado antes) y así no pueden continuar si no rellenan la pregunta sencilla.
Creo que esto servirá para que no tenga SPAM el formulario. Es como un mini CAPTCHA.
He aprendido un montón de cosas con el post de este tutorial, sobre todo el apartado de formularios, que casi siempre son complicados.
Muchiiisimas gracias.
Hola Josue.
Perdona que te moleste otra vez, se me acaba de ocurrir la pregunta.
Problema:
Cuando recibo los correos de la gente que rellena el formulario, siempre me salen mal ciertos carácteres como las tildes, la ñ, etc (á, é, í, ñ, etc.) me salen tal que así: AquÖ , más. —> y tendría que ser así: Aquí , más.
Pregunta:
Supongo que es por la codificación del servidor pero ¿hay alguna forma de corregirlo mediante del código del formulario PHP?
Gracias por las respuestas.
Fíjate que estes poniendo este header:
$header .= ‘MIME-Version: 1.0’ . «\r\n» . ‘Content-type: text/plain; charset=UTF-8’ . «\r\n»;
Muchas gracias. Lo probaré.
Saludos.
Que tal Bro, excelente tu trabajo, e probabado este formulario pero me di cuenta que en Google Chromium se se deforma, pero lo probe en Firefox y su funca muy bien, como podria solucionar esto?
Saludos josue ochoa, lo felicito por su buen tutorial, explicado y avanzado. Su código php, css esta muy bien presentado.
hola Josue, excelente tutorial, de echo toda la web me gusto, tiene un chorro de temas muy interesantes, pero por ahora tengo un pequeño problema cuando envio un mail a un correo, en el momento en que se recibe, llega el corre correctamente solo en las cabeceras de informacion del contacto llega el nombre y seguido del correo pero el correo no es de la persona que lo envia
me sale algo asi: gerardo@srv12.main-hosting.eu
donde Gerardo es el nombre de la persona pero lo demás no corresponde
Haz puesto los headers?
$headers = «From: $nombre «;
ya me funciono, muchísimas gracias, lo que me faltaba eran los
Hola, e seguido todo el tutorial desde el inicio en html y continue con la validacion pero ahora cuando sigo los pasos me marca un error, alguien podria explicarme por que me marca este error:
Notice: Undefined variable: error1 inC:xampphtdocscomentarioindex.php on line 45
(esto pasa en todos los campos nombre, email, asunto, mensaje y tambien en el boton de enviar)
No es un error, es solo una notificación de que no haz definido la variable, lo que puedes hacer es definirlas como variables vacias o si prefieres mas facil pon la funcion error_reporting(0) al principio y no saldran.
Hola Josue. Estoy utilizando Wampserver y me sale esto Undefined
variable: errors in C:wampwwwcontactindex.php on line 47. como puedo
arreglarlo?. Excelente aporte!. Codigo, el estilo css esta perfecto. pero ayudame con ese error xfavor.
Define errors como un Array vacia al principio:
$errors = array();
Buenas tardes.
Después de muchas vueltas para crear un formulario he dado con este, y la verdad es que es genial, he conseguido poner el formulario en mi web, el formulario se envía correctamente, y todo está perfecto hasta ahí, solo que el e-mail que me llega no contiene la dirección que indico en el formulario, ni tampoco el nombre ¿a qué se puede deber?
El primer $header tiene la siguiente estructura?
$headers = «From: $nombre <$email>rn»;
Genial,
muchísimas gracias y enhorabuena por el trabajo bien hecho.
Estimado Josue:
Gracias por tus buenos tutos, estan bien explicado y bien detallados, queria pdir ayuda ya que estoy haciendo un formulario con un select option, mi problema es validar por php ese combo box, por lo cual te pido ayuda si se puede valdar por php ya que en jaba ya lo tengo solucionado.
Adjunto código:
if(isset($_POST[‘submit’])){
$errors = array(); //declaramos un array para almacenar los errores
if($_POST[‘nombre’] ==»){
$errors[1] =’Ingrese su nombre’;
}else if($_POST[‘email’] ==» or !preg_match(«/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/»,$_POST[‘email’])){
$errors[2] =’Ingrese su email correcto’;
}else if($_POST[‘empresa’] ==»){
$errors[3] =’Ingrese una empresa’;
}else if($_POST[‘telefono’] ==»){
$errors[4] =’Ingrese su telefono’;
//———————————————————>
}else if($_POST[‘conoce’] ==»){ //Esto quiero validad campo select
$errors =’Seleccione una opcion’;
//——————————————————>
}else if($_POST[‘comment’] ==»){
$errors[5] =’Ingrese su mensaje’;
}else {
//si todo esta ok envia email
Y el form select es:
———-
Por un buscador
Por un Blog
Por referencias
Otro
Gracias
A mi me funciona asi:
<?php
if(isset($_POST[‘submit’])){
if($_POST[‘conoce’] == »){
echo «Error»;
}
}
?>
<form action=»» method=»post»>
<select class=»conoce» id=»conoce» name=»conoce» onchange=»onSelectChange();»>
<option value=»» selected>———-</option>
<option value=»Buscador Web»>Por un buscador</option>
<option value=»Blog»>Por un Blog</option>
<option value=»Referencia»>Por referencias</option>
<option value=»Otros»>Otro</option>
</select>
<input type=»submit» name=»submit»>
</form>
hola Josue, tengo un problema, hasta el tutorial 2 me va todo perfecto, pero cuando acavo con el tutorial 3 cuando abro el php con el chrome me sale el codigo fuente y nada del formulario, gracias de antemano
Necesitas correrlo en un servidor que soporte PHP.
Hola antes que nada gran trabajo! esta genial. Tengo un problema al enviar a un servidor remoto, me visualiza correctamente, pero no me llega la info a la bandeja. Estoy usando un serv. gratutito Byethost para ser mas preciso, Tendra algo que ver la version del php? o no se cual seria el problema, me podes ayudar?
Que tal Josue, buen tutorial, me ha sido de gran ayuda. Lo implemente y funciona bien, pero necesito que se confirme el e-mail en un segundo campo. ¿me podrías ayudar para validar que la información sea igual en los dos campos?
Te dejo el enlace http://unitymx.com/contacto.php
Hola Josue, gracias me has salvado de una, excelente trabajo un abrazo
Hola Josue, gracias por compartir y explicar esta forma de enviar e-mails.
Me podrás ayudar, con este isue: necesitaria que en lugar de que imprima el mensaje «»»$result = ‘Email enviado correctamente ‘; «»»»
Se direccione a otra página.. desde ya muchas gracias por compartir tu conocimiento.
Saludos Gabriela. Bs As . Argentina.
Cambia esa linea por una re-dirección:
header(«Location: http://www.google.com«);
http://php.net/manual/es/function.header.php
Hola Josue, gracias por tu ayuda. Es un tutorial muy bien explicado.
El único problemilla que he visto es que si pongo el formulario abajo del todo en una página muy larga, al hacer clic para enviarlo, lo envía bien, pero se va automáticamente al top de la página. ¿Se puede hacer algo para que se quede en el formulario?
Lo que pasa al enviar el formulario es que «recarga» la pagina, lo que puedes hacer es cambiar el action del form para que direccione al id del contenedor donde esta el form cosa que cuando se recarga te lleva alli (form action=»/#contacto», algo asi seria), si eso te parece muy complicado, tal vez seria mejor que lo hagas con AJAX, checa este formulario https://tursos.com/como-hacer-un-formulario-de-contacto-ajax-con-php-y-jquery/
Muchas gracias Josue. Funciona perfectamente.
Hola, soy nueva en esto, y me gusto tu formulario solo que necesito agregar 3 campos mas (telefono, ciudad, estado este ultimo con opcion multiple) ya agregue los 2 primeros solo que no se como hacerle para que esta informacion tambien se envie.
Espero me puedas ayudar, de antemano muchas gracias.
Hola josue, como hago para agregar nuevos campos en el formulario ¿ que debo modificar en el .php para que me llegue todo como parte del mensaje?
Gracias excelente tutorial!
Tienes que replicar los campos del formulario en HTML, en PHP es en la parte donde se arma el mensaje, esta es una pregunta que ya la he respondido fijate en los comentarios anteriores (uno de los primeros).
Hola Josue, subi tu codigo a un host gratuito, el formulario me corre de maravilla, pero el mensaje no me llega
Probablemente mail() no esta activado, esto es debido a que los servidores gratuitos no lo activan porque la gente lo usaria para hacer spam.
Logre resolver el problema 🙂 ya corre excelente. pero ahora tengo un pequeñito detalle 😉
Noel Steven, como logro resolver su problema y que hosting gratuito utilizo
Saludos
Hola amigo, saludos, acudo a ti por la siguente razon: siendo tu experto en esta materia de php, y yo apenas un principiante, sera que puedes ayudarme con un mini programa que me mandaron a resolver??. dicho programa me pide: cedula,nombre, apellido, sexo, fecha nac, comentarios. donde cedula debe ser el primary key. o sea por la cedula es que voy a buscar a ese alumno registrado en la biblioteca. no se como comenzar. tendras algun programa de guia que me sirva??. gracias.espero respuesta urgente.
Quieres hacer un sistema CRUD (Create, Read, Update, Delete), sabes SQL o phpMyAdmin? existe una herramienta bastante útil para crear CRUDs con PHP de forma rapida (http://www.phpscaffold.com/), lo unico que le tienes que proporcionar es la estructura que quieres en formato SQL, puedes hacer la estructura de forma visual en algo como phpMyAdmin o MySQL-Front y luego exportar el SQL.
Josue hola, una pregunta, como haces para inserta un campo Pais: y que te cargue todos los paises. para poder seleccionar tu pais.
Esto te va a servir: http://vhcardenas.blogspot.com/2012/07/codigo-html-para-una-lista-desplegable.html
hola me podrias ayudar lo que pasa es que quiero hacer una busqueda de varios alumnos por su numero de control he irlos guardando en un arreglo pero sin recargar la pagina
hola!
oye tengo un problema con un formulario que hice en flash (as2) y php, antes corría de maravilla pero de unas semanas a la fecha los correos entran pero sin los textos que el usuario escribió en los campos, tienes alguna idea de qué pueda estar pasando?
funcionaba muy bien, será cuestión del servidor?
No uso Flash, pero puede ser por muchas razones, mira el log de errores de tu servidor.
hola josue tengo un problema, hize el formulario añadiendo unos campos pero por mas que modifico el cuerpo del mensaje no lo recibo completo solo recivo el «comment» aca te pongo mi codigo porfavor revisalo.
<?php
if(isset($_POST['send'])){
if($_POST['name'] == ''){
$errors[1] = 'Insert a name’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Insert a correct email’;
}else if($_POST[‘phone’] == »){
$errors[3] = ‘Insert a phone number’;
}else if($_POST[‘address’] == »){
$errors[4] = ‘Insert a address’;
}else if($_POST[‘city’] == »){
$errors[5] = ‘Insert a city’;
}else if($_POST[‘state’] == »){
$errors[6] = ‘Insert a state’;
}else if($_POST[‘zip’] == »){
$errors[7] = ‘Insert a zip’;
}else if($_POST[‘comment’] == »){
$errors[8] = ‘Insert a comment’;
}else{
$dest = » daniel.fs2@hotmail.com «; //Email de destino
$name = $_POST[‘name’];
$email = $_POST[‘email’];
$phone = $_POST[‘phone’];
$address = $_POST[‘address’];
$city = $_POST[‘city’];
$state = $_POST[‘state’];
$zip = $_POST[‘zip’];
$comment = $_POST[‘comment’]; //Cuerpo del mensaje
$cuerpo .= $_POST[‘phone’];
$cuerpo .= $_POST[‘address’];
$cuerpo .= $_POST[‘city’];
$cuerpo .= $_POST[‘state’];
$cuerpo .= $_POST[‘zip’];
//Cabeceras del correo
$headers = «From: $name rn»; //Quien envia?
$headers .= «X-Mailer: PHP5n»;
$headers .= ‘MIME-Version: 1.0’ . «n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «rn»; //
if(mail($dest,$name,$comment,$headers)){
$result = ‘mail was send correctly’;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘name’] = »;
$_POST[‘email’] = »;
$_POST[‘phone’] = »;
$_POST[‘address’] = »;
$_POST[‘city’] = »;
$_POST[‘state’] = »;
$_POST[‘zip’] = »;
$_POST[‘comment’] = »;
}else{
$result = ‘mail could not be sent’;
}
}
}
?>
Fíjate en donde esta mail(), no estas enviando $cuerpo; estas enviando $comment, y ademas en $cuerpo no estas añadiendo el valor de $comment, junta todo en $cuerpo y envia esa variable:
if(mail($dest,$name,$cuerpo,$headers)){
Hola Josue, me gustaría que me digas como separa los texto a la hora de que llegan al email, ya que llegan todos juntos, yo quiero que tengan un salto de linea para que se vean ordenados, por ejemplo: Mensaje en una linea, luego el teléfono… Tengo el siguiente código o que se envíen en html para enviarlo con una imagen y todo, si me puedes dejar un ejemplo con el código y todo por favor, desde ya muchas gracias por compartir tus conocimientos.
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘fono’] == »){
$errors[3] = ‘Ingrese Su Telefono’;
}else if($_POST[‘asunto’] == »){
$errors[4] = ‘Ingrese un Asunto’;
}else if($_POST[‘mensaje’] == »){
$errors[5] = ‘Ingrese un mensaje’;
}else{
$dest = «mosiah.troncoso@gmail.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$email = $_POST[‘email’];
$asunto = $_POST[‘asunto’];//Asunto
$cuerpo = «Formulario enviadon»;
$cuerpo .= «Mensaje:» . $_POST[«mensaje»] . «n»; //mensaje
$cuerpo .= «Telefono:» . $_POST[‘fono’] . «n»; //Telefono o Celular
//Cabeceras del correo
$headers = «From: $nombre rn»; //Quien envia?
$headers .= «X-Mailer: PHP5n»;
$headers .= ‘MIME-Version: 1.0’ . «n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «rn»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘fono’] = » ;
$_POST[‘asunto’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
Contacto
Tu Nombre:<input type='text' class='nombre' name='nombre' value='’>
Tu Email:<input type='text' class='email' name='email' value='’>
Tu Celular o Telefono:<input type='text' class='fono' name='fono' value='’>
Asunto:<input type='text' class='asunto' name='asunto' value='’>
Mensaje:
No te funciono con «n»? prueba con un «».
Hola Mosiah, como has solucionado la separación de texto?, Tengo el mismo problema y no logro resolverlo. Podrías compartir la solución si la haz encontrado?
Gracias!
Hola sabry_2802, la solución a eso es utilizar las siguientes cabeceras:
$headers = «From: $nombre rn»; //¿Quién envia?
$headers .= «X-Mailer: PHP/’ . phpversion()»; //Versión de PHP
$headers .= «MIME-Version: 1.0» . «n»;
$headers .= «Content-type: text/html;charset=UTF-8» . «rn»; // charset ISO-8859-1 (Latin) o UTF-8
Luego para separar el texto, tienes que utilizar este código por ejemplo:
$cuerpo .=»;
Saludos cordiales,
Mosiah.
Muchas gracias!!.. lo he logrado!
saludos!
Sabry
Cuando pongo el email en mi formulario, me dice que está incorrecto.. ¿Ayuda?
Buenas tardes estamos buscando una idea de como elaborar un correo electrónico en C si nos pueden ayudar aquí esta nuestro correo coteyyennyubv@yahoo.com.ve leinioropeza20@hotmail.com muchas gracias por la referencia.
josua buenas tardes el codigo de php me sale escrito en la parte de arriba de la pagina, a que se debe eso?
El archivo no esta en un servidor que soporte PHP.
No logro hacer que en el cuerpo del mensaje me queden los saltos de linea.
Me queda todo junto nombre, email, telefono, mensaje.
Además quiero agregarle a cada campo su respectivo nombre, quiero que me quede así:
Nombre: Juan
Email: juan@email.com
Pego el código a ver si alguien puede ayudarme.
Gracias de antemano.
<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''){
$errors[1] = 'Ingrese su nombre’;
}else if($_POST[‘email’] == » or !preg_match(«/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/»,$_POST[‘email’])){
$errors[2] = ‘Ingrese un email correcto’;
}else if($_POST[‘telefono’] == »){
$errors[3] = ‘Ingrese un telefono’;
}else if($_POST[‘mensaje’] == »){
$errors[4] = ‘Ingrese un mensaje’;
}else{
$dest = «email@correo.com»; //Email de destino
$nombre = $_POST[‘nombre’];
$asunto = «Contacto»;
$email = $_POST[‘email’];
$telefono = $_POST[‘telefono’].»rn»; //telefono
$cuerpo = $_POST[‘nombre’] .»rn»; //Cuerpo del mensaje
$cuerpo .= $_POST[‘email’].»rn»; //Cuerpo del mensaje
$cuerpo .= $_POST[‘telefono’].»rn»; //Cuerpo del mensaje
$cuerpo .= $_POST[‘mensaje’].»rn»; //Cuerpo del mensaje
//Cabeceras del correo
$headers = «From: $nombre rn»; //Quien envia?
$headers .= «X-Mailer: PHP5n»;
$headers .= ‘MIME-Version: 1.0’ . «n»;
$headers .= ‘Content-type: text/html; charset=iso-8859-1’ . «rn»; //
if(mail($dest,$asunto,$cuerpo,$headers)){
$result = ‘Email enviado correctamente ‘;
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST[‘nombre’] = »;
$_POST[‘email’] = »;
$_POST[‘telefono’] = »;
$_POST[‘mensaje’] = »;
}else{
$result = ‘Hubo un error al enviar el mensaje ‘;
}
}
}
?>
hola josue oye al momento de correr tu practica me marca este error «Warning: mail() [function.mail]: Failed to connect to mailserver at «localhost» port 25, verify your «SMTP» and «smtp_port» setting in php.ini or use ini_set() in C:AppServwwwenviarindex.php on line 23″ tengo instalado el appserv y descarge todos los modulos php de antemano muchas gracias
No te va a funcionar en un servidor local.
ok gracias, y esta buenisimo tu aporte te rifas
Hola josue instale el servidor SMTP postcast server, y efectivamente como me mencionaste ya logra arrastrar el correo de tu formulario pphp al servidor SMTP, pero al momento de querer enviarlo me rebota el correo, no se si podrias ayudarme, de antemano gracias
No tengo experiencia trabajando con un servidor SMTP local, te recomendaria que lo subas a un servidor web real.
gracias josue
Soy novato en este tipo de códigos y tus tutoriales son magníficos y muy bien explicados.
Tengo una duda, ¿entra en conflicto la validación con JQuery que realizaste en el anterior tutorial con la validación PHP de este?
¿Se pueden utilizar de manera conjunta sin problemas?
Muchísimas gracias
Son complementarias, la idea es que se usen juntas, para que el formulario este validado con o sin JavaScript activado.
Muchísimas gracias y enhorabuena por el saber hacer.
Hola amigo, quiero validar que en el campo nombre lo que se ingrese no sea numerico, he probado con esto y no me da:
if(preg_match(‘`[0-9]`’,$_POST[‘nombre’]))
Y tambien con esto
if(is_numeric($_POST[‘nombre’])
Con el is_numeric he probado con (int) o int val y nada, alguna ayuda? Gracias de antemano
hola Jhonny prueba crando un script con esta funcion»»»»»»» function sololetras(){
if(event.keyCode>45 && event.keyCode<58)event.returnValue=false;
}"""""" y en la etiqueta input del nombre mandala a llamar la funcion con el evento: onkeypress="sololetras()"
Hola!! He hecho todo tal y como indicas y cuando le doy a enviar en el formulario me dice que hubo un error al enviar el correo…Lo he subido a un servidor web gratuito que soporta php (Awardspace.com). Gracias y Saludos.
Es poco probable que un servidor gratuito te deje enviar mails.
Hola Josué, hice funcionar el formulario, pero cuando llega, llega con un mensaje de suplantación de identidad. cómo se puede solucionar eso?
saludos
A que te refieres con ‘suplantación de identidad’?
en la bandeja de entrada de gmail (cuando uno abre el mensaje) aparece un mensaje de advertencia ya que puede tratarse de una suplantación de identidad
Puede ser que tengas algun tipo de virus en tu servidor.
Hey Josue, buen tutorial funciona perfecto, pero, los correos me llegan por spam, hay alguna forma de corregir eso?
Eso del depende del SMTP de tu servidor, algunos clientes de correo los identifican como spam.
Hola, ya se que este post es antiguo… pero a mi me ha solucionado bastante. Muchas gracias por tu trabajo.
Tengo un problema. todo funcionaba correctamente gracias a tus indicaciones, pero cambié la dirección de correo electrónico y ahora no recibo ningún correo. Me dice que el mail ha sido enviado correctamente pero no llega nada.
He probado incluso copiando tu ejemplo tal cual y poniendo mi dirección de correo… y nada no recibo nada. ¿qué es lo que puede fallar?
La funcion mail() no esta funcionando en tu servidor, contacta a tu proveedor de hosting.
Hola, me sirvió mucho esto, pero ya cuando he terminado y introduzco los datos me aparece que introduzca una dirección de correo valida, intente con varias y ninguna me funciono, porque pasa esto? Gracias!
Hola, sabes he intentado buscar por cielo mar y tierra algún html para realizar un formulario, la verdad es que no se nada sobre esto y solita e ido aprendiendo porque me interesa. tengo lo siguiente para un formulario:
Solicitud
de Cotización:
Rellene el siguiente formulario de
cotización.
<form action="»
method=»post»>
Recuerde que todos los datos son importantes para poder
ponernos en contacto con usted.
Tus
datos Nombre:
E-mail:
Particular
Empresa
Empresa:
Rut Empresa:
Télefono:
Asunto:
Comentario:
Comienza a
escribir
*primero que nada debería de tener esto ordenado pero, no puedo jaja..
*me puedes tu ayudar con respecto si exite algún error.
*como puedo agregar mi dirección de correo para que se pueda enviar el mensaje
*necesito tener una respuesta que me diga que el mensaje ha sido enviado correctamente.
*He intentado con tus tutoriales pero no me valida como un html en la pagina que estoy creando.
De ante mano, Gracias.
Ayuda como puedo resolver este ejercicio soy nuevo en php y ni idea de como hacerlo
Desarrolle las siguientes funciones:
a. Es_Vocal, para determinar si un carácter es vocal ó consonante.
b. Es_Mayuscula, para determinar si un carácter es mayúscula ó no.
c. A_Minuscula, que a partir de un carácter c, devuelva el carácter en minúscula con tal de
que sea mayúscula. De lo contrario, debe devolver el mismo carácter c.
Estimado, como podría validar un SELECT?, que la persona
seleccione un valor… desde ya te agradecería. Me lo valida, pero no
puedo mostrar el mensaje!, saludos
Mira este tutorial: https://tursos.com/como-validar-checkboxes-radiobuttons-y-selects-con-jquery/
Hola Josue
Gracias por el tutoria, me funciona de maravilla pero hay un problemita, cuando refresca la pagina reenvia los datos nuevamente, ¿como puedo solucionar eso?
Hola, una preguntita. Si yo coloco esto: <input type='text' class='nombre' value='’>, para evitar que cada vez que se aprieta el boton me borre lo que el usuario ya cargó, cuando yo corro la pagina por primera vez a mi me sale un error: Notice: undefined index: nombre.
Ideas para corregirlo?
Solucionado, muchas gracias por el tuto!! 😀
Buenas, muy buen tutorial pero me podrias ayudar con un error, no se mucho de php, me sale primero SCREAM: Error suppression ignored for undefinied index: nombre y tb undefinied variable errors. tambien me sale lo mismo para los demas campos
intente insertar un recaptcha de google pero envia los mensajes aun cuando el captcha esta errado mi correo es javasi90@hotmail.com para ver como hacemos para que me ayudes con ese codigo
Jope, no entiendo nada. Si me lo descargo y lo hago correr bajo servidor local da los erorres del archivo adjunto. Sin embargo si lo publico va estupendamente. ¿y eso?, ¿es por la conexiona jquery???
Bajatelo de nuevo, he cambiado un detalle:
https://webtursos.s3.amazonaws.com/web/source/cf_php.zip
Hola, el mail que recibo osea no tiene de email de envio el e-mail del formulario (por esto no pasa nada), el asunto tampoco (así si que pasa), en el cuerpo del mensaje no pone nada aparte del mensaje, como hago para que se me vea lo otro?
Además, de errores de validación solo me detecta el primero que vea, osea si va buscando y ve que no hay el nombre, solo me dice que hay un error allí, además que ya me tiene borradas todos los otros datos del formulario, como lo arreglo?
Copio el mensaje por si alguien puede ayudarme:
<?php
if(isset($_POST[boton])){
$errors = array();
if($_POST["nom"] == ""){
$errors[1] = 'Per favor, indiqui el seu nom’;
}else if($_POST[«email»] == «» or !preg_match(«/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/»,$_POST[«email»])){
$errors[2] = ‘Per favor, indiqui un e-mail vàlid’;
}else if($_POST[«assumpte»] == «»){
$errors[3] = ‘Per favor, indiqui el motiu de la seva consulta’;
}else if($_POST[«missatge»] == «»){
$errors[4] = ‘Per favor, redacti un missatge’;
}else{
$dest = «info@yourmail.com»;
$nombre = $_POST[‘nom’];
$email = $_POST[‘email’];
$asunto = $_POST[‘assumpte’];
$cuerpo = $_POST[‘nom’];
$cuerpo = $_POST[‘email’];
$cuerpo = $_POST[‘tel’];
$cuerpo = $_POST[‘assumpte’];
$cuerpo = $_POST[‘missatge’];
$headers = «From: $nombre rn»;
$headers = «X-Mailer: PHP5n»;
$headers = «MIME-Version: 1.0» . «n»;
$headers = «Content-type: text/html; charset=iso-8859-1». «rn»;
if(mail($dest,$asunto,$cuerpo,$headers)){
$result=’E-mail enviat correctament. Gràcies per contactar amb nosaltres.’;
$_POST[‘nom’]=»;
$_POST[‘email’]=»;
$_POST[‘assumpte’]=»;
$_POST[‘missatge’]=»;
}else{
$result=»El missatge no s’ha pogut enviar»;}
}
}
?>
untitled
Home
Empresa
Serveis
Contacta
Contacta amb nosaltres
Nom i cognoms:<input type="text" value"» class=»nom» name=»nom»>
Correu electrònic:<input type="email" value"» class=»email» name=»email»>
Telèfon:
Assumpte:<input type="text" value"» class=»assumpte» name=»assumpte»>
Missatge:
Copyright 2014 Serveis – Avís legal – Política de cookies – Sitemap
HOME | EMPRESA | SERVEIS | CONTACTA
$(window).load(function() {
$(‘#slider’).nivoSlider();
});
Alguien me puede ayudar en la comparacion de la variable de javascript con mysql
Capturo y lo imprimo pero cuando comparo con mysql me genera error
Mi correo es
jluisremigio@gmail.con
Es para un trabajo de estudios
He realizado todos los pasos, el formulario funciona bien. Excepto al validar me borra todos los campos menos Tu nombre y no me aparece «El mensaje se envió correctamente». alguna sugerencia. Muchas gracias por la ayuda
I don’t even know how I finished up here, but I believed this post
used to be great. I don’t know who you might be however certainly you are going to a famous
blogger if you happen to are not already. Cheers!
Excelente Blog, me sirvío muchísimo este codigo php, muchas gracias.
Todo esta claro, gracias…..
Una pregunta que me asoma: Que ocurre si dos personas-usuarios en diferentes ubicaciones geograficas, llenan los datos del formulario(completamente verificado-validado), presional el boton de «SUBMIT» al mismo tiempo(exactamente); puede haber una mezcla de informacion en la recepcion(servidor)?. Hice una prueba, como respuesta el servidor mostro datos cruzados, por decir: los datos del ususario A se mezclaba con datos del usuario B…… hay alguna tecnica que pueda resolver este inconveniente?
Saudos.
Hola! encontre este formulario y me vino de maravilla, despues de configurarlo llega el correo perfecto solo hay un unico detalle y no se que hacer que el destinatario siempre es el mismo sh-210081638@us.hosting-webspace.io no toma ni el email ni el nombre de la persona.