Formulario de contacto; email remitente del usuario y validar campos
Hace unos meses atras publique un articulo sobre la creación de un formulario de contacto para nuestras webs, este formulario es muy sencillo, pero a su vez muy funcional...
Autor y Creditos: Maverick
Hace unos meses atras publique un articulo sobre la creación de un formulario de contacto para nuestras webs, este formulario es muy sencillo, pero a su vez muy funcional... ya que cumple su cometido, recojer las opiniones, sugerencias, peticiones de los usuarios que visitan nuestra web..
Recibi unos correos donde me preguntaban como podian hacer para que el formulario pueda validar los capos vacios, es decir que el usuario no pudiera dejar campos vacios y tambien que al momento de llegan el form a nuestro correo, pudiera llegar con el email del emisor (usuario) pues aqui les tengo un nuevo formulario.
Caracteristicas de este nuevo formulario.
1.- El formulario llega con el email del remitente, lo que antes no ocurría, antes solia cojer como remiten el nombre del hosting donde esta alojado nuestra web. ejemplo: usuario@paquetehost.nombredelhosting.com
2.- Valida campos vacios, es decir... el formulario no se envia si el usuario no ha completado todos los campos requeridos.
3.- Ademas de eso recoje información adicional, como la fecha en que se envio el formulario, la dirección IP del usuario, que navegador usa, Sistema operativo y por ultimo todo estos datos al momento de enviarse se imprimen en un página aparte para que el usuario los pueda ver
Bien ahora empezemos, solo será copiar y pegar como el primer formulario y más abajo explicaremos algunos detalles de nuestro formulario. Tambien les dejo un video de como copiar los archivos correctamente, aun que no creo pudieran tener problemas ahi, pero no está de más tener una guia del tutorial.
Empecemos viendo el Video tutorial.
Clic en la Imagen para ver el Video Tutorial

Lo primero que haremos es crear un archivo PHP y lo llamaremos formulario.php y copiaremos el código que se muestra abajo
formulario.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario</title>
</head>
<body>
<form method="post" action="enviar.php">
<!-- No cambiar estas variables! -->
<?php
$ipi = getenv("REMOTE_ADDR");
$httprefi = getenv ("HTTP_REFERER");
$httpagenti = getenv ("HTTP_USER_AGENT");
?>
<input type="hidden" name="ip" value="<?php echo $ipi ?>" />
<input type="hidden" name="httpref" value="<?php echo $httprefi ?>" />
<input type="hidden" name="httpagent" value="<?php echo $httpagenti ?>" />
Nombres: <br />
<input type="text" name="visitor" size="35" />
<br />
E-mail:<br />
<input type="text" name="visitormail" size="35" />
<br /> <br />
Departamento:<br />
<select name="attn" size="1">
<option value=" Facturacion ">Facturacion</option>
<option value=" Soporte General ">Soporte General </option>
<option value=" Soporte Tecnico ">Soporte Tecnico </option>
<option value=" Webmaster ">Webmaster </option>
</select>
<br /><br />
Mensaje:
<br />
<textarea name="notes" rows="4" cols="40"></textarea>
<br />
<input type="submit" value="Enviar Formulario" />
<br />
</form>
</body>
</html>
Las variables "name"=" " se encargan de recojer los datos que indtroducimos al rellenar nuestro formulario.
Nuestro formulario tiene los siguientes campos: Nombres=(visitor), E-mail=(visitormail), Departamento=(attn) y Mensaje=(notes). Ahora como es que nuestro formulario recoje los datos adicionales como: la dirección IP, tipo de navegador que usa, OS, y el link de donde proviene nuestro form. Si se fijan donde dice <!-- No cambiar estas variables! --> ahi le estamos diciendo a PHP que la variable $ipi = "REMOTE_ADDR" que nos devuelve la IP y mas abajo estamos imprimiendo esa IP name="ip" value="<?php echo $ipi ?> y es asi como internamente recojermos esos datos, y asi sucede con las dos variables subsiguientes..., espero haber sido claro hasta este punto.
Ahora creamos otro documento y lo llamaremos enviar.php y copiaremos el código que se muestra abajo..
enviar.php
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario de envio Script</title>
</head>
<body>
<!-- Recuerde: Agregue un link en donde dice 'Index' (en el boton) -->
<!-- Recuerde: Cambie donde dice 'TuEmail' al email tuyo -->
<?php
$ip = $_POST['ip'];
$httpref = $_POST['httpref'];
$httpagent = $_POST['httpagent'];
$visitor = $_POST['visitor'];
$visitormail = $_POST['visitormail'];
$notes = $_POST['notes'];
$attn = $_POST['attn'];
if (eregi('http:', $notes)) {
die ("Do NOT try that! ! ");
}
// Punto 1, Valida email
if(!$visitormail == "" && (!strstr($visitormail,"@") || !strstr($visitormail,".")))
{
echo "<h2>Regrese - Ingrese un E-mail valido</h2>\n";
$badinput = "<h2>Su comentario no fue enviado</h2>\n";
echo $badinput;
die ("Regrese a completar los datos! ! ");
}
// Punto 2, Valida el nombre, email y mensaje, los campos no tienen que estar vacios.
if(empty($visitor) || empty($visitormail) || empty($notes )) {
echo "<h2>Regrese - Rellene todos los campos</h2>\n";
die ("Regrese a completar los datos! ! ");
}
$todayis = date("l, F j, Y, g:i a") ;
$attn = $attn ;
$subject = $attn;
$notes = stripcslashes($notes);
$message = " $todayis [EST] \n
Atencion: $attn \n
Mensaje: $notes \n
From: $visitor ($visitormail)\n
Informacion adicional : IP = $ip \n
Navegador usado: $httpagent \n
Referido de : $httpref \n
";
$from = "From: $visitormail\r\n";
mail("TuEmail@dominio.com", $subject, $message, $from); // Punto 3 cambiar por tu email.
?>
// Punto 4 imprime los datos introducidos
<p align="center">
Fecha: <?php echo $todayis ?>
<br />
Gracias : <?php echo $visitor ?> ( <?php echo $visitormail ?> )
<br />
Atencion: <?php echo $attn ?>
<br />
Mensaje:<br />
<?php $notesout = str_replace("\r", "<br/>", $notes);
echo $notesout; ?>
<br />
<?php echo $ip ?>
<br /><br />
<a href="index.php"> Index </a>
</p>
</body>
</html>
Bien aqui solo explicaremos los puntos claves. una vez que recojio todos los datos enviar.php lo primero que hace verificar que esten correctos, es decir que ningun campo este vacio y tenga un email válido.
// Punto 1 Valida email; Es un string que valida el email, pidiendo que ingreses el dato correcto no puedes poner cualquier cosa como correo "blabla" si no un email válido (tucorreo@dominio.com) solo asi te aceptara, y si no fuece asi te imprimirá un mensaje diciendo que ingreses un email válido.
// Punto 2,: este string pide que los campos nombre, e-mail y mensaje no esten vacios, caso contrario te imprime un mensaje donde te pide que rellene los campos.
// Punto 3,: Aqui debes de cambiar ese email que puse por uno tuyo.
// Punto 4: Esta sección del formulario se imprime todos los datos, una vez enviado, imprime la hora, nombre, correo, mensaje y la dirección IP.
<a href="index.php"> Index </a> : una vez impreso los datos más abajo te sale un pequeño vinculo el cual puedes cambiar para que los envie a la pagina principal de nuestra web



del.icio.us
Digg
Comentarios (77 Publicado):
Gracias por responder, por motivo de que estoy aprendiendo, no deseo por el momento complicarme tanto, otra consulta, subo mi pagina, que realice en dreamweare,todo lo que hice resulto muy bien, lo que no resulto de total de mi agrado fue que todas las imagenes que coloque en mi pagina no se mostraron, en todas salia el recuadro con la crucesita roja, por favor ayuda con este tema y poder segir aprendiendo.
Muchas gracias.
En sendmail_from=, coloca una direccion de correo valida en ese servidor, ejemplo: si tienes una cuenta de correo alli, coloca esa cuenta (yo@servidor)
lo más sencillo sería que busques una cuenta de hosting gratuita que te ahorramucho tiempo
Hola, tengo el mismo problema que varios, cuando envio el formulario completo me da error en fila 56, la funcion email()no esta activada, tengo intalado localhost, Apache Web Server Version 2.2.8
PHP Script Language Version 5.2.6
MySQL Database Version 5.0.51b
phpMyAdmin Database Manager Version 2.10.3
como habilito la funcion email().
Muchas gracias
Jose
He realizado paso a paso el tutorial y me sale el siguiente error--------------
Regrese - Rellene todos los campos
\n"; die ("Regrese a completar los datos! ! "); } $todayis = date("l, F j, Y, g:i a") ; $attn = $attn ; $subject = $attn; $notes = stripcslashes($notes); $message = " $todayis [EST] \n Atencion: $attn \n Mensaje: $notes \n From: $visitor ($visitormail)\n Informacion adicional : IP = $ip \n Navegador usado: $httpagent \n Referido de : $httpref \n "; $from = "From: $visitormail\r\n"; mail("aespinoza.ps@gmail.com", $subject, $message, $from); // Punto 3 cambiar por tu email. ?> // Punto 4 imprime los datos introducidos
Fecha:
Gracias : ( )
Atencion:
Mensaje:
-------------------------------------
Por favor pudieras ayudarme , te lo agradeceria.
Gracias,
www.anunciosvirtuales.galeon.com vean mi formulario y envien un mensaje y les respondere espero comentarios de preguntas
ojala me puedas contestar para saber el error
Quisiera hacerte 3 consultas:
1-es posible que cuando termine de enviar el correo en vez de aparecer una ventana [item 4 impresion] vaya directamente a una pagina html donde esté un agradecimiento especial que construí para la ocasión?
2- Es posible como en el caso de este sitio agregar un capchka [o como se escriba] para evitar spams?
3- Es posible cambiar fonts y colores?
Muchas Gracias..
Tony
Pero me gustaria que nos enseñes como hacer nuestro propio libro de visitas para que los que visitan la web puedan dejar sus comentarios como el que existe en tu web.
Muchas gracias espero respuestas ya lo he intentado todo y aun no me ha salido :( php, MySql, Asp, Access
Gracias te felicito y sigue asi. ^^!
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:\wamp\www\curso\enviar.php on line 56
// Punto 4 imprime los datos introducidos
Fecha: Wednesday, February 4, 2009, 6:15 pm
Gracias : igor ( igor@rueda.net )
Atencion: Facturacion
Mensaje:
esto es una prueba
127.0.0.1
Index
Como puedo solucionarlo????tengo k decir k yo no uso ningun servidor ftp, yo tengo instalado el wamp, y meto en la carpeta www del propio wamp los ficheros. Puede ser por eso????
Un saludo y haber si puedes ayudarme,xk ahora mismo me encuentro un poco estancado, si quieres te doy mi direccion: igorgurpil@hotmail.com
http://www.forovt.com/php/58-mas-de-un-campo-para-adjuntar-archivos.html
pero es otro codigo y el remitente no es el email del usuario. Mi pregunta es si a este se le puede añadir el file upload o al del foro se le puede cambiar el remitente para q sea el email del usuario. Gracias por el aporte y la ayuda.
paula, puedes mostrarnos tu pagina?, quizas tu hosting no soporta php
puedes verlo ya en
www.peter-lanzani.com.ar
un abrazo
Alfredo Baute
pone bn el nombre del archivo
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario</title>
</head>
<body>
<form method="post" action="enviar.php">
<!-- No cambiar estas variables! -->
<?php
$ipi = getenv("REMOTE_ADDR");
$httprefi = getenv ("HTTP_REFERER");
$httpagenti = getenv ("HTTP_USER_AGENT");
?>
<input type="hidden" name="ip" value="<?php echo $ipi ?>" />
<input type="hidden" name="httpref" value="<?php echo $httprefi ?>" />
<input type="hidden" name="httpagent" value="<?php echo $httpagenti ?>" />
Nombres: <br />
<input type="text" name="visitor" size="35" />
<br />
E-mail:<br />
<input type="text" name="visitormail" size="35" />
<br /> <br />
Departamento:<br />
<select name="attn" size="1">
<option value=" Facturacion ">Facturacion</option>
<option value="Contaduria">Contaduria</option>
</select>
<br />
<br />
Mensaje:
<br />
<textarea name="notes" rows="4" cols="40"></textarea>
<br />
<input type="submit" value="Enviar Formulario" />
<br />
</form>
</body>
</html>
le puse eso.
Y en el documento de ENVIAR.php puse lo siguiente:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario de envio Script</title>
</head>
<body>
<!-- Recuerde: Agregue un link en donde dice 'Index' (en el boton) -->
<!-- Recuerde: Cambie donde dice 'TuEmail' al email tuyo -->
<?php
$ip = $_POST['ip'];
$httpref = $_POST['httpref'];
$httpagent = $_POST['httpagent'];
$visitor = $_POST['visitor'];
$visitormail = $_POST['visitormail'];
$notes = $_POST['notes'];
$attn = $_POST['attn'];
if (eregi('http:', $notes)) {
die ("Do NOT try that! ! ");
}
// Punto 1, Valida email
if(!$visitormail == "" && (!strstr($visitormail,"@") || !strstr($visitormail,".")))
{
echo "<h2>Regrese - Ingrese un E-mail valido</h2>\n";
$badinput = "<h2>Su comentario no fue enviado</h2>\n";
echo $badinput;
die ("Regrese a completar los datos! ! ");
}
// Punto 2, Valida el nombre, email y mensaje, los campos no tienen que estar vacios.
if(empty($visitor) || empty($visitormail) || empty($notes )) {
echo "<h2>Regrese - Rellene todos los campos</h2>\n";
die ("Regrese a completar los datos! ! ");
}
$todayis = date("l, F j, Y, g:i a") ;
$attn = $attn ;
$subject = $attn;
$notes = stripcslashes($notes);
$message = " $todayis [EST] \n
Atencion: $attn \n
Mensaje: $notes \n
From: $visitor ($visitormail)\n
Informacion adicional : IP = $ip \n
Navegador usado: $httpagent \n
Referido de : $httpref \n
";
$from = "From: $visitormail\r\n";
mail("mega.t.ronic@hotmail.com", $subject, $message, $from); // Punto 3 cambiar por tu email.
?>
// Punto 4 imprime los datos introducidos
<p align="center">
Fecha: <?php echo $todayis ?>
<br />
Gracias : <?php echo $visitor ?> ( <?php echo $visitormail ?> )
<br />
Atencion: <?php echo $attn ?>
<br />
Mensaje:<br />
<?php $notesout = str_replace("\r", "<br/>", $notes);
echo $notesout; ?>
<br />
<?php echo $ip ?>
<br /><br />
<a href="index.html"> Index </a>
</p>
</body>
</html>
Cuando le click a enviar me aparece la pagina del explorer me dice que no puede encontrar la pagina. Me podrias ayudar con eso por favor, porque estoy haciendo la primer pagina web y ya casi la terminaba sin problemas pero me trabe en esta parte y no puedo salir de ahi. Este sitio me ayudo un monton y es la primera vez que te escribo porque no tenido ningun problema salvo ahora. Muchas Gracias y Saludos... Espero me puedas responder.
gracias.........
pero tengo una consulta me salen estos errores
-----------------------------
Warning: mail() has been disabled for security reasons in /home/webcindario/f/w/fwilfredo/enviar.php on line 56
// Punto 4 imprime los datos introducidos
Fecha: Friday, January 9, 2009, 12:25 am
Gracias : crdg ( xrist@hotmail.com )
Atencion: Webmaster
Mensaje:
qwrwe4rt
190.43.30.228
gracia espero su respuesta muchisimos gracias otra ves
Lo intento, cambie muchas cosas pero no puedo corregirlo ... tirame una soga por favor ...
El unico problema es que si no completo los datos, el mensaje que tira aparece descentrado (el formulario lo centre)y ademas no tiene un link de retorno al formulario.Lo mismo ocurre si no pongo el mail, y la gente debe apretar el retorno del navegador para volver al formulario y no quiero que esto sea una oportunidad para que se vayan de la web.
Por favor chequealo y fijate si se puede poner un hipervinculo que diga volver o algo asi ....
Desde ya muchisimas gracias !! no te das una idea lo util que me ah resultado y lo contento que estoy.
Mil gracias nuevamente por compartir tu amplio conocimiento.
Desde la Argentina te mando un afectuoso saludo.
<a style="cursor:hand" onclick="window.external.addfavorite('http://elouai.com/bookmark-favorites.php',
'eLouai set HomePage and add to Favorites Tutorials');">
<img width=16 height=16 border=0 src='http://images.elouai.com/images/star.gif'>
<u>Agregar pagina a favoritos</u>...</a>
<a style="cursor:hand" onclick="window.external.addfavorite('http://elouai.com/bookmark-favorites.php', 'Agregar a favoritos');"> <img width=16 height=16 border=0 src='images/star.gif'> <u> Agregar a favoritos</u>...</a>
Para instalar un foro puedes usar: phpbb, smf o vbulletin, los dos primeros son gratis el ultimo es de pago, son los software's para foro más conocidos
como el q vs tenes ahi a bajo
es un tema q nos interesa a mucho
http://www.forovt.com/php/58-mas-de-un-campo-para-adjuntar-archivos.html
Para Alejandro; acabo de entrar a tu web, y envie un formulario.. y las imagenes de las que hablas... estan en un su lugar, antes y despues de enviarse el formulario, y yo uso Firefox, seguro es por el navegador tuyo que se ve descuadrado.
Tu aportación no podrá ser procesada porque un "security token" desapareció o fue erróneo.
saludos
http://www.digitalmidget.com/php_noob/comment.php
Fijate en el foro hay un script modificado para que verifique sobre el usuario existente en la base de datos.
y aprovecho para consultarte: no me funciona la parte de si existe ya un usuario en mi base de datos, hice todo lo que dices aca y nada..no me deja.un abrazo
Para Jesus, tampoco entiendo tu pregunta... direcciono solo una opcion? me preguntas sobre la direccion de los emails?
Salu2.
Para gsmsystem: este sistema de comentarios que tenemos es parte de un CMS, no es independiente como para poder pasartelo y que puedas implementarlo en tu web.
pero sin embargo aqui tienes un script que puede servirte, antes lo hemos usado en nuestro primero portal vt.1.0 es muy bueno: http://www.digitalmidget.com/php_noob/comment.php
siento no poder opinar sobre ninguno de los videos realizados con flash, el navegador pone esperando una dirección ip, y se queda esperando eternamente.
Saludos,
Luis
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 D:\Apache2\htdocs\OTRO\VIDEO\enviar.php on line 56
// Punto 4 imprime los datos introducidos
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:\wamp\www\EJEMPLO\enviar.php on line 57
// Punto 4 imprime los datos introducidos ********por favor ayudame*******
http://www.forovt.com/php/21-formulario-de-contacto-modificado-para-que-reciba-en-varios-emails.html
Departamento:<br />
<select name="attn" size="1">
<option value=" Facturacion ">Facturacion</option>
<option value=" Soporte General ">Soporte General </option>
<option value=" Soporte Tecnico ">Soporte Tecnico </option>
<option value=" Webmaster ">Webmaster </option>
</select>
y copia estas dos lineas.
Asunto:<br />
<input name="attn" type="text" value="" size="40">
simplemente hemos cambiado una lista menu, por un casirillero en blanco donde ponen que asunto del mensaje. tambien puedes cambiar el asunto por otro titulo que creas conveniente.
http://www.videotutoriales.us/foro/showthread.php?t=8
Entra a esa dirección.
Tengo una duda respecto a este formulario. ¿Qué tengo que hacer para que el usuario pueda adjuntar un archivo desde su PC? Por mas vueltas que le doy solamente llego a recibir el nombre del archivo que ha subido, pero no el archivo en si.
Muchas gracias!
saludos.
También he probado este formulario y me ha parecido estupendo y con el video tutorial muy fácil de instalar.
Ahora lo que pretendo es instalarle uno de esos famosos Captcha ¿sería muy complicado esto? para tener un poco de seguridad en el formulario ¿O quizá sea suficiente seguridad con la validación de los campos?
Muchas gracias por todo.
Saludos cordiales.
Si tienes alguna duda, puedes escribirme a mi correo: mavrave[at]gmail.com
Puedes probar aqui el formulario: solo pon tu correo donde quieres recibirlo, y funciona a la perfección.
http://mav.ueuo.com/
bueno probe el formulario y si funciona correctamente: http://mav.ueuo.com/
Saludos.
PERO ME SIGUE MANDANDO ERRO!AYUDA!
Yo te recomiendo que lo pruebes en cualquier servicio de hosting, en internet hay muchos que son gratis.
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 D:\Apache2\htdocs\OTRO\VIDEO\enviar.php on line 56
// Punto 4 imprime los datos introducidos
Para la fecha simplemente agregamos una función que convierta los datos servidor a castellano.
Revisa el foro la sección PHP ahi publique el código ya modificado sobre la fecha.
Envie sus comentarios