Presentamos el listado del script principal de la aplicación y comentamos algunos puntos generales
El formulario que acabamos de ver propone dos botones distintos (enviar y ver) que, por pertenecer a la misma etiqueta form, apuntan hacia el mismo script: enviopostal.php.
Este script ha de encargarse por lo tanto de llevar a cabo ambas tareas:
Diremos, antes de pasar a un comentario detallado, que el script esta dividido en dos bloques principales delimitados por dos condicionales.
El primero de estos bloques gestiona el almacenamiento de las cookies y el relleno de la variable de sesión a partir de los datos del formulario. Esto se llevara únicamente a cabo cuando el visitante venga de la página formulario.php.
El segundo bloque es una instrucción if que ejecuta una u otra serie de sentencias dependiendo de si el visitante quiere ver la postal o desea enviarla. En este condicional se tiene en cuenta también la posibilidad de que el usuario no haya rellenado el formulario completamente.
Pasemos a ver más detalladamente cada una de estas partes...
Ir a la aplicación
Este script ha de encargarse por lo tanto de llevar a cabo ambas tareas:
- Visualizar la tarjeta que el internauta ha compuesto
- Enviar la postal al destinatario
<? //Iniciamos la sesion en la pagina session_start(); //Comprobamos si venimos de esta misma pagina o de la del formulario if (!ereg($PHP_SELF,$HTTP_REFERER)) //Si venimos del formulario { //Guardamos las cookies para futuras visitas SetCookie("nombre",$nombre_origen,time()+86400*365); SetCookie("email",$email_origen,time()+86400*365); //Creamos el array variables_formulario tipo sesion con los datos del formulario $variables_formulario[0]=$email_destino; $variables_formulario[1]=$nombre_destino; $variables_formulario[2]=$email_origen; $variables_formulario[3]=$nombre_origen; $variables_formulario[5]=$texto; $variables_formulario[6]=$id_imagen; //Miramos si el checkbox esta validado if (isset($avisar)) $variables_formulario[4]="checked"; else $variables_formulario[4]=""; } //Incluimos la libreria de funciones include("funciones.php"); //Creamos el encabezado HTML html_encabezado("Servicio de postales de DesarrolloWeb","Servicio de postales gratuitas para todo tipo de felicitaciones","postal, navidad, san valentin, cumpleaños, felicitacion"); //Miramos si queremos ver o enviar la postal if (isset($ver)) //Si queremos ver la postal { //Generamos la postal ?> <table align="center" cellspacing="0" cellpadding="2" border="0" bgcolor="White"> <tr> <td colspan="2" align="center" bgcolor="#ccff00"><font color="#9933ff">Aquí tienes la postal que recibirá <? echo $variables_formulario[1]?></font></td> </tr> <tr> <td align="left" valign="middle"><img src="2lightho.gif" width="32" height="32" border="0" alt=""></td> <td rowspan="2" width="300"><? echo $variables_formulario[1].",<br> ".$variables_formulario[5]."<br>".$variables_formulario[3];?></td> </tr> <tr> <td><img src="<? echo"imagenes/".$variables_formulario[6].".gif" ?>" border="0"></td> </tr> </table> <div align="center"><a href="enviopostal.php">Enviar</a></div> <? //Generamos enlace hacia atras y cierre de documento html_pie_volver($HTTP_REFERER); } //Si el formulario no esta completamente relleno... elseif (!$variables_formulario[0] or !$variables_formulario[1] or !$variables_formulario[2] or !$variables_formulario[3] or !$variables_formulario[5]) { echo "<div align=\"center\">Tu formulario esta incompleto, por favor complétalo para poder enviar la postal</div>\n"; //Generamos enlace hacia atras y cierre de documento html_pie_volver("formulario.php"); } else //Querra decir que enviamos la postal { //Conectamos a la BD $connectid=mysql_conexion(); //Creamos un numero aleatorio para el id_postal que no este utilizado ya //Primero creo una semilla para los numeros aleatorios srand ((double) microtime() * 1000000); //Generamos un numero aleatorio distinto hasta que tengamos un numero libre do { $aleatorio = rand(0,32000); $resultid = mysql_db_query("postal","Select * From postal Where id_postal=" . $aleatorio); $dameFila=mysql_fetch_array($resultid); }while ($dameFila); //Insertamos los datos necesarios en la BD $sentencia_sql = "Insert Into postal (id_postal, texto,email_destinatario, nombre_destinatario, email_remitente, nombre_remitente, id_imagen,avisar) "; $sentencia_sql .= "Values (" . $aleatorio . ",'" . $variables_formulario[5] . "','" . $variables_formulario[0] . "','" . $variables_formulario[1] ; $sentencia_sql .= "','" . $variables_formulario[2] ."','" . $variables_formulario[3] ."'," . $variables_formulario[6] .",'".$variables_formulario[4]."')"; mysql_db_query("postal",$sentencia_sql); //Enviamos el e-mail al destinatario //Variables de configuracion del correo $asunto = "Has recibido una postal"; $cuerpo_mensaje = "Saludos cordiales ".$variables_formulario[1].",\n\n"; $cuerpo_mensaje .= $variables_formulario[3]." te ha enviado una postal.\n"; $cuerpo_mensaje .= "Para recoger la postal que has recibido, accede a la siguiente dirección:\n"; $cuerpo_mensaje .= "http://localhost/postal/leepostal.php?id_postal=" . $aleatorio; $headers_mensaje = "From: DesarrolloWeb>\n"; //Funcion para enviar el correo $mailenviado = mail ($variables_formulario[0], $asunto, $cuerpo_mensaje, $headers_mensaje); //Mensaje para informar del exito o fracaso de las operaciones if ($mailenviado) { echo "<div align=\"center\">Tu postal ha sido enviada correctamente</div>\n"; session_destroy(); } else echo "<div align=\"center\">Ha habido un error en el envio del correo electrónico</div>"; //Generamos enlace hacia atras y cierre de documento html_pie_volver("index.php"); } ?> |
Diremos, antes de pasar a un comentario detallado, que el script esta dividido en dos bloques principales delimitados por dos condicionales.
El primero de estos bloques gestiona el almacenamiento de las cookies y el relleno de la variable de sesión a partir de los datos del formulario. Esto se llevara únicamente a cabo cuando el visitante venga de la página formulario.php.
El segundo bloque es una instrucción if que ejecuta una u otra serie de sentencias dependiendo de si el visitante quiere ver la postal o desea enviarla. En este condicional se tiene en cuenta también la posibilidad de que el usuario no haya rellenado el formulario completamente.
Pasemos a ver más detalladamente cada una de estas partes...
Ir a la aplicación
Rubén Alvarez
Rubén es doctor en química y programador principalmente en sus ratos libres con...