Kernel Error
PHP, WWW

Formulario de Contacto en PHP

12 de Junio del 2009 por b@cHo · Deja un comentario 

Pués este es uno de los usos mas comunes en PHP+HTML un formulario de contacto, buzon de sugerencias, o como lo quieran llamar.

portada

Así que abarcare este pequeño tema explciandoles como hacer un formulario, se les envie por correo y, le pida un captcha al usuario.

Primero que nada hay que definir que archivos vamos a crear.

contacto.html

El formulario en si, la interfaz de usuario

enviador.php

El motor, no se me ocurre otro nombre

captcha.php

Archivo que generara la imagen apra evitar algunos bots

Pués como lo primero que haremos sera el formulario pues ami me quedo asi.

Recuerden hoy es PHP y no diseño :rotfl:

<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Contacto</title>
<style type="text/css">
<!--
.style1 {font-size: x-small}
-->
</style>
</head>

<body>

<form method="POST" action="enviador.php">
	<p>Nombre:
	  <input type="text" name="nombre" size="19">
	  <br />
	  <br />
	E-Mail:
	<input type="text" name="email" size="19">
	<br />
	<br />
	Mensaje:<br />
	<textarea rows="9" name="mensaje" cols="30"></textarea>
	<br />
	<br />
    <img src="captcha.php" /><input type="text" name="CAPTCHA" style="width: 50px;" />
    <p style="padding-top: 5px;">
	<p>
	  <input type="submit" value="Enviar" name="Enviar">
  </p>
	<p class="style1">Todos los campos son requeridos  </p>
</form>

</body>

</html>

Ahora bien presten atención en el nombre de los inputs y asegurase que sea por método POST el formulario.

Ahora bien viene el enviador.php

Viene explicado con comentarios así que no debería haber problemas:

<?php
    session_start();
if (isset($_POST['Enviar'])) {

	/* Configuracion*/

	//Desde: La direccion desde la cual se envia el correo
    $desde = "no-reply@kernelerror.net";
	//Para: Correo al cual quieres que llegue el mensaje
	$para = "bacho@algo.com";
	//Asunto: Asunto del Correo
	$asunto = "Asunto";
	//Campos mensaje nombre & correo: Consiguen las variables del formulario y las trnaforman a variables mas sencillas de usar
	$campo_nombre = $_POST['nombre'];
	$campo_correo = $_POST['email'];
	$mensaje = $_POST['mensaje'];
	$Captcha = (string) $_POST["CAPTCHA"];

	//Comprueba Los campos no esten vacios
    $requeridos = array('nombre', 'email', 'mensaje');
    foreach ($requeridos as $requeridos) {
        if (!isset($$requeridos) || $$requeridos == '') {
            exit('Por favor, completa todos los campos obligatorios.');
        }
		}

	//Comprueba el Captcha
	if(sha1($Captcha) != $_SESSION["CAPTCHA"]) {
            exit('Captcha erroneo.');
			}
	//Comprueba que el correo sea valido
    	if (!preg_match("/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/", $campo_correo)) {
          exit('El formato del email ingresado no es correcto.');
	    }
	//El cuerpo del correo a enviar a $para (Linea 9)
	$cuerpo = "
			De: $campo_nombren
			Correo: $campo_correon
			Mensaje:n $mensajen";
    //Establece la razón $desde
	$extra = "From: $desde";
	//Envia el Correo
	mail($para, $asunto, $cuerpo, $extra);

	//Editar esta parta para después de enviar el mensaje
	echo "Listo!";

	/*
	Descomentar para Debuggear
	echo "
			De: $campo_nombren
			Correo: $campo_correon
			Mensaje:n $mensajen
			Desde: $desde";*/
	}
else {
//Comando a ejecutar si se abre la pagina directamente
echo "No accedas directamente a esta pagina.";

}
?>

Recuerden que pueden editar el contenido a su gusto, ya sea editar los campos requeridos o que se ajuste a sus necesidades.

Finalmente el archivo captcha.php:

<?php
    session_start();

    // Genero el codigo y lo guardo en la sesión para consultarlo luego.
    $codigo_captcha = substr(sha1(microtime() * mktime()), 0, 6);
    $_SESSION['CAPTCHA'] = sha1($codigo_captcha);

    // Genero la imagen
    $imagen = imagecreatetruecolor(70, 25);

    // Colores RGB
    $ColorFondo = imagecolorallocate($imagen, 230, 230, 230);
    $ColorLetra = imagecolorallocate($imagen, 90, 90, 90);
    $ColorLinea = imagecolorallocate($imagen, 245, 245, 245);

    // Fondo
    imagefill($imagen, 0, 0, $ColorFondo);

    imageline($imagen, 0, 5, 70, 5, $ColorLinea);
    imageline($imagen, 0, 10, 70, 10, $ColorLinea);
    imageline($imagen, 0, 15, 70, 15, $ColorLinea);
    imageline($imagen, 0, 20, 70, 20, $ColorLinea);
    imageline($imagen, 12, 0, 12, 25, $ColorLinea);
    imageline($imagen, 24, 0, 24, 25, $ColorLinea);
    imageline($imagen, 36, 0, 36, 25, $ColorLinea);
    imageline($imagen, 48, 0, 48, 25, $ColorLinea);
    imageline($imagen, 60, 0, 60, 25, $ColorLinea);

    // Escribo el código
    imageString($imagen, 5, 8, 5, $codigo_captcha, $ColorLetra);

    // final.
    header("Content-type: image/png");
    imagepng($imagen);
?>

Como pueden ver, simplemente el truco esta en definir el archivo php como imagen PNG, y guardar el random como una variable.

¿Sencillo no? bien ahora les toca extenderlo, se puede fácilmente agregar la opción para editar la variable $desde para hacer un PHP-mailer desde una form, perfecto para recomendar o algo asi.

Saludos y feliz aniversario de Kernel Error

Compartelo:
  • Digg
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • BarraPunto
  • Meneame
  • MySpace

Comenta algo

Comparte tu opinión...
Ah si... también si quieres mostrar una imagen tuya puedes usar gravatar!





BBCode Sencillo soportado.  

    Edición Avanzada desactivada.

Kernel Error
97 intentos de ataques detenidos