Mejoras al Formulario de contacto (HTML5 y PHP)

Desde hacia cierto tiempo que quería escribir este post, pues he recibido bastantes preguntas con respecto al formulario que publique hace ya algunos meses en una entrada y que es el mismo que tengo funcionando en el blog, pero que a lo largo del tiempo le he hecho algunas modificaciones, mas que todo simplificarlo.

¿Que diferencias tiene?

La única diferencia perceptible en cuanto a funcionamiento es que simplifique el proceso de validación de campos eliminando el script de validación y aprovechando la que viene incluida en HTML5, además de unas pocas mejoras en cuanto a css.

Lo primero que hay que hacer, es verificar que nuestra plantilla este hecha en HTML5 yendo a la edicion HTML de nuestra plantilla y ver el Doctype que tiene, si este es <!DOCTYPE html> esta hecha en HTML5 si no lo esta debemos agregarlo en la pagina estatica donde vamos a crear el formulario (es un poco chapucero pero si no se hace no funciona).
En caso de que la plantilla este hecha en HTML5 Podemos obviar el Doctype y agregar solamente lo que esta dentro de las etiquetas body.


<!DOCTYPE html>

<html>

  <head>

    <meta content="text/html; charset=windows-1252" http-equiv="content-type">

    <title>Contacto mt</title>

    <style type="text/css">

/*—————- algunos estilos css dentro de la pagina ————*/

input:focus, textarea:focus {

border-color: #33ccff;

background-color: #f9f9f9;

}

</style> </head>

  <body>

    <form action="url-del—archivo/contacto.php" method="post">

      <label for="name">Nombre Completo:<br>

        <input required="required" id="name" name="name" size="27" type="text">

      </label><br>

      <br>

      <label for="email">Correo Electrónico:<br>

        <input required="required" id="email" name="email" size="27" type="email">

      </label><br>

      <br>

      <label for="subject">Asunto:<br>

        <input required="required" id="subject" name="subject" size="27" type="text">

      </label><br>

      <br>

      <label for="message">Mensaje: <br>

        <textarea required="required" cols="30" id="message" name="message" rows="5"></textarea>

      </label><br>

      <br>

      <input name="submit" value="Enviar"

        type="submit"></form>

    

  </body>

</html>

La única diferencia con el código anterior es que los nombres de los campos están dentro de etiquetas label, por lo que adoptarían el estilo css de la plantilla y facilitaría también establecer reglas para crear los propios, además de que el campo de email esta marcado como tipo "email" lo que en HTML5 es suficiente para comprobar que las direcciones de correo que se introducen son validas lo mismo que required="required" en los campos obligatorios lo que es suficiente para comprobar que se diligencien.



El pequeño código CSS al comienzo es simplemente para resaltar el campo en el que se esta escribiendo, podemos agregarlo tal cual como esta arriba o directamente en la plantilla antes de </b: skin>


El archivo php es el mismo que se utilizo para el formulario anterior, solo le cambie la redirección por javascript por HTML.


<?php

@$name = addslashes($_POST['name']);

@$email = addslashes($_POST['email']);

@$subject = addslashes($_POST['subject']);

@$message = addslashes($_POST['message']);



$cabeceras = "From: $email\n" //El remitente

 . "Reply-To: $email\n"; //Dirección de respuesta

$asunto = "$subject"; //El asunto

$email_to = "email@dominio.com"; //El email

$contenido = "$name le ha enviado el siguiente mensaje:\n"

. "\n"

. "$message\n"

. "\n";



//Envia el mensaje

if (@mail($email_to, $asunto ,$contenido ,$cabeceras )) {

//Si el mensaje se envía muestra una confirmación

die("Muchas gracias, su mensaje fue enviado correctamente");

}else{

//Si el mensaje no se envía muestra el mensaje de error

die("Error: Su mensaje no pudo ser enviado, intente más tarde");

}

?>

El mensaje de confirmación y redirección

Simplemente cambiamos la linea die("Muchas gracias, su mensaje fue enviado correctamente"); por:

echo '<html>

<head>

  <meta http-equiv="Refresh"

 content="5;url=http://direccion del blog">

  <link href="http://direccion delblog/favicon.ico"

 rel="icon" type="image/x-icon">

</head>

<body>

<p style="text-align: center;"></p>

<p style="text-align: center;"><big

 style="font-weight: bold;"><big><big></big></big></big></p>

<p style="text-align: center;"><big

 style="font-weight: bold;"><big><big>Su mensaje

ha sido

enviado correctamente en breve nos pondremos en contacto con Ud.</big></big></big></p>

<div style="text-align: center;">

<p>Sera redireccionado a la

página principal en 5 segundos. En caso contrario puede regresar

haciendo <a href="http://direccion del blog">click

aquí</a></p>

</div>

</body>

</html>

';
Si queremos que redireccione también cuando hay un error con el mensaje, simplemente cambiamos la linea por el código anterior y cambiamos el texto "su mensaje ha sido enviado correctamente... " por "su mensaje no pudo ser enviado, intente mas tarde"

Formulario de contacto para paginas alojadas en Google Drive

Formulario de contacto para páginas alojadas en google drive
Gweb.io es un servicio que ademas de permitir usar un dominio personalizado en una «pagina web sencilla» alojada en Google drive, proporciona una interesante opción de formulario de contacto que se puede utilizar manteniendo la sencillez de dichas paginas.

Para poder utilizarlo solo basta con crear un formulario de contacto común y corriente en HTML, teniendo en cuenta los siguientes parametros:

Debemos especificar como método "post" y url de acción "/contact".
Algo mas o menos así:

<form method="post" action="/contact">

Los campos deben tener lo siguiente como nombre:

contact[name] para nombre

contact[email] para email

contact[subject] para asunto

contact[message] para mensaje

El mensaje es enviado a la dirección de Gmail que se utilizo para alojar la pagina en Google drive.

Con esto podremos tener un formulario muy sencillo pero flexible que podemos incluso utilizar en Blogger como un Iframe o una ventana modal.

Html5

Para mantener el formulario lo mas sencillo posible podemos utilizar html5 que ya incluye validación de campos.

<!DOCTYPE html>

<html><head>

    <meta content="text/html; charset=utf-8" http-equiv="content-type"><title>Formulario de contacto by Derangeur</title>

       <style type="text/css">

/* css incluido dentro de la plantilla */

label {

  display: block;

  margin-top: 20px;

  letter-spacing: 1px;

  color: #ff6600;

  font-weight: bold;

  font-family: "Courier New",Courier,monospace;

}

.principal {

  margin: 0 auto;

  display: block;

  width: 510px;

  color: #666666;

  font-family: Arial;

}

form {

  margin: 0 auto;

  width: 400px;

}

input, textarea {

  border: 2px solid #339999;

  padding: 10px;

  background: white none repeat scroll 0% 50%;

  width: 380px;

  margin-top: 5px;

  color: black;

  height: 27px;

  font-size: 15px;

  font-family: Arial,Helvetica,sans-serif;

}

textarea {

  height: 150px;

  font-family: Arial,Helvetica,sans-serif;

}

#enviar {

  border:  none;

  width: 85px;

  height: 35px;

  margin-top: 20px;

  cursor: pointer;

  background-color: #339999;

  color: white;

}

#borrar {

  border:  none;

  width: 85px;

  height: 35px;

  margin-top: 20px;

  cursor: pointer;

  background-color: #339999;

  color: white;

}

#enviar:hover {

  background-color: #33ccff;

  color: white;

}

#borrar:hover {

  background-color: #cc0000;

  color: white;

}

input:focus, textarea:focus {

  border-color: #33ccff;

  background-color: #f9f9f9;

}

body {

  background-color: #cccccc;

}



</style></head><body>

    <form method="post" action="/contact"> <label for="nombre">Nombre:</label>

      <input required="required" id="nombre" name="contact[name]" placeholder="Su nombre..." type="text"> <label for="email">Email:</label><input required="required" id="email" name="contact[email]" placeholder="Su email..." type="email">

      <label for="asunto">Asunto:</label> <input required="required" id="asunto" name="contact[subject]" placeholder="Asunto..." type="text"> <label for="mensaje">Mensaje:</label><textarea required="required" id="mensaje" name="contact[message]" placeholder="Su mensaje..."></textarea>

      <input id="borrar" name="borrar" value="Borrar" type="reset"> <input id="enviar" name="enviar" value="Enviar" type="submit"> </form> 

</body></html>

El código da como resultado un formulario como el de la imagen de arriba. Es tan sencillo que el código del css es mucho mas largo que el formulario en si.

Formulario de contacto en ventana modal (foxyform)

formulario de contacto en ventana modal
Desde hacia mucho tiempo que tenia muchas ganas de escribir este post, ya que el resultado es bastante elegante a pesar de la simplicidad del procedimiento, no lo había hecho antes por falta de tiempo para dedicarle y algo de flojera también a decir verdad.


Para explicar todo mejor el post va dividido en 2 partes, la primera se trata del formulario de contacto como tal y la segunda parte de lo que hay que hacer para que aparezca en una ventana modal.

Primera parte el formulario

Lo primero que debemos hacer es tener un formulario de contacto externo, en el ejemplo utilice foxyform por preferencia personal, aunque lo mismo debe funcionar para otros como kontactr o emailmeform.

Después de que generemos nuestro formulario de contacto obtendremos un código para insertar en un archivo html en el caso de foxyform tendremos algo como esto:

codigo formulario de contacto
Como vamos a hacer el formulario para una ventana modal debemos crear un archivo que subiremos a un alojamiento como dropbox, google drive u otro por el estilo; por lo general en ese tipo de alojamientos no funcionaria ese script por lo que debemos primero copiar la url que aparece:

url del codigo

Después de copiarla la pegamos en la barra de direcciones de nuestro navegador y presionamos enter lo que nos mostrara otro código:

el otro codigo

Ahí buscamos una url como la que aparece encerrada en un circulo y la copiamos.


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
  
  <meta content="text/html; charset=ISO-8859-1" http-equiv="content-type">
  <title>Contacto</title>
  
</head><body>
<div style="border: 1px solid rgb(0, 0, 0); margin: 0pt auto; padding: 10px; background-color: rgb(237, 237, 237); outline-color: rgb(255, 255, 255); outline-style: solid; outline-width: 1px; width: 350px;">
<table border="0" cellpadding="0" cellspacing="0">
  <tbody>
    <tr>
      <td style="vertical-align: top;"><iframe src="URL AQUI" frameborder="0" height="450" width="350"></iframe><br>
      </td>
    </tr>
    <tr align="center">
      <td style="vertical-align: top;"><a style="font-family: Arial; font-style: normal; font-variant: normal; font-weight: normal; font-size: 10px; line-height: normal; font-size-adjust: none; font-stretch: normal; color: rgb(92, 92, 92);" href="http://es.foxyform.com/" target="_blank">foxyform</a><br>
      </td>
    </tr>
  </tbody>
</table>
</div>
</body></html>

Copiamos el codigo anterior a un editor y pegamos la dirección que apareció en el código donde dice URL AQUI. Luego guardamos el archivo como html y lo subimos al alojamiento que hayamos elegido. Ya con esto tendremos listo el formulario de contacto, solo falta copiar la dirección del archivo, mas adelante la necesitaremos.

Segunda parte la ventana modal

Para "volver modal" el formulario debemos usar cualquier script de ventana modal con el que se pueda cargar un iframe, en mi caso utilice shadowbox ya que es simple y no me da problemas con otros scripts que uso.

Lo primero que debemos hacer es descargar este archivo, descomprimirlo y subir todos los archivos que están dentro a un alojamiento, es importante que queden todos juntos.

Después debemos agregarlos a nuestra plantilla justo arriba de </head> asi:


<link href='URL DEL ARCHIVO CSS' rel='stylesheet' type='text/css'/>
<script src='URL DEL ARCHIVO JS' type='text/javascript'></script>
<script type='text/javascript'>
Shadowbox.init({
overlayColor: "#000",
overlayOpacity: "0.6",
});
</script>

Donde dice URL DEL ARCHIVO CSS copiamos la dirección del archivo css en nuestro alojamiento y lo mismo hacemos con el archivo js.

Después de eso solo falta poner rel='shadowbox;width=Ancho;height=Altura;' al enlace del formulario, algo mas o menos como esto:


<a href='https://db.tt/xO3v03JR' rel='shadowbox;width=400;height=430;' title='Contacto'>Contacto</a>

Debemos reemplazar Ancho y Altura para cambiar el tamaño de la ventana del formulario, podemos ir probando hasta que quede como queremos.

Después de esto ya tendremos nuestro formulario en ventana modal que se ve elegante y además es gratuito.