Procesando una forma con PHP.
Parte 2: Empecemos a programar!
Por: Falcón.
Muy bien, ya que tenemos galletas y café al lado de la computadora,
vamos a quitarnos los zapatos para ponernos mas comodos ya que al
terminar esta segunda parte debemos tener una forma con funcionalidad
basica en nuestro sitio web.
Como diria Cantinflas: empecemos por el principio.
Como mencionaba en la primera parte de esta lección, PHP
en un preprocesador de hipertexto que interpreta el servidor antes
de enviar el documento al visitante.
Lo bonito de PHP es que se puede mezclar con simple HTML. Esto quiere
decir que puede poner código PHP en cualquier lugar de su
documento HTML siempre y cuando el documento tenga la extensión
.php, por ejemplo: documento.php
Pero que separa al código PHP del resto del documento? Una
vez que el servidor "se da cuenta" de que en el documento
hay código PHP que necesita ser interpretado, empieza a buscar
en el mismo etiquetas como estas:
<?php aqui va su código
PHP ?>
Es decir: todo lo que este contenido entre <?php y ?>
es código PHP.
Entremos en materia.
Tomemos nuestro editor de texto y vamos a crear un archivo llamado
enviar_email.php.
En el mismo vamos a abrir una etiqueta PHP:
<?php
Lo primero que hay que hacer es atrapar las variables que llegaron
desde contactenos.html con el método POST explicado en la
parte 1. Si recuerda bien, son 3: nombre, email y mensaje.
Como comentabamos en la primara parte, PHP tiene una forma especifica
de definir cuales son las variables para su uso. Esta forma es mediante
un simbolo de pesos ($) antes del nombre de la variable.
$elnombre = $_POST['nombre'];
$elemail = $_POST['email'];
$elmensaje = $_POST['mensaje'];
A ver, a ver, mas despacio!
OK, ok, vamos a desglosar lo anterior:
$elnombre, $elemail
y $elmensaje son los nombres
de las variables que vamos a usar en este script y van a tomar el
valor de las variables que llegaron de la forma.
$_POST[''] Vamos a decir que
es la forma que PHP tiene de saber que tiene que buscar entre las
variables que llegaron con el método POST. En este caso estamos
interesados en tres variables:
$_POST['nombre']
$_POST['email']
$_POST['mensaje']
Un ejemplo:
$elnombre = $_POST['nombre']
En lenguaje coloquial esto se entenderia asi: La variable elnombre
tiene el valor de la variable nombre que llegó a este
script con el método POST.
Hay solo una parte que nos faltó, y es el punto y coma (;)
al final de cada línea. PHP necesita saber donde termina
cada paso de lo que necesita hacer, logramos esto utilizando un
punto y coma al final de cada linea.
Repetimos como quedaria:
$elnombre = $_POST['nombre'];
$elemail = $_POST['email'];
$elmensaje = $_POST['mensaje'];
En este momento PHP tiene en su memoria 3 variables que puede usar
y estas son : $elnombre, $elemail y $elmensaje. Estas tres variables
tomaron su valor de los campos respectivos que el visitante llenó
en la forma web.
Antes de enviar el e-mail necesitamos definir otras variables.
Que seria de un e-mail sin un asunto, verdad? Vamos a definir el
asunto:
$elasunto = "Me acaban de contactar
en mi sitio web!!";
Y adonde va a ir el e-mail!?:
$adondeva = "falcon@urbeinternet.com";
No olvide reemplazar esto con su propia dirección de correo
electrónico!.
Otra variable que es necesario definir antes de enviar el e-mail
son los encabezados del mail. Para que un e-mail pueda llegar a
su destino es necesario que tenga algunos encabezados, de otra forma
pueden ocurrir una serie de cosas raras.
$encabezados .= "From: $elnombre<$elemail>\n";
$encabezados .= "X-Sender: <$elemail>\n";
$encabezados .= "X-Mailer: PHP\n";
$encabezados .= "Return-Path: <$elemail>\n";
Mas despacio? ok, vamos a desglosarlo.
Lo primero que se nota aqui es que estamos definiendo varias variables
con el mismo nombre... como puede ser esto? Si se fija, después
del nombre de cada variable hay un punto antes del signo de igual.
Este punto significa que hay que "concatenar" todas la
variables que tienen el mismo nombre. Concatenar en un término
que les gusta usar a los programadores porque se oye muy "nice"
pero no significa otra cosa mas que "juntar".
Esto se hace solo para que el script sea mas fácil de leer
ya que de no haberlo hecho asi, la variable $encabezados deberia
haber sido definida asi:
$encabezados = "From: $elnombre<$elemail>\nX-Sender:
<$elemail>\nX-Mailer: PHP\nReturn-Path: <$elemail>\n";
Es tan grande que ni siquiera cupo en una línea, pero para
fines practicos es lo mismo solo que mas confuso y dificil de leer.
Otra cosa que salta a la vista es que estamos usando variables
definidas antes!.
Por ejemplo en el encabezado From estamos mencionando las
variables $elnombre y $elemail. Esto se hace porque
en este encabezado debe ir el nombre y la dirección de correo
eletrónico de quien envia el e-mail y la unica manera que
tenemos de saber cuales son esto datos es tomandolos de la variables
$elnombre y $elemail que nos llegó de la forma.
PHP reemplazará "$elnombre" y "$elemail"
con lo que el visitante haya llenado en el campo nombre y
email de la forma. Hay un ejemplo de esto mas abajo.
Hay algunos que ya habrán notado otra cosa rara en el segmento
de código de arriba, y esto son los \n casi al final
de cada línea.
Recordemos que un e-mail no es otra cosa que un archivo de texto
que viaja a través del ciberespacio. Un "backslash"
seguido de una "n" le dice a PHP que hay que crear una
nueva linea ya que esto es necesario para que los programas de correo
interpreten los encabezados correctamente.
Vamos a poner un ejemplo: Supongamos que Juan Perez que tiene el
e-mail: juanperez@hotmail.com nos desea enviar un e-mail. Llena
la forma y al llegar a esta parte los encabezados deben leerse asi:
From: Juan Perez<juanperez@hotmail.com>
X-Sender: <juanperez@hotmail.com>
X-Mailer: PHP
Return-Path: <juanperez@hotmail.com>
Si no hicieramos que hubiera nuevas lineas entre los encabezados,
estos se leerian asi:
From: Juan Perez<juanperez@hotmail.com>X-Sender: <juanperez@hotmail.com>X-Mailer:
PHPReturn-Path: <juanperez@hotmail.com>
Algunos servidores o programas de correo no entienden esto, ellos
buscan cada encabezado en una línea nueva, de ahi la importancia
de definir cada encabezado en una línea nueva.
Un pequeño recuento.
Vamos a ver como va nuestro script hasta este momento:
<?php
$elnombre = $_POST['nombre'];
$elemail = $_POST['email'];
$elmensaje = $_POST['mensaje'];
$elasunto = "Me acaban de contactar
en mi sitio web!!";
$adondeva = "falcon@urbeinternet.com";
$encabezados .= "From: $elemail<$elemail>\n";
$encabezados .= "X-Sender: <$elemail>\n";
$encabezados .= "X-Mailer: PHP\n";
$encabezados .= "Return-Path: <$elemail>\n";
Se ve bonito no es asi? vamos a continuar:
Vamos a formatear el mensaje para que también se vea bonito:
$mensaje .= "Aqui esta lo que llegó:\n\n";
$mensaje .= "$elnombre con la dirección: $elemail\n";
$mensaje .= "Escribió:\n$elmensaje\n";
Ya estamos listos para enviarlo!!!
Funciones.
Antes de enviar nuestro mensaje es necesario exlicar lo que son
las funciones en PHP. Vamos a decir que las funciones en PHP no
son mas que "acciones que PHP sabe como hacer" Hay cientos
de funciones, una de las mas usadas es la función mail().
Vamos a explicarla:
No podria ser mas fácil enviar un mail, lo unico que se
tiene que hacer es mencionar la funcion mail() y listo!. Dentro
de los parentesis deben ir varios datos y estos son: a donde va
el mail, el asunto, el mensaje y los encabezados. Todo separado
por comas:
mail(a donde va, el asunto, el mensaje, los encabezados);
Vamos a llenar la funcion mail con los datos de nuestro propio
script:
mail($adondeva, $elasunto, $mensaje, $encabezados);
Listo! se acaba de enviar un e-mail con los datos que el visitante
llenó en la forma! Solo nos falta cerrar la etiqueta PHP:
?>
Oye Falcón: al correr el script en el servidor si envia
el e-mail pero me pone solo una pantalla blanca...
Vamos a darle los utlimos ajustes pero eso va a ser en:
Parte 3: Los últimos detalles
-->
<-- Parte 1
|