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
Claudia dice
Gracias por el tutorial esta muy bueno, quisiera saber como agrego más etiquetas al formulario para poner colonia, ciudad, telefóno. Gracias
Josue Ochoa dice
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)
claudia fabiana lujan dice
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!!
Leo dice
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.
Josue Ochoa dice
https://github.com/vadikom/poshytip
claudia dice
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
claudia dice
Se me olvidaba también cambie el php y jquery como señalas. Saludos
Mateo dice
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 ‘;
}
}
}
?>
Josue Ochoa dice
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 :).
ninja dice
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!!!
Josue Ochoa dice
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']."
";
ninja dice
Gracias muchas!!!!! 🙂
matias dice
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.
Josue Ochoa dice
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.
matias dice
¡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 😉
felipe dice
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
Josue Ochoa dice
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:
Felipe dice
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…
Felipe dice
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
Josue Ochoa dice
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.
Oscar dice
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.
Josue Ochoa dice
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.
Oscar dice
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 🙁
Josue Ochoa dice
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
Oscar dice
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!!!
deigo dice
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
Josue Ochoa dice
Si, la función mail() no funcionara si no hay un servidor SMTP instalado.
Pep dice
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!
Josue Ochoa dice
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.
Pep dice
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.
Pep dice
Debe ser algo de la configuración de google apps, però no encuentro el que, tendrias alguna idea?
Gracias por contestar!
Josue Ochoa dice
Que hosting estas usando? te has fijado si te llega al Spam?
Pep dice
Utilizo Dinahosting, y no, no me llega al spam.. a ver si lo consigo resolver hoy. gracias
Ema dice
Hola…..Tengo Problemitas…me Toma error las comprovacion dentro del Form, y no me toma error en la Linea 31 con la «Mail»… 🙁
Josue dice
Que error es el que te sale exactamente? copialo acá para verlo.
Ema dice
Antes que Nada Funciona en un Server Local???
Ema dice
Como WampServer??
Ema dice
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
Josue dice
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.
david dice
amigo como puede agregar un archivo adjunto y que me llege tambien al mail??
saludos
Josue Ochoa dice
La función mail() no soporta archivos adjuntos, para eso te recomiendo usar el plugin PHPMailer
Saludos.
natalia dice
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
Josue Ochoa dice
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.
natalia dice
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 !
Josue Ochoa dice
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:
natalia dice
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 !
Josue Ochoa dice
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.
natalia dice
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 ….
Josue Ochoa dice
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.
german dice
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
Josue Ochoa dice
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.
german dice
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
Josue Ochoa dice
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'];
german dice
Hola! Muchas gracias!
Si que funciona de esta forma.
Un saludo:germán
natalia dice
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 ….
natalia dice
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!
Josue dice
Solo tendrías que mover la variable $result a donde quieras ponerla:
Por lo del captcha creo que este tutorial te puede servir.
Pedrog dice
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
Josue Ochoa dice
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 = '
';
}
Pedrog dice
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?Josue Ochoa dice
Exactamente y borrar también los value=»»
Pedrog dice
Muchas gracias
Juan HD dice
Increible tutorial! Enhorabuena… y además resuelves dudas… touché!
arturo dice
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
Josue Ochoa dice
Intenta implementar PIE, para que los efectos del CSS3 te funcionen en IE.
Fran dice
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:
Fran dice
perdon en pesto al principio generador queria poner navegador lo siento
Josue Ochoa dice
El archivo es .php? lo estas trabajando en editor HTML visual?
Pedrog dice
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.
Fran dice
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
Josue Ochoa dice
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.
Pedrog dice
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 😉
Josue Ochoa dice
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 ==
Fran dice
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
Pedrog dice
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
Victor dice
Hola, quisiera incluir el formulario que muestras, pero eh intentado y no llegan los mensajes, como puedo solucionar ese problema incluyendolo en mi web.
Josue Ochoa dice
Pon la dirección en donde lo estas probando.
Bereess dice
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.
Josue Ochoa dice
No te logro entender, quieres hacer un formulario que inserte un valor en una base de datos o algo por el estilo?
Gabriel Campos dice
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!
Arcadio Monroy dice
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.
Josue dice
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().
Arcadio Monroy dice
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.
Josue Ochoa dice
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');
jCarlos dice
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.
Josue Ochoa dice
Revisa el segundo tutorial de esta serie:
https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ii-validar-con-jquery
jCarlos dice
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.
Josue Ochoa dice
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
jCarlos dice
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.
Arcadio Monroy dice
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
Josue Ochoa dice
Contactar con servicio al cliente, el problema esta allí.
Arcadio Monroy dice
Ok, Josue gracias por tu ayuda, espero poder solucionarlo porque me gusta el tipo de formulario para colocarlo en mi web.
DA5H dice
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
Josue Ochoa dice
Hola, estoy haciendo un tutorial sobre ello, te aviso cuando lo publique!
DA5H dice
Gracias… Worale respondiste muy rapido… salu2… Sitio recomendado 😀
Josue Ochoa dice
https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
Claudia dice
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,
Josue Ochoa dice
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 = '
';
}
}
}
?>
Claudia dice
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,
Josue Ochoa dice
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;
}
});
});
Claudia dice
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,
Josue Ochoa dice
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.
Juan dice
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 🙁
Josue Ochoa dice
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
Juan dice
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="» >
Juan dice
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 !!!
Josue Ochoa dice
Cierto, lo que puedes hacer es incluir una etiqueta noscript para cuando el usuario no tenga JavaScript habilitado, algo como:
albert dice
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??
Josue Ochoa dice
Efectivamente, en la variable $dest agregas los dos.
albert dice
perfecto!! solo queria estar seguro! muchisimas gracias me fue de gran ayuda!!
Jose Luis dice
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!
Josue Ochoa dice
No esta funcionando el jQuery en tu pagina, intenta ver si lo estas llamando.
Jose Luis dice
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
Jose Luis dice
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.
Daniel dice
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.
Josue Ochoa dice
Si, mira este tutorial te puede servir https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
Daniel dice
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
Josue Ochoa dice
Este te puede servir:
https://tursos.com/tutoriales/php/como-hacer-un-sistema-captcha-con-php
Cesar dice
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?
Josue dice
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?
Cesar dice
Ahora el IE8, … ¿sera este el problema?
Cesar dice
Ahora que lo estoy probando en IE9 igual sucede, … entonces al parecer no es el navegador, … ¿que puede ser?
paula dice
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.
Josue Ochoa dice
No va a funcionar en un servidor local, a menos que tengas un SMTP instalado, que te permita enviar correos desde tu servidor local.
paula dice
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
Josue Ochoa dice
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.
Cesar dice
¿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.
Josue Ochoa dice
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.
Cesar dice
Si las imagenes a un directorio y el nombre a la base de datos, …
Omar de Jesús Aquino (@omaraqui2000) dice
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¡
Josue Ochoa dice
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 🙂
Manuel Urkullu dice
Hola,
Muy interesante tu post, el enlace a codigo.zip no va 🙁
Le puedes volver a subir?
Gracias
Josue Ochoa dice
Estas seguro? a mi me anda perfectamente
https://tursos.com/demo/cf/php/codigofuente.zip
intenta darle clic derecho «Guardar enlace como..»
Ernesto dice
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.
Josue Ochoa dice
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
Carlos Luna dice
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!
Josue Ochoa dice
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.
Ernesto dice
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.
MaestroSombrita dice
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!!!
Carlos Luna dice
En el $headers = «From: $nombre $email\r\n»; estas usando $email y debe ir $emailFormulario inténtalo con eso, saludos…
MaestroSombrita dice
Desgraciadamente sigo sin encontrarle solución al problema. ¿Donde puede estar el error para que no se envié el correo?
MaestroSombrita dice
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!!!
Josue Ochoa dice
La variable $emailDestino esta con info@xxx.com? te has fijado si llega a SPAM?
MaestroSombrita dice
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 !!!
Jose Luis dice
Muchísimas gracias josue
Leon dice
Hola solo felicitarle por su formulario.
cristian parada dice
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
Josue Ochoa dice
Te envie un correo, por favor trata que tus comentarios se centren en el tema del articulo, gracias.
cristian parada dice
ok gracias te lo agradesco
MaestroSombrita dice
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!!!
franinger dice
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?
jose dice
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!!!!!!!!
Josue Ochoa dice
Es una etiqueta div que esta mal cerrada y el contenido se esta comiendo al sidebar.
Denise dice
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!!
Josue Ochoa dice
Hola, no copies todo el codigo, obvia la parte del * y el body en el css, tal vez se arregle.
oscar dice
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
Josue Ochoa dice
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.
Ernesto dice
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
Josue Ochoa dice
Mientras el servidor soporte PHP, puedes instalarlo en cualquier S. O.
Ernesto dice
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
adolfo dice
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
Josue Ochoa dice
No puedes descargar el archivo? prueba con este enlace https://tursos.com/demo/cf/php/codigofuente.zip
Ottoniel Santos dice
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)
Carlos dice
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:
Carlos dice
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:
xcion dice
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
xcion dice
No me hagas caso… no estaba poniendo correctamente la variable a resetear
MaestroSombrita dice
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
pablo dice
Sin palabras Josué, sos un genio!, está perfecto.
Jessica dice
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!!!!
Jessica dice
http://redartistica.comze.com/php/inscripcion/ <– me olvide de poner el enlace.
🙂 gracias
Juan Pablo dice
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 ‘;
}
}
}
?>
Josue Ochoa dice
Quieres que el nombre, email, asunto te llege CON el mensaje?
Juan Pablo dice
Sí, que lleguen todos los campos, pues, en el mensaje.
Josue Ochoa dice
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
Juan Pablo dice
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 ‘;
}
}
}
?>
Josue Ochoa dice
Parece que si, pruebalo.
Juan Pablo dice
Funcionó! muchísimas gracias! =)
Denise dice
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.!
Denise dice
Never mind… segui leyendo y vi que había que hacerlo en el servidor.
Y magic.. works!!!
Muchas gracias!
Max dice
Hola Josué,
¿Puedo usar este formulario con localhost xampp en una página de Facebook?
Un saludo.
Josue Ochoa dice
No.
Ernesto dice
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
carlos dice
Hola Josue, disculpa hermano, podrías ayudarme con la preguntas que te hice? Gracias
Josue Ochoa dice
En que te puedo ayudar?
Dr.Studbaker dice
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.
Josue Ochoa dice
Puedes hacerlo con header() de PHP.
https://tursos.com/tutoriales/otros/4-maneras-de-redireccionar-una-pagina-web
Dr.Studbaker dice
Gracias Por la respuesta…
Saludos…
alfonso dice
hola, contigo se aprende de verdad, encantado de conocerte, saludos
Jesus Salvador dice
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.
Marc dice
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.
clancho7 dice
MUCHAS GRACIAS ME SIRBIO MUCHO! SALUDOS!
Steven dice
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 🙂
Josue Ochoa dice
Usa WordPress, este blog esta basado en WP.
Oscar Hernandez. dice
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
Josue dice
Hola, tal vez el metodo Javascript de este tutorial te sirva.
Oscar Hernandez. dice
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
laura dice
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
iltse dice
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
Josue Ochoa dice
Tal vez este tutorial te sirva https://tursos.com/tutoriales/php/como-hacer-un-sistema-de-login-de-usuarios-en-php-con-mysql
David dice
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
Josue Ochoa dice
Crea un tema en la comunidad, allí podemos ayudarte 🙂
javier dice
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
javier dice
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
Josue Ochoa dice
Estas seguro si xtreemhost.com soporta mail()?
javier dice
Creo que si….tu puedes recomendarme alguno gratis para poder probar mi web y este formulario de contacto?? te lo agradecería…
Eric dice
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! =)
Josue Ochoa dice
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
Marco Antonio dice
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.
Josue Ochoa dice
Claro, solo agrega el campo correspondiente (select) y reemplaza los nombres y variables que hay que reemplazar.
Marco Antonio dice
Soy nuevo en esto y no se por donde empezar, me gustaría que me ayudaras en eso si no es tanta molestia 😀
AlejandroEspitia dice
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?
DANIEL dice
se puede utilizar para indexhibit
florencia dice
Grande! Gracias.
Miguel dice
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!!
gabriela dice
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!)
gabriela dice
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!)
rafael dice
muchas gracias men realmente me ayudo
Carlos dice
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
Josue Ochoa dice
No te entendi muy bien, explicate.
pablo dice
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.
Josue Ochoa dice
Fijate este tutorial https://tursos.com/tutoriales/javascript/como-hacer-un-formulario-de-contacto-ajax-con-php-y-jquery
Yadira dice
Y si en vez de mandarlo por correo electronico quiero que el boton me redireccione a otro form como seria??
Josue Ochoa dice
Incluye uno de estos codigos en la parte final, lo mejor seria usar el metodo PHP o Javascript.
roger dice
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 ?
Josue Ochoa dice
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());
Nata dice
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.
Enrique dice
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.
Josue Ochoa dice
Pues si lees el error te esta diciendo que haz puesto algo incorrecto despues de la direccion, revisa tu codigo.
Enrique dice
Muchísimas gracias Josue pude resolver el problema.
Nata dice
¡Ay no! Olvídalo. Solucioné el error.
Omite mi mensaje anterior!
¡Muchas gracias por tutoriales :)!
Rodrigo dice
Muy buen tutorial. Me sirvio del todo, ni una falla, y eso que no entiendo mucho
Muchas gracias
nexuxirc dice
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
Josue Ochoa dice
Al parecer el error esta en la parte de JS, haz mirado la Consola? te sale algo?
Manuel dice
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
Josue Ochoa dice
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.
Manuel dice
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.
Manuel dice
Ah tambien me gustaria saber como haga para evitar que los mensajes me lleguen al junk por que no llegan al inbox
Gonzalo dice
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!
Sergio dice
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. =)
Josue Ochoa dice
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.
Salvador Cabral dice
Excelente Tutorial , excelente codigo , solo le hice una modificacion al codigo , le agregue un capcha para evitar robots manden correos masivos
Kerly dice
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
Kerly dice
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
Josue Ochoa dice
Mira este tutorial
https://tursos.com/tutoriales/php/como-hacer-un-sistema-de-registro-de-usuarios-en-php-con-mysql
Espero te sirva.
helen dice
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!
Josue Ochoa dice
Si, solo tienes que cambiar el valor de la variable $asunto:
$asunto = «Consulta Web»;
tere dice
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!
tere dice
jurl… perdón! se ha comido los codes… 🙂
el caso es q cierra con un «» cuando debería ser un «»
Josue Ochoa dice
Voy a revisarlo, gracias por notarlo.
Erika dice
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….
Josue Ochoa dice
Tal vez ese div tenga algun estilo CSS que hace que el formulario no se muestre.
Javier dice
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
Josue Ochoa dice
Hola Javier, me alegra que te haya servido, gracias por comentar.
_EpY_ dice
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
_EpY_ dice
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
_EpY_ dice
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
_EpY_ dice
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/
Josue Ochoa dice
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.
_EpY_ dice
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.
_EpY_ dice
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
_EpY_ dice
perdon por esto ultimo ya me he autocontestado a las 2 ultimas preguntas, puedes borrar esto ultimo 😀
Un saludo.
Joan dice
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.
Josue Ochoa dice
ah, es algo de las arrays pon esto antes del codigo dentro de las etiquetas PHP, error_reporting(0);
Mariano dice
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.
Josue Ochoa dice
Mmm, algo raro, la verdad que no manejo Flash, solo haz probado con esos 2 navegadores? intenta con firefox/safari/opera.
Joan dice
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.
Josue Ochoa dice
Haz una prueba simple de mail(), crea un archivo php y pon:
mail(‘tucorreo@gmail.com’, ‘Mi título’, «Test»);
Elena dice
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?
Josue Ochoa dice
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.
Carlos dice
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;
}
});
});
Josue Ochoa dice
y el HTML? revisa que las clases concuerden en el HTML y en el JS
Gabrielle Little dice
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 :).
Gabrielle Little dice
es para una materia que me lo pidieron en el instituto
Gabrielle Little dice
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
Edwin dice
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
Josue Ochoa dice
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>
Edwin dice
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
omar dice
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
Josue Ochoa dice
Pasame el link donde lo estas probando, esta raro eso.
juanse dice
Muchas gracias, funcionó muy bien!
omar dice
http://www.utparral.edu.mx/Contacto/Contacto.php
omar dice
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.
Josue dice
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.
Edwin dice
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='’ />
Josue dice
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.
John dice
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
Josue dice
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.
John dice
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…
Josue dice
Hiciste la prueba y no funciono?
Si te dicen que si soporta la funcion, no necesita ser activada deberia venir asi ya por defecto.
John dice
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..
Josue dice
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.
John dice
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
oscar dice
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
Josue dice
Hola Oscar, es una buena idea, voy a trabajar en ello, es bastante sencillo hacerlo.
oscar dice
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
Cornelio Sila dice
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…
Josue Ochoa dice
Tienes que cambiar la extension.
marko dice
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
Josue Ochoa dice
No te entendi, si quieres cambiar eso lo haces simplemente por CSS
marilen dice
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
marilen dice
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
Josue Ochoa dice
Pon error_reporting(0);
janet dice
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
Josue Ochoa dice
Utiliza el atributo de HTML5 «placeholder’:
janet dice
ok muchas gracias
Gustavo dice
Josue tenes idea porque me llegan así los mensajes? (mas arriba postie)
Josue Ochoa dice
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.
Gustavo dice
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)
Josue Ochoa dice
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/
Gustavo dice
haha entiendo, deberé comunicarme con ellos entonces. Y lo del mensaje alguna idea?
Josue Ochoa dice
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?
Gustavo dice
contrate elserver.com
Cesar dice
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
Josue Ochoa dice
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.
Gustavo dice
el server.com
Josep dice
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
Josue Ochoa dice
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.
Natalie dice
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 🙂
Josue Ochoa dice
Hola Nataliem mira por lo que he leido donde pones el BBC deberias poner una direccion de correo, no un nombre.
Natalie dice
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 🙂
Natalie dice
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 🙂
Josue Ochoa dice
Intenta usar PHPMailer, creo que maneja mejor ese asunto de los correos ocultos, en este tutorial se explica claramente.
Natalie dice
ok muchas gracias lo voy a revisar 🙂
saludos
María Jose dice
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
Josue Ochoa dice
Pon error_reporting(0) antes.
omar dice
Muchas gracias, me imagine que era por ese lado, saludos!
Cornelio Sila dice
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……
Cornelio Sila dice
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….
Cornelio Sila dice
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….
Josue Ochoa dice
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”);
Cesar dice
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
Josue Ochoa dice
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.
Laura dice
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¡¡¡
Josue Ochoa dice
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.
david dice
Esta exelente, haces mejoras de pagina?
Yo soy de Chile.
Saludos David
Josue Ochoa dice
Contactame por aqui.
Laura dice
Ya está arreglado, Muchas gracias Josue ¡¡¡¡¡¡
Cornelio Sila dice
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……
Josue Ochoa dice
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.
Pedrog dice
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
Cesar dice
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
Pedrog dice
Perdón que no leí el post completo :). Josue Ochoa te responde con esa clase que es phpmailer…
Manuel dice
Wow excelente tutorial, el mas completo que he encontrado sobre esto, me encantó felicidades.
Claudia dice
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,
gonxo dice
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
gonxo dice
logicamente en el codigo yo ponga mi usuario y mi contraseña en el php ?
Josue Ochoa dice
Puedes hacerlo con PHP:
elder dice
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
Josue Ochoa dice
«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.
Pablo Ac dice
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.
freddy dice
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
Alejandro dice
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.
elder dice
gracias Josue tenias razón
Rivao dice
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
Josue Ochoa dice
Osea quieres que se registre siempre con el mismo usuario?
Rivao dice
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
Josue Ochoa dice
Ah, para eso tendrias que hacer algo mas complicado con SQL, tal vez esto te sirva.
Carlos dice
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
Josue Ochoa dice
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.
luis dice
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
Josue Ochoa dice
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" ;
xavier04 dice
¡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
Josue dice
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 🙂
Victor dice
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;
}
});
});
Josue Ochoa dice
Tienes que cambiar la extension de tu archivo, esta en HTML, esto es PHP, tendrias que ponerlo http://www.autoarpa.com/contacto.php
Victor dice
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
freddy dice
muchas gracias por este gran tuto, pero me gustaría saber como agrego una lista, ya que mi formulario agregara referencias de productos?
teka dice
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!!
Josue Ochoa dice
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 🙂
Cornelio Sila dice
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…
Cornelio Sila dice
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…
Josue Ochoa dice
El fondo es una imagen? tal vez tu estructura de archivos es asi:
index.html
css/estilo.css
imagenes/fondo.jpg
Cornelio Sila dice
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…..
vennenno dice
Que bueno fué encontrar este tuto, gracias por compartir.
Joaquin dice
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
Joaquin dice
OLVIDA MI MENSAJE ANTERIOR…YA LO LOGRÉ….EN DEFINITIVA TU FORMULARIO ES MUY BUENO…FELICIDADES
Peter dice
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
Josue Ochoa dice
Linea 32
Pablo dice
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.
Josue Ochoa dice
No hagas caso a esa carpeta, es algo que genera el sistema operativo.
pedro dice
Una pregunta por qué el formulario en la propiedad action está vacía???? no debería de tener alguna llamada a PHP???
Josue Ochoa dice
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:
Anadela dice
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.
Josue Ochoa dice
Haz probado con un iframe que llame a una pagina aislada donde este el formulario de contacto? para evitar conflictos.
David dice
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.
carlos dice
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
Josue Ochoa dice
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.
virginia dice
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
Josue Ochoa dice
Este formulario esta validado si el usuario le da al boton sin haber rellenado le va a salir error.
jose Carlos dice
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.
Juan Ignacio dice
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
Victor dice
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
Josue Ochoa dice
Necesitas hacer algun tipo de validacion de checkboxes o radios?
https://tursos.com/tutoriales/javascript/como-validar-checkboxes-radiobuttons-y-selects-con-jquery
calvete dice
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.
Hugo dice
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
Liliana dice
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
Jaime dice
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.
Josue Ochoa dice
Para negrita puedes usar <bold> o <strong>, para color creo que puedes usar <font color=»red»>Rojo</font>
Liliana dice
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.
Josue Ochoa dice
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);
}
Liliana dice
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)?
Josue Ochoa dice
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.
Jaime dice
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.
Jaime dice
Esto fue lo que me salio.
<code lang="Nombre: Antonio»>
Es para formulario PHP.
Muchas gracias.
Josue Ochoa dice
no se vio el código que pusiste, en que cliente de correo lo haz probado?
Jaime dice
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.
Josue Ochoa dice
Te preguntaba por el cliente de correo (gmail, hotmail, etc).
Jaime dice
Es gmail.
Josue Ochoa dice
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.
Javier dice
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???.
Josue Ochoa dice
Si, necesitas un servidor ‘real’.
Martin dice
Josue , Si quiero enviar el mail por smtp, utilizando phpmail, que debería modificar? e intentado de varias maneras pero no encuentro la manera.
Josue Ochoa dice
Quitar la condicion if(mail(….)) y ponerle lo de PHPMailer:
require(«class.phpmailer.php»);
$mail = new PHPMailer();
julio dice
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
Pedrog dice
Debes poner el código para verlo.
Hugo dice
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
Josue Ochoa dice
Es por el servidor, sin embargo con PHPMailer puedes solucionarlo.
Hugo dice
Perdome Josue, pero estoy un poco verde en esto, podrias darme alguna pista… muchisimas gracias.
Alejandra dice
Hola Josue, tu post es muy bueno, e interesante… es mucho mas claro q otros q he visto.. saludos
_EpY_ dice
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
rolo16 dice
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.
Josue Ochoa dice
Si tu archivo es .html no va a funcionar, cambialo a .php y pruebalo.
_EpY_ dice
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
Josue Ochoa dice
Añade un select en el formulario:
Y luego en PHP cambias:
$dest = $_POST['destino'];
rolo16 dice
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.
Josue Ochoa dice
Pues que raro, corre la siguiente prueba y si no envia es problema de tu servidor:
mail('tuemail@gmail.com', 'Asunto', 'Mensaje Prueba');
javier dice
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..
Josue Ochoa dice
Pues eso quiere decir que envio, explicate.
Reinaldo dice
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.
Josue Ochoa dice
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:
Reinaldo dice
Gracias Josue
Voy a usar el plugin.
rolo16 dice
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
Matías dice
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!
Josue Ochoa dice
Pon error_reporting(0); apenas abres el
rolo16 dice
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.
Josue Ochoa dice
Crea un nuevo archivo .php, pones ese código (cambias el correo), lo subes y luego lo ejecutas, accediendo a esa URL.
rolo16 dice
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.
Josue Ochoa dice
Pues es un problema de tu servidor al parecer, contacta con soporte tecnico.
rolo16 dice
Ok gracias
Carlos dice
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.
Josue Ochoa dice
Recuerda que si usas un servidor local como AppServ no va a funcionar la función mail().
Matías dice
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
Josue Ochoa dice
No te va a funcionar, mail() no funciona en un servidor local.
Matías dice
Ok Josue, gracias por todo muy buenos los tutoriales!!
rolo16 dice
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.
Josue Ochoa dice
Lamento que luego de tantos intentos aun no lo logres, esta puede ser una solucion 🙂
rolo16 dice
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
Josue Ochoa dice
Mail va en una condicion en la linea 31.
rolo16 dice
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.
Josue Ochoa dice
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");
rolo16 dice
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.
Josue Ochoa dice
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.
Gastón dice
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.
Josue Ochoa dice
Ya probaste hacer una prueba simple de mail()?
mail('tuemail@hotmail.com', 'Asunto', 'Mensaje Prueba');
Rocio dice
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.
Josue Ochoa dice
Ya tienes un formulario hecho y solo quieres la parte de validacion?
Gregori dice
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
Josue Ochoa dice
No soy experimentado en esos temas, pero googleando encontre esto
Gregori dice
Logré hacer que funcionara con la liga que me recomendaste, Me costo un poco de trabajo, pero valió la pena
Mil gracias
David dice