> Manuales > Sistema de envío de postales en PHP

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:

Hemos querido fusionar ambas tareas en un mismo archivo para de esta forma introducir técnicas con condicionales if que nos permitan discriminar una de las dos tareas en función de la orden del visitante. Por el momento contentémonos de echar una ojeada al script para entrar en estos detalles posteriormente:

<?
//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 aficionado con experiencia en PHP.

Manual