English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
En este tutorial, aprenderás a usar los filtros de PHP para limpiar y validar los datos del formulario.
Como se vio en el tutorial anterior, el proceso de capturar y mostrar los datos del formulario enviado es muy simple. En este tutorial, aprenderás a implementar un formulario de contacto simple en tu sitio web que permita a los usuarios enviar comentarios y retroalimentación por correo electrónico. Usaremos el mismoFunción mail() de PHPpara enviar correos electrónicos.
También implementaremos algunas funciones de seguridad básicas, como limpiar y validar el contenido de la entrada del usuario, para que los usuarios no puedan insertar datos potencialmente dañinos para la seguridad del sitio o que puedan dañar la aplicación.
A continuación, se muestra nuestro script PHP multipropósito, que realiza las siguientes operaciones:
Se le pedirá al usuario que ingrese sus comentarios sobre el sitio.
El mismo script muestra el formulario de contacto y procesa los datos del formulario enviado.
Este script limpiará y validará la entrada del usuario. Si falta algún campo obligatorio (marcado*),o debido a una entrada incorrecta que cause la falla de la validación, el script volverá a mostrar el formulario y mostrará un mensaje de error correspondiente en el campo del formulario.
Este script recordará los campos que el usuario ya ha llenado y prellenará estos campos cuando se vuelva a mostrar el formulario debido a errores de validación.
Si los datos enviados por el usuario son aceptables y todo sale bien, se enviará un correo electrónico al administrador del sitio y se mostrará un mensaje de éxito al usuario.
Escribe el siguiente código en el archivo "contact.php" y guárdalo en la carpeta raíz del proyecto:
<?php //Función de filtrado de entrada de usuario function filterName($field) { //Limpiar el nombre de usuario $field = filter_var(trim($field), FILTER_SANITIZE_STRING); //Verifica el nombre del usuario if (filter_var($field, FILTER_VALIDATE_REGEXP, array("options" => array("regexp" => "/^[a-zA-Z\s]+$/")))){ return $field; } else{ return FALSE; } } function filterEmail($field) { //Limpiar la dirección de correo electrónico $field = filter_var(trim($field), FILTER_SANITIZE_EMAIL); // Verifica la dirección de correo electrónico if (filter_var($field, FILTER_VALIDATE_EMAIL)) { return $field; } else{ return FALSE; } } function filterString($field){ // Limpia la cadena $field = filter_var(trim($field), FILTER_SANITIZE_STRING); if(!empty($field)){ return $field; } else{ return FALSE; } } //Define variables e inicializa con valores vacíos $nameErr = $emailErr = $messageErr = ""; $name = $email = $subject = $message = ""; //Maneja los datos del formulario al enviar el formulario if($_SERVER["REQUEST_METHOD"] == "POST"){ // Verifica el nombre del usuario if(empty($_POST["name"])){ $nameErr = "Por favor, ingrese su nombre."; } else{ $name = filterName($_POST["name"]); if($name == FALSE){ $nameErr = "Por favor, ingrese un nombre válido."; } } // Verifica la dirección de correo electrónico if(empty($_POST["email"])){ $emailErr = "Por favor, ingrese tu dirección de correo electrónico."; } else{ $email = filterEmail($_POST["email"]); if($email == FALSE){ $emailErr = "Por favor, ingrese una dirección de correo electrónico válida."; } } // Valida el asunto del mensaje if(empty($_POST["subject"])){ $subject = ""; } else{ $subject = filterString($_POST["subject"]); } // Verifica el comentario del usuario if(empty($_POST["message"])){ $messageErr = "Por favor, ingrese su comentario."; } else{ $message = filterString($_POST["message"]); if($message == FALSE){ $messageErr = "Por favor, ingrese un comentario válido."; } } //Revisa los errores de entrada antes de enviar el correo electrónico if(empty($nameErr) && empty($emailErr) && empty($messageErr)){}} // Dirección de correo electrónico del destinatario $to = '[email protected]'; // Crear encabezados de correo electrónico $headers = 'From: '. $email . "\r\n" . 'Responder-Para: '. $email . "\r\n" . 'X-Remitente: PHP/' . phpversion(); // Enviando correo electrónico if(mail($to, $subject, $message, $headers)){ echo '<p class="success">Su mensaje se ha enviado con éxito!<'/p>'; } else{ echo '<p class="error">No se pudo enviar el correo electrónico. Por favor, inténtelo de nuevo!<'/p>'; } } } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Contacto Form</title> <style type="text/css"> .error{ color: red; } .success{ color: green; } </style> </head> <h2>Contactarnos</h2> <p>Por favor, complete este formulario y envíelo a nosotros</p> <form action="contact.php" method="post"> <p> <label for="inputName">Name:<sup>*</sup></label> <input type="text" name="name" id="inputName" value="<?php echo $name; ?>"> <span class="error"><?php echo $nameErr; ?>/span> </p> <p> <label for="inputEmail">Email:<sup>*</sup></label> <input type="text" name="email" id="inputEmail" value="<?php echo $email; ?>"> <span class="error"><?php echo $emailErr; ?>/span> </p> <p> <label for="inputSubject">Asunto:</label> <input type="text" name="subject" id="inputSubject" value="<?php echo $subject; ?>"> </p> <p> <label for="inputComment">Mensaje:<sup>*</sup></label> <textarea name="message" id="inputComment" rows="5" cols="30><?php echo $message; ?>/textarea> <span class="error"><?php echo $messageErr; ?>/span> </p> <input type="submit" value="Enviar"> <input type="reset" value="Reiniciar"> </form> </html>
Quizás se pregunte sobre el significado completo de este código. Bueno, vamos directamente a eso.
La función filterName() verifica si el valor de entrada es un nombre. Los nombres válidos solo pueden contener caracteres alfabéticos (a-z, A-Z).
La función filterEmail() valida que el valor de entrada sea una dirección de correo electrónico.
La función filterString() limpia los valores de entrada mediante la eliminación de marcadores HTML y caracteres especiales. No realiza ninguna validación en los valores de entrada.
dentro de la etiqueta<form>la propiedad action="contact.php" especifica el mismo archivo contact.php para mostrar el formulario y manejar los datos del formulario.
<input>y<textarea>la propiedad de valor, por ejemplo<?php echo $name; ?>al validar errores en el formulario, muestra el valor prellenado.
.error clase interna del código PHP, por ejemplo<span class="error"><?php echo $nameErr; ?>/span>mostrar el error correspondiente del campo.
Para obtener más información sobre la limpieza y validación de los filtros, consulteFiltros PHPReferencia.
Nota:Necesita configurar el servidor de correo en su computadora para que la función PHP mail() funcione correctamente. Si solo desea ejecutar la validación del formulario, puede reemplazar la parte de correo con su propio código personalizado.