Cambio en el blog El susto del tonto
Apr 13

Ayer me enviaron un mensaje privado en Foros del Web, de un usuario que tenía un problema con un formulario de contacto. Me pedía que le echase una mano e hiciese uno.

Me lo pensé un poco y decidí hacerlo. Si queréis saber cómo hacer un formulario de contacto en PHP, seguid leyendo.

Primero debemos saber qué queremos. En este caso el formulario cuenta con 9 campos:

  • Nombre
  • Apellidos
  • Dirección
  • Localidad
  • Código postal
  • Provincia
  • Email
  • Cómo nos conociste
  • Sugerencias

Estos datos se enviarán a nuestro email.

Así que comenzamos.

Paso 1: El formulario

Antes de nada necesitamos el formulario que pedirá los datos. Este formulario será un tabla con dos columnas y 10 filas. En las columnas de la izquierda pondremos el título del campo y en la de la derecha pondremos el campo en sí.

Esta parte me parece sencilla, así que os dejo el código que hice yo y ya está, al fin y al cabo este formulario no es muy complejo.


<form id="form_emails" name="form_emails" method="post" action="?status=send">
<table width="80%" border="0" cellspacing="1" cellpadding="1">
<tr>
<td>Nombre</td>
<td><label>
<input type="text" name="nombre" id="nombre" />
</label></td>
</tr>
<tr>
<td>Apellidos</td>
<td><label>
<input type="text" name="apellidos" id="apellidos" />
</label></td>
</tr>
<tr>
<td>Dirección</td>
<td><label>
<input type="text" name="direccion" id="direccion" />
</label></td>
</tr>
<tr>
<td>Localidad</td>
<td><label>
<input type="text" name="localidad" id="localidad" />
</label></td>
</tr>
<tr>
<td>Código postal</td>
<td><label>
<input type="text" name="codigo_postal" id="codigo_postal" />
</label></td>
</tr>
<tr>
<td>Provincia</td>
<td><label>
<input type="text" name="provincia" id="provincia" />
</label></td>
</tr>
<tr>
<td>Email</td>
<td><label>
<input type="text" name="email" id="email" />
</label></td>
</tr>
<tr>
<td>¿Cómo nos conociste?</td>
<td><label>
<select name="como_nos_conociste" id="como_nos_conociste">
<option value="En internet">En internet</option>
<option value="Por la calle">Por la calle</option>
</select>
</label></td>
</tr>
<tr>
<td colspan="2"><p>Sugerencias</p>
<p>
<label>
<textarea name="sugerencias" id="sugerencias" cols="45" rows="5"></textarea>
</label>
</p></td>
</tr>
<tr>
<td colspan="2"><label>
<input type="submit" name="button" id="button" value="Enviar el email" />
</label></td>
</tr>
</table>
</form>

Paso 2: Creando el PHP

Ahora tenemos que comenzar con el PHP.

Por ahora tenemos un problema, este formulario sólo tiene un archivo, así que el código PHP está dentro del mismo archivo que el formulario. Si te has fijado antes, en el código del formulario, el atributo action tiene de valor ?status=send. Para saber si el usuario ha hecho clic en el botón de enviar, basta con comprobar que la variable de URL status tenga de valor send, o que esté creada al menos.

Bien, comencemos, comprobamos que la variable está creada con la función isset, y comprobamos que tiene de valor send mediante un if normal y corriente. Traducido a PHP:

if(isset($_GET['status'])) { if ($_GET['status'] == ’send’) { /* Comprobamos que la variable de URL status esté creada y además tenga de valor ’send’ */

Luego tenemos que comprobar que todos los campos del formulario han sido rellenados, podemos comprobarlo mediante isset.

if(!isset($_POST['nombre'])) { header(’Location: ?status=error&error=1′); }
if(!isset($_POST['apellidos'])) { header(’Location: ?status=error&error=2′); }
if(!isset($_POST['direccion'])) { header(’Location: ?status=error&error=3′); }
if(!isset($_POST['localidad'])) { header(’Location: ?status=error&error=4′); }
if(!isset($_POST['codigo_postal'])) { header(’Location: ?status=error&error=5′); }
if(!isset($_POST['provincia'])) { header(’Location: ?status=error&error=6′); }
if(!isset($_POST['email'])) { header(’Location: ?status=error&error=7′); }
if(!isset($_POST['como_nos_conociste'])) { header(’Location: ?status=error&error=8′); }
if(!isset($_POST['sugerencias'])) { header(’Location: ?status=error&error=9′); }

Ahora tenemos que definir las variables que se usarán para enviar el email.


$name = $_POST['nombre'];
$surname = $_POST['apellidos'];
$dir = $_POST['direccion'];
$loc = $_POST['localidad'];
$cp = $_POST['codigo_postal'];
$prov = $_POST['provincia'];
$f_email = $_POST['email'];
$cnc = $_POST['como_nos_conociste'];
$sug = $_POST['sugerencias'];
$sug = wordwrap($sug, 70); /* Acortamos cada línea a un máximo de 70 caracteres */

Continuamos con las variables, esta vez tenemos que crear el mensaje que se enviará por email.

$mensaje = ''.$name.' '.$surname.', de '.$loc.' ('.$prov.') nos conoció '.$cnc.'. su dirección es '.$dir.', y su email '.$f_email.'. Su sugerencia: '.$sug.'';
$mensaje = wordwrap($mensaje, 70); /* Acortamos cada línea a un máximo de 70 caracteres */

Seguimos, ahora definimos las cabeceras del email:

$cabeceras = 'From: '.$f_email.'' . "\r\n" .
'Reply-To: '.$f_email.'' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

Definimos las variables que corresponden al asunto y al email al que se enviará el mensaje:

/* Definimos variables generales */
$tu_email = 'email@dominio.com'; /* Dirección a la que se enviará el email */
$asunto = 'Asunto'; /* Asunto del mensaje */

Finalmente enviamos el email y cerramos los if que hemos abierto al inicio.

mail($tu_email, $asunto, $mensaje, $cabeceras);
echo 'Email enviado'; } }

Paso 3: Errores durante el proceso

Si por algún motivo no se ha rellenado algún campo, debemos hacérselo saber al usuario, así que colocamos en nuestra tabla este código PHP, que nos mostrará una fila con una descripción del error en caso de que algo vaya mal:

if(isset($_GET['status'])) { if ($_GET['status'] == ‘error’) {
echo ‘<tr><td colspan=”2″><strong>Error:</strong>’;
switch ($_GET['error']) {
case 1:
echo ‘El campo “Nombre” es necesario’;
break;
case 2:
echo ‘El campo “Apellidos” es necesario’;
break;
case 3:
echo ‘El campo “Dirección” es necesario’;
break;
case 4:
echo ‘El campo “Localidad” es necesario’;
break;
case 5:
echo ‘El campo “Código postal” es necesario’;
break;
case 6:
echo ‘El campo “Provincia” es necesario’;
break;
case 7:
echo ‘El campo “Email” es necesario’;
break;
case 8:
echo ‘El campo “Cómo nos conociste” es necesario’;
break;
case 9:
echo ‘El campo “Sugerencias” es necesario’;
break;
}
echo ‘</td></tr>’;
} }

Paso 4: Unido

Resumiendo, el código completo sería el que se ve en este archivo.

Nota: En principio el tutorial era más extenso, y explicaba cada paso ampliamente, pero resulta que Wordpress no guardó el tutorial y me borró más de una hora de trabajo, así que lamentablemente lo dejo reducido a esto, si tenéis alguna duda, comentad.

Imprime este artículo Envía por Email este artículo

Dejar una respuesta