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

Creamos un formulario dinámico por medio de cookies y variables de sesión

Las imágenes mostradas en verpostales apuntan hacia la página formulario.php de la cual os presentamos el listado a continuación:

<?
//Iniciamos la sesion en la pagina registrando variables_formulario
session_register('variables_formulario');

//Si las variables_formulario no estan creadas las definimos vacias
if (isset($variables_formulario)==0)
{
   $i=0;
   while ($i<=6)
   {
      $variables_formulario[]="";
      ++$i;
   }
}

//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");

//Creamos el formulario, rellenamos los campos que conocemos con session y/o cookies
//Enviamos un dato escondido: id_imagen
?>
<table align="center" border="0" cellpadding="2" cellspacing="2">
<td colspan="2" align="center" style="celda1"><font color="#9933ff">Ten la amabilidad de rellenar el formulario</font></td>
<form action="enviopostal.php" method="post">
<tr>
   <td align="center">Email destinatario<br><input type="Text" name="email_destino" size="20" maxlength="50" value="<? echo $variables_formulario[0]; ?>"></td>
   <td align="center">Nombre destinatario<br><input type="Text" name="nombre_destino" size="20" maxlength="50" value="<? echo $variables_formulario[1]; ?>"></td>
</tr>
<tr>
   <td align="center">Email remitente<br><input type="Text" name="email_origen" size="20" maxlength="50" value="
<?
   if (isset($email))
      echo $email;
   else
      echo $variables_formulario[2];

?>
"></td>
   <td align="center">Nombre remitente<br><input type="Text" name="nombre_origen" size="20" maxlength="50" value="
<?
   if (isset($nombre))
      echo $nombre;
   else
      echo $variables_formulario[3];

?>
"><td>
</tr>
<tr>
   <td align="center" colspan="2"><input type="Checkbox" name="avisar" <? echo $variables_formulario[4]; ?>>Quiero ser avisado de la recepción</td>
</tr>
<tr>
   <td align="center" colspan="2">Texto postal<BR><textarea name="texto" cols="40" rows="6"><? echo $variables_formulario[5]; ?></TEXTAREA></td>
</tr>
<tr>
   <td align="center" colspan="2"><input type="Submit" value="Enviar" name="enviar">
   &&nbsp;&&nbsp;&&nbsp;<INPUT type="Submit" value="Ver postal" name="ver"></td>
</tr>
</table>
<input type="Hidden" name="id_imagen" value="<? echo $id ?>">
</form>
<?
//Generamos enlace hacia atras y cierre de documento
html_pie_volver("index.php")
?>

Es en esta página donde daremos por comenzada la sesión y lo haremos registrando una variable de tipo array que llamaremos variables_formulario cuyo contenido va a ser, obviamente, los datos introducidos en este formulario.

El objeto de usar una variable de sesión para conservar los valores del formulario en otras páginas es de índole práctico: Queremos que, si el internauta vuelve hacia atrás para corregir su postal antes de enviarla, no se vea obligado a rellenar de nuevo el formulario.

Definido el array, el paso siguiente es inicializarlo en el caso que no lo esté ya. Ya hemos explicado que la función isset nos dice si una variable ha sido inicializada o no. En el caso de que no lo esté, llenaremos 7 elementos del array con contenidos nulos ("") que serán sustituidos por los valores del formulario en el siguiente script.

Tras incluir la librería de funciones y generar el encabezado, el siguiente paso es crear el formulario. Esto lo haremos fundamentalemente por medio de código HTML dentro del cual embeberemos ciertas etiquetas en PHP para rellenarlo total o parcialmente.

En efecto, si el visitante acaba de ver su postal y viene a corregirla, en lugar de encontrarse un formulario vacío, éste conservara los datos que haya introducido previamente ya que los valores habrán sido almacenados en variables de sesión.

Las cookies son introducidas únicamente en los campos del formulario correspondientes al e-mail ($email) y nombre del remitente ($nombre). De esta forma permitimos al internauta, al visitarnos una segunda vez, disponer de un formulario parcialmente relleno con sus datos. Lo único que tendrá que hacer es completarlo con los del destinatario y escribir el texto.

Hay que tener en cuenta que las cookies pueden estar anuladas por el usuario por lo que al rellenar el formulario, si no disponemos de las cookies bien por que éstas estén desautorizadas o porque el internauta nos visite por primera vez, el script colocará la variables_formulario de sesión correspondiente.

Hemos querido introducir una técnica comúnmente utilizada para transferir variables por medio de un formulario sin que el usuario sea consciente de ello:

<input type="Hidden" name="variable" value="valor">

Por medio de este tipo de etiquetas, estamos enviando una variable y su valor por medio del formulario. Esta variable no se visualiza en la página y que sólo puede ser detectada mirando el código fuente. La forma de recogerla en la página destino del formulario es, como para cualquiera de las otras, por simple llamada en el código.

Puede que este formulario, sobre todo la parte de las cookies y las variables de sesión, quede un poco vago después de haberlo visto una primera vez. Esperamos que las dudas existentes puedan ser resueltas al estudiar el siguiente script y volviendo a leer éste, ya que, ambos utilizan variables comunes y resulta complicado entender uno sin ser consciente del funcionamiento del otro.



Ir a la aplicación

Rubén Alvarez

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

Manual