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

Comentamos el fragmento de enviopostal.php que se encarga de visualizar la postal antes de ser enviada

Hemos comentado previamente la existencia de un segundo bloque principal del script delimitado por una condición if que se encarga de evaluar si el visitante ha pedido visualizar la postal. Esta condición es definida inicialmente por la línea:

if (isset($ver)) //Si queremos ver la postal

Si este no es el caso, eso quiere decir que el script ha sido llamado para enviar la postal en cuyo caso lo primero que habrá que verificar es si el formulario ha sido rellenado satisfactoriamente y en caso positivo enviar la postal:

elseif (!$variables_formulario[0] or !$variables_formulario[1] or !$variables_formulario[2] or !$variables_formulario[3] or !$variables_formulario[5])

Los primeros dos casos, ver postal o avisar de un formulario incompleto, no aportan nada nuevo con respecto a todo lo visto. Es la tercera parte de esta condición, referente al envío de la postal, la que reviste un cierto interés.

El hecho de enviar la postal significa dos cosas:

  • Incluimos en nuestra base de datos postal, en nuestra tabla postal un nuevo registro en el que almacenaremos todos los datos que necesitaremos para mostrar la postal cuando el destinatario venga a buscarla.

  • Enviamos un e-mail al destinatario para avisarle de la existencia de una postal a su nombre en nuestro sitio web.

    A cada postal que se introduzca en la base de datos se le asignará un número de identificación para que el destinatario pueda acceder luego a la postal apropiada. Si asignásemos un número correlativo a cada postal que se genere, podría pasar que un usuario acceda a la postal de otros con simplemente cambiar el numero de la postal que le asignamos al número siguiente o al anterior. Para evitar que esto ocurra, vamos a generar un número aleatorio dentro de un amplio rango, que sirva para identificar a las postales creadas. Además, se tendrá que comprobar que ese número aleatorio no esté ya ocupado con una postal. Veamos con detenimiento cada una de estas acciones.

    La primera acción a realizar consiste en conectar con la base de datos en la forma que ya hemos visto en el script verpostales.php.

    El siguiente paso consiste en generar un número aleatorio que no esté ocupado para asignarlo como identificador a la postal. Con la función srand() se hace una semilla, lo que nos permite generar números aleatorios que no se repitan. A continuación nos metemos en un bucle que genera un número aleatorio, intenta extraer de la base de datos una postal que tenga ese número de identificación y, si dicho número aleatorio ha sido ya utilizado para otra postal, llevamos a cabo otra iteración del bucle. Para extraer los datos de la base ejecutamos una consulta clásica en lenguaje SQL. El programa saldrá del bucle en el momento en el que el numero aleatorio definido no esté siendo utilizado para otra postal residente en la base de datos.

    do
    {
       $aleatorio = rand(0,32000);
       $resultid = mysql_db_query("postal","Select * From postal Where id_postal=" . $aleatorio);
       $dameFila=mysql_fetch_array($resultid);
    }while ($dameFila);

    Este es un ejemplo en el que un bucle do/while puede resultar útil con respecto a un while simple dado que necesitaremos ejecutar el bucle al menos una vez para generar nuestro numero aleatorio y comprobar que es único en nuestra base de datos.

    Una vez tenemos un identificador de la postal exclusivo nos disponemos a introducir en la base de datos la información de las variables_formulario y el identificador. Para ello construimos dinámicamente una sentencia SQL que inserte la información que hemos recibido del formulario.

    A continuación se ha de mandar el correo electrónico informando de la creación de la postal. En el ejemplo, primero creamos una serie de variables que nos ayudarán a configurar el mensaje de correo electrónico. Estas variables son:

  • $asunto: Para el asunto del correo electrónico
  • $cuerpo_mensaje: Con un texto que informa de la creación de la postal y la URL para ir a recogerla. En la dirección web que construimos pasamos por parámetro el número aleatorio asignado a la postal, para que la página encargada de mostrarla sepa cuál es la postal que debe sacar por pantalla.
  • $headers_mensaje: Para indicar algún dato adicional que se coloque en la cabecera del mensaje. En este caso indicamos que lo envía DesarrolloWeb.

    Con la función mail(), pasándole los parámetros de configuración, enviamos el correo electrónico. La función mail devuelve un valor que nos servirá más tarde para saber si el mensaje se envió correctamente o si hubo algún error.

    En el caso de que todo haya funcionado correctamente, damos por finalizada la sesión por medio de la función session_destroy con lo que elimenaremos aquellas variables que nos han servido a llenar el formulario.


    Ir a la aplicación
  • Rubén Alvarez

    Rubén es doctor en química y programador aficionado con experiencia en PHP.

    Manual