Por muchos motivos es esencial disponer de un formulario de contacto en tu blog o página web.

En ocasiones un lector puede necesitar contactar contigo ya sea para hacer una crítica, para avisarte de posibles fallos o simplemente para preguntarte algo.

Formulario de contacto

Este tutorial explica cómo hacer un formulario de contacto usando HTML y PHP, y como validar los campos por si se equivocan al escribir algún dato.


Índice


Lo voy a dividir en 3 partes, la primera es el formulario de contacto en HTML, la segunda valida los campos en PHP, y la tercera se encarga de enviar el correo.

Formulario de contacto


A continuación pongo el formulario que puedes modificar o mejor su diseño con estilos CSS.


contacto.php


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Formulario de contacto</title>
</head>

<body>
  <h2>Formulario de contacto</h2>
  <div style="border: #333 1px dotted; padding: 20px; width: 300px">
    <form method='post' action="enviar.php">
      <p style="font-size: 12px">Asunto</p>
      <input type="text" name="Asunto" size="30" maxlength="100"/> <br/>

      <p style="font-size: 12px">Mail</p>
      <input type="text" name="Email" size="30" maxlength="300"/> <br/>

      <p style="font-size: 12px">Mensaje</p>
      <textarea name="Mensaje" rows="10" cols="30"></textarea> <br/><br/>

      <input value="Enviar Correo" type="submit" />
    </form>
  </div>
</body>
</html>

Como puedes ver (action="enviar.php"), al pulsar el botón del formulario, accederá a la página enviar.php, enviando el valor de las variables Asunto, Email y Mensaje.

Validar el formulario


Esta función implementada en PHP, recibe un email y el mensaje y comprueba si están vacíos o si hay algún dato incorrecto.


validar.php


<?php
function validar ($mail$mensaje) {
  
$error '';

  if (! empty (
$mail)) {
    if (! 
preg_match('/^([a-z0-9._]+)@([a-z0-9.-]+).([a-z]{2,5})$/'strtolower ($mail))) {
      
$error 'Email incorrecto';
    }

    if (! empty (
$mensaje)) {
      if (
strlen ($mensaje) > '4000') {
        
$error 'El mensaje es demasiado largo';
      }
    }
    else {
      
$error 'El campo Mensaje está vacío';
    }
  }
  else {
    
$error 'El campo Email está vacío';
  }

  return 
$error;
}
?> 


Enviar el correo


Primero comprueba la IP del usuario, y la hora y fecha a la que envió el correo, después valida los datos recibidos desde formulario, con la función validar.php, y si está todo correcto guarda los datos del correo y lo envía.


enviar.php


<?php
require ('validar.php');

$hora date('H').':'.date('i').':'.date('s'); //hora del servidor
$fecha date('d').'/'.date('m').'/'.date('y'); //fecha del servidor
$IP $_SERVER['REMOTE_ADDR']; //IP Usuario

$asunto trim ($_POST['Asunto']); //Asunto del mensaje
$mail trim ($_POST['Email']); //Email del remitente
$mensaje trim ($_POST['Mensaje']); //Contenido del mensaje

$tuemail 'email'//IMPORTANTE: Escribe aquí tu email

$error validar ($mail$mensaje);

if (empty (
$error)) {
  
//Guarda los datos de la consulta en la variable $message
  
$message "
    Enviado el día "
.$fecha." a las ".$hora.".

    Email: "
.$email."
    IP: "
.$IP."

    Mensaje: 
     "
.$mensaje."";

  
//Intenta enviar el mensaje
  
if (mail ($tuemail$asunto$message"From: $mail")){
    
$error '<p>Correo enviado correctamente.</p>';
  }
  else {
    
$error 'No se ha podido enviar el correo, intentalo más tarde.';
  }
}
echo 
'<p>'.$error.'</p>';

?>



Es un ejemplo muy sencillo y está listo para funcionar, solo hay que indicar tu email ($tuemail = 'email';) y subirlo a un servidor.

Y como siempre, si tienes alguna duda, deja un comentario e intentaremos ayudarte.

Si te gustó el artículo...

Puedes seguir el blog a través de Twitter, Facebook o tu lector de feeds RSS.

Artículos Relacionados

19 Comentarios



Manzana

Me ha parecido genial su tutorial, el formulario con PHP ha salido muy bien ^^, sólo que tengo un pequeño problema y es precisamente cuando en las cajas de texto escribo una letra "ñ" o alguna letra con acento, a la hora de llegar el mensaje a mi correo en este no aparece la "ñ" o la letra con tilde, sólo aparecen signos de interrogación.

¿Saben alguna manera de corregirlo?

Si pudieran ayudarme con eso, se los agradecería mucho más.

Que pasen un buen día ;D

Enero 06, 2010



Sergio GR

Hola @Manzana, me alegro de que te sea útil el tutorial :).

El problema que mencionas ocurre cuando no se encuentra un determinado símbolo (como es el caso de la "ñ") en la codificación actual.

Bastaría con convertir el contenido del mensaje a UTF-8, antes de enviarlo.

Para ello puedes utilizar la función utf8_encode ():

$message = utf8_encode ($message);
Saludos ;)

Enero 06, 2010



Nanu

#3 Nanu


Me sirvió mucho este formulario, lo único que no me sale es: <p>Correo enviado correctamente</p>

Febrero 19, 2010



Sergio GR

@Nanu Tienes razón, es que sería imposible que apareciera, había una cosa mal puesta en el último código del artículo (ya está corregido).

Hay que quitar el else que había al final, mira ver si así te funciona.

Saludos y gracias por avisar :)

Febrero 19, 2010



Nanu

#5 Nanu


Gracias sr! ahí anduvo perfecto.
La verdad que me ayudo a terminar un buen trabajo.
Es el mejor formulario que vi!

Febrero 19, 2010



Sergio GR

@Nanu Me alegro :), intente hacerlo lo más completo posible sin complicarlo demasiado.

Claro que para algo un poco más profesional recomiendo utilizar la clase PHPMailer.

Febrero 19, 2010



Rafa

Hola, me ha sido muy útil este tutorial, lo estoy instalando para la nueva web, y tengo un par de dudas de formato... como puedo editar el tamaño de las cajas para texto, y la alineación con el texto¿?
Muchas gracias por compartir estos recursos :P un saludo!

Marzo 25, 2010



Sergio GR

Hola @Rafa, puedes cambiar el tamaño de los campos "input" variando el valor del atributo size, y los atributos rows y cols para el "textarea".

Pero para cambiar el formato del color, fuente, etc. deberás utilizar estilos CSS.

Por ejemplo para cambiar el diseño de un textarea al que asignemos la clase "mensaje", utilizamos el siguiente código:

<style type="text/css">
textarea.mensaje { 
   font-size: 12px;  
   color: #DDD;  
   background: #000;  
   border: #333 1px solid  
}
</style>

Marzo 25, 2010



Pocho

#9 Pocho


Buenas tardes, una consulta, donde debo poner esta línea $mensaje = utf8_encode ($mensaje);, para que me salgan las ññññ o vocales tildadas.
Gracias de antemano,


Pocho

Mayo 07, 2010



Sergio GR

@Pocho: En realidad esa linea es solo un ejemplo de la función utf8_encode (), y tienes que aplicarla a todas las variables que te dan ese tipo de problemas.

Por ejemplo la variable "$mensaje" que aparece en la parte superior, la pondríamos así:

$mensaje = utf8_encode (trim ($_POST['Mensaje']));

Mayo 07, 2010



Raquel

Hola!! Funciona!!! pero si no es mucho pedir, como hago para que los mensajes de error me aparezcan en el mismo formulario, y no en otra ventana??? gracias! Raquel

Junio 23, 2010



Sergio GR

Hola @Raquel, bueno hay varias formas, en este caso, creo que la más sencilla es incluir el contenido de enviar.php en contacto.php, (al final por ejemplo) y cambiar también la parte:

<form method='post' action="enviar.php">

Donde pone enviar.php escribe contacto.php, para que se envié a si mismo. De esa forma el correo se enviará en la misma página que se escribe, y los mensajes de error también.

Lo malo es que ese código se ejecutará siempre al entrar en esa página, y lo que nos interesa es que se ejecute solo al pulsar el botón. Para ello, primero añade la etiqueta name="submit" en código del botón del formulario, quedaría así:

<input name="submit" value="Enviar Correo" type="submit" />

Y después debes meter todo el contenido de enviar.php que pusistes en contacto.php, entre el siguiente código PHP:

<?php
if (isset ($_POST['submit'])) {
//Aquí va el contenido de enviar.php
}
?>


De esta forma solo se ejecutará al pulsar el botón "Enviar Correo".

Junio 23, 2010



Francisco

Necesito ayuda no se como hacer para crear el formulario hago todo como se dice y nada ayuda por favor.

Junio 26, 2010



Sergio GR

Hola @Francisco, si lo hiciste como se indica en este artículo debería funcionar, y no se me ocurre como ayudarte sin saber porque no te funciona. Puede que estés haciendo algo mal, o incluso que tu servidor no disponga de PHP.

Pueden ser muchas cosas, y si no das más detalles...

Junio 29, 2010



Francisco

Mira exactamente lo que me pasa es que cuando aprieto el botón enviar mensaje se me abre el enviar.php pero queda tildado y no envía.

Junio 29, 2010



Francisco

Mira ahora me pasa esto:
Cuando aprieto enviar mensaje se me recarga la misma pagina se me ponen todos los casilleros en blanco pero en el url me sale lo que pongo:

laweb/Contacto.php?Nombre+Y+Apellido=francisco+mata&Email=dm_fan%40hostm ail.com&Asunto=francisco&Mensaje=espero+respuestas+de+este+grandioso+mensaje

Junio 29, 2010



Francisco

Me vuelve a pasar lo anterior:
Mira exactamente lo que me pasa es que cuando aprieto el botón enviar mensaje se me abre el enviar.php pero queda tildado y no envía.

AYUDA!!!!!!

Junio 29, 2010



Francisco

Gracias por todo, ya lo arregle!

Junio 29, 2010



Sergio GR

@Francisco: Por lo que cuentas, lo que ocurría es que tenias en la etiqueta "form", mal escrita la dirección, y estabas usando el método "GET" en vez de "POST".

Me alegro de que lo hayas solucionado, cualquier cosa no dudes en preguntar.

Saludos.

Junio 30, 2010



Deja tu Comentario

Asigna una imagen a tu email con Gravatar, si no sabes accede al siguiente Tutorial.



Asigna una imagen a tu email
Nombre
Email [Requerido]
Web/Blog

Información

  • Aplicamos el tag nofollow, y los enlaces con keywords en los comentarios podrían ser eliminados, intentamos mantener limpio el blog de spam.

  • Puedes usar las etiquetas <i>, <b>, <em>, <strong>, <a>, href, procura cerrarlas adecuadamente o tu comentario podria no mostrarse del modo que deseas.

  • Si necesitas que se vean en el comentario caracteres especiales como los usados en lenguajes de programacion como php, xhtml, etc., debes escribirlo dentro de las etiquetas [code] [/code], de lo contrario no se mostrará.

  • Procura no escribir enlaces que no tengan ninguna relación con el tema.

  • Si realizas una crítica procura argumentarla, pero sobretodo evita los insultos.