¡Hola, bienvenidos a la clase número once del Taller de PHP! Ya vimos todo el frontend del formulario, ahora nos resta ver como levantamos las variables enviadas através del mismo con PHP.
Hay que tener mucho cuidado en esta parte, como en general, dado que un pequeño descuido al tipear el código puede provocar un error al intentar enviar los datos a través del formulario. ¡Sigue atentamente las indicaciones y no tendrás problemas!
Recibiendo los datos
Antes de ver como recibimos los datos, veamos como nos quedó el formulario de contacto completo. Supongamos que lo tenemos en el archivo contacto.php
<form action="contacto_script.php" method="post" id="contacto">
<label for="input_nombres">Nombre y Apellido</label><br />
<input id="input_nombres" type="text" name="nombres" value="" /><br /><br />
<label for="input_email">Email</label><br />
<input id="input_email" type="text" name="email" value="" /><br /><br />
<label for="input_sexo">Sexo</label><br />
<select id="select_sexo" name="sexo">
<option value="M">Masculino</option>
<option value="F">Femenino</option>
</select><br /><br />
<label for="textarea_mensaje">Mensaje</label><br />
<textarea id="textarea_mensaje" name="mensaje" rows="5" cols="50"></textarea><br /><br />
<input type="submit" name="submit" value="Enviar consulta" />
</form>
Este formulario será enviado al archivo contacto_script.php por el método post. Ahora la pregunta del millón es qué contiene el archivo contacto_script.php.
contacto_script.php
Este archivo va a interpretar los datos enviados a través del formulario. Para ello lo que vamos a hacer es primero ver si llegaron todos los parámetros y agregarlos cada uno a una variable.
<?
// definimos las variables o marcamos el error
if ( !empty($_POST['nombres']) ) $nombres = $_POST['nombres']; else $error = true;
if ( !empty($_POST['email']) ) $email = $_POST['email']; else $error = true;
if ( !empty($_POST['sexo']) ) $sexo = $_POST['sexo']; else $error = true;
if ( !empty($_POST['mensaje']) ) $mensaje = $_POST['mensaje']; else $error = true;
?>
Expliquemos paso por paso.
Lo primero que hacemos es preguntar si NO está vacÃo el parámetro enviado por post, ya que la función empty pregunta si esta vacÃo (va a responder si el contenido es un string vacio, un cero o un false) pero como le anteponemos el ! estamos preguntando por lo contrario.
En caso de que nuestra condición se cumpla, asignamos a una variable el parámetro recibido, caso contrario definimos una variable llamada error con contenido TRUE. Esta última nos va a servir para hacer que todos los campos del formulario sean obligatorios a la hora de enviarse.
Perfecto, ya tenemos definidas nuestras variables ahora vamos a verificar que no exista la variable error, y si existe redireccionamos a una página con el mensaje de error.
// verificamos que no exista un error
if ( !empty($error) ) {
header( 'Location: contacto_error.php' );
die;
}
¿Qué esta pasando acá?
Lo mismo que antes, preguntamos si no está vacÃo error, si la respuesta a esta pregunta es verdadera, tenemos un problema, uno de los campos del formulario no fue completado, por lo que el script de php lo vamos a frenar y vamos a redireccionar al usuario a una página que contenga el mensaje de error, esta página va a ser en este caso contacto_error.php.
La redirección la hacemos por medio de la función header( ‘Location: …’ ) que va a hacer que recargue la nueva página que le estamos pasando, y tenemos que poner la linea siguiente con el die para que se frene el script en ese momento y pueda ejecutarse la función header, ya que si no frenamos el script, primero va a leer y ejecutar todo y después va a tener acción el header( ‘Location: …’ ).
La página contacto_error.php puede contener simplemente un mensaje que diga “El formulario de contacto no ha podido ser enviado, por favor asegúrese de que haya completado todos los campos correctamente.” y un link a la página del formulario de contacto para que vuelva a enviarlo.
Cuerpo del Mensaje
Nos resta por definir el cuerpo del mensaje que queremos recibir a través del formulario de contacto, el mismo puede ser algo asÃ:
// definimos el cuerpo del email
$cuerpo = "
De: $nombres \n\r
Email: $email \n\r
Sexo: $sexo \n\r
Mensaje: \n\r
$mensaje
";
Como el e-mail llega como texto plano, debemos definirle los saltos de linea con \n\r.
Perfecto, ya definimos las variables, ya nos aseguramos que no tengo ningún error, creamos el cuerpo del email, ahora lo que vamos a hacer es enviar el mensaje que recibimos através del formulario a nuestra casilla de email. Para ello vamos a utilizar una funcion de php que se llama mail()
Función mail
mail ( string $para , string $asunto , string $mensaje );
esta función va a responder true o false, dependiendo si se pudo ejecutar correctamente, en nuestro script quedaria algo asÃ:
// enviamos el email
if ( mail( 'direccion.del.destinatario@email.com','Recibiste un mensaje a través del formulario de contacto de tu sitio',$cuerpo ) ) {
header( 'Location: contacto_exitoso.php' );
die;
} else {
header( 'Location: contacto_error.php' );
die;
}
FÃjense que en el primer parámetro de la función mail agregamos a dónde queremos que se envÃe el mensaje, en el segundo parámetro ponemos el asunto y en el tercero el cuerpo que definimos anteriormente.
Si la condición es verdadera, es decir, el e-mail se envió correctamente redireccionamos a una nueva página llamada contacto_exitoso.php, la cual contendrá un mensaje del estilo: “El e-mail ha sido enviado correctamente, a la brevedad nos pondremos en contacto con usted.”
Y en caso de que no se cumpla redireccionamos a la página de error.
Script Completo
El script completo quedarÃa algo asi:
<?
// definimos las variables o marcamos el error
if ( !empty($_POST['nombres']) ) $nombres = $_POST['nombres']; else $error = true;
if ( !empty($_POST['email']) ) $email = $_POST['email']; else $error = true;
if ( !empty($_POST['sexo']) ) $sexo = $_POST['sexo']; else $error = true;
if ( !empty($_POST['mensaje']) ) $mensaje = $_POST['mensaje']; else $error = true;
// verificamos que no exista un error
if ( !empty($error) ) {
header( 'Location: contacto_error.php' );
die;
}
// definimos el cuerpo del email
$cuerpo = "
De: $nombres \n\r
Email: $email \n\r
Sexo: $sexo \n\r
Mensaje: \n\r
$mensaje
";
// enviamos el email
if ( mail( 'direccion.del.destinatario@email.com','Recibiste un mensaje a través del formulario de contacto de tu sitio',$cuerpo ) ) {
header( 'Location: contacto_exitoso.php' );
die;
} else {
header( 'Location: contacto_error.php' );
die;
}
?>
| << CLASE ANTERIOR |






Jueves, 3 de Abril de 2008 a las 18.53
q tal.. S aludos ….
solamente tengo una pregunta en donde puedo placticar PHP… en dreaw! o en dode,…
por que lo hago escrito pero si es platico mucho mejor para poder implementar todo y jugar con todo….
ok.
nos vemos espero su respuesta—………
SALUDOS A TODOS…..
ATTE: FREEMAN…..
mi email por los que me quierna agregar….?
Lunes, 7 de Abril de 2008 a las 13.17
Muy bueno…lo voy a bajar y loprobare en un SItio q estoy haciendo
Martes, 8 de Abril de 2008 a las 15.42
¡Hola, Freeman!
PHP es un lenguaje de programación que puedes escribir en un simple blog de notas (notepad), también puedes utilizar el Dreamweaver
Martes, 15 de Abril de 2008 a las 02.09
Que tal, Te felicito por la loable labor que haces al impartir cursos de php, entre otros, me gusta la forma en que lo enseñas pues lo haces en un nivel entendible. Te comento actualmente estoy aprendiendo php de un libro que compre y lo complemento con lo que tu enseñas, en el tema de los formularios me gustaria que nos explicaras un poco hacerca de enviar archivos, tb procesando archivos, bueno te comente que ya estoy aprendiendo un poquito asi que si puede servir de algo te envia algunas cosas sobre estos temas, solo dime si a tu correo o aqui mismo los escribo, saludos y hasta pronto, estamos para servios!!!
Jueves, 17 de Abril de 2008 a las 18.49
Hola, tengo dudas en cómo insertar un comentario y que este aparezca en una dirección de correo para ser valorado antes de publicarlo. Saludos
Viernes, 18 de Abril de 2008 a las 10.54
Hola Kendrick, todavÃa no expliqué lo que me estas preguntando jeje, pero en cuanto arranque con las clases que hacen referencia a la creación de un “blog” lo voy a explicar.
Tenes que tener un poquito de paciencia solamente, gracias por seguir el curso.
Saludos.
Jueves, 24 de Abril de 2008 a las 12.15
hola, te escribo porque, cuando ejecuto el archivo contacto.php todo bien, pero cuando presiono el boton enviar consulta(obvio con todos los datos ingresados), sale el siguente error:
Warning: mail() [function.mail]: Failed to connect to mailserver at “localhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in E:\AppServ\www\Clase11\contacto_script.php on line 23
eh instalado, un servidor SMTP del mismo Windows, pero daba el mismo error, he bajado uno que se llama QK SMTP Server 3, y como que funciona (muestra el archivo contacto_exitoso.php), pero en realidad no envia nada.
Que es lo que podria hacer para darle solucion al problema, que imagino no sere el unico que lo tiene, GRACIAS!!
Jueves, 24 de Abril de 2008 a las 12.19
bueno, y era solo ese el problema cuando solo ponia el if sin else porque de lo contario tambien me sale el error anterios junto al segundo:
Warning: mail() [function.mail]: Failed to connect to mailserver at “localhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in E:\AppServ\www\Clase11\contacto_script.php on line 23
Warning: Cannot modify header information - headers already sent by (output started at E:\AppServ\www\Clase11\contacto_script.php:23) in E:\AppServ\www\Clase11\contacto_script.php on line 26
bueno espero su ayuda, GRACIAS!!!
Martes, 13 de Mayo de 2008 a las 22.34
Hola, Justi
Estoy encantado con tu curso, hasta ahora lo he seguido sin ningún problema.
Sin embargo, en esta clase, el scrip de contacto_scrip.php no me funciona.
Me envÃa este mensaje ” Warning: Cannot modify header information - headers already sent by (output started …etc ” que traducido viene a ser “Advertencia: No puede modificar la información de header - headers ya enviados por (la salida comenzada …etc. ”
Si en el condicional
“if ( !empty($error) ) {
header( ‘Location: contacto_error.php’ );
die;
}”
sustituyo
“header( ‘Location: contacto_error.php’ );
die;”
por otra instruccioón, por ejemplo “echo $nombres;” y en el header del final hago lo mismo, la instrucción se ejecuta y el correo es enviado sin novedad.
Te agradecerÃa me explicaras qué hago mal.
Aprovecho para saludarte y felicitarte por tu curso