miércoles, 3 de agosto de 2016

Formularios con PHP + Html(II). Planteamiento y código Html.

Como ya os expliqué en un post anterior, el objetivo de mi web de prueba es crear una especie de biblioteca virtual para poder compartir libros. Hasta ahora hemos visto como hacer el Html de la web con su formulario de contacto, pero como ya os comenté, este formulario distaba de tener un funcionamiento ideal, así que dejamos pendiente hacerlo usando PHP + Html.


Además, voy a incluir algunas funciones mas a este formulario:

  • Adjuntar archivos. Para que los usuarios no solo descarguen de la web si no también carguen archivos al servidor.
  • Comprobar el tamaño de los archivos. Es para una biblioteca así que se supone que solo se van a subir ebooks que por lo general pesan muy poquito.
  • Comprobar que los campos del nombre y el correo no estén vacíos.
De momento, aunque esté los segundo en el título, veamos primero el código Html del formulario:

 <form action="prueba-mail.php" METHOD="POST" enctype="multipart/form-data">

      <label>Nombre <span>(requerido)</span></label>
      <input type="text" name="nombre" maxlength="30" />


<!-- Campo "nombre" -->

      <label>Correo-e <span>(requerido)</span></label>    
      <input type="text" name="email" />


<!-- Campo email -->

      <label>Comentario</label>    
      <textarea name="comentario"rows="12" cols="60" ></textarea>
      <input class="btn" type="submit" name="enviar" />


<!-- Campo para el texto o comentario -->

      <label>Envíanos tu libro <span>tamaño máximo 2MB</span></label>
      <input type="file" name="adjunto" />


<!-- Adjuntar un archivo -->

      <input type="hidden" name="tamanomaximo" value="2100000" />


<!-- Atención a esta línea -->

 </form>



Es el típico formulario en html solo con algunas puntualizaciones:
  • En "action" pongo el scipt en PHP, en este caso prueba-mail.php
  • El "method" tiene que ser "POST" para que las variables puedan ser leídas por el script en PHP.
  • "enctype" debe ser "multipart/form-data" para poder envía un archivo adjunto.
  • Al final creamos una variable del tipo "hidden" (no es visible para el usuario) y con un "value" de 2100000, aproximadamente 2 MB que es el límite que voy a ponerle al adjunto. En este último punto hay que tener en cuenta que el servicio de host ya tiene un límite para subidas de archivos al servidor que depende del servicio que estéis pagando, gratuito o de pago, y dentro de los de pago, dependerá del servicio que tengáis contratado. 
Ahora vamos con el planteamiento del script, esta fase yo la veo imprescindible antes de hacer algún programa en cualquier lenguaje orientado a objetos, porque si lo empezáis de cero sin ningún tipo de esquema o diagrama, va a ser una locura pues entramos en los escabrosos terrenos de las estructuras lógicas. Una vez que se tiene algo mas de rodaje se es capaz de crear programas desde cero o copiando y pegando bloques de código que ya hayas usado y que se pueden reutilizar.

Este es el diagrama:

Haz clic para hacer zoom

Lo he dividido en cuadros numerados para mejorar la explicación. Antes de empezar recomendaros que os leáis mi anterior post de introducción al PHP si habéis venido a parar por aquí por primera vez.


  1. En este primer bloque analizamos el contenido del adjunto, con un condicional if nos preguntamos si el tamaño del adjunto es mayor que cero Y(AND) si el tamaño del adjunto es menor o igual que la variable tamanomaximo que hemos declarado en el formulario en Html, al usar el operador de comparación AND se tienen que cumplir las dos condiciones para que el resultado del condicional sea TRUE. En caso de FALSE vamos al bloque 4, en caso TRUE seguimos al bloque 2.
  2. Proceso del adjunto, mostramos algunos mensajes de control, tanto para el usuario como para nosotros, pero ya veremos mas al detalle este punto en el siguiente post.
  3. Una vez procesado el adjunto lo subimos al server, es conveniente crear una carpeta en el mismo que contenga los archivos que suben los usuarios y que no se mezclen con los de nuestra web. Aquí incluyo otro condicional If para comprobar que efectivamente se ha producido la subida, en caso TRUE se muestra un mensaje afirmativo y en caso FALSE un mensaje de error.
  4. A este punto llegamos si el punto 1 ha dado FALSE, aquí con otro condicional comprobamos si el tamaño del adjunto es igual a cero, en caso TRUE mostramos el mensaje "no hay adjuntos" en caso FALSE, es que el adjunto no es igual a cero, ni menor o igual que el tamaño máximo así que por lógica es mayor, con lo que la subida no esta permitida y mostramos el mensaje correspondiente.
  5. Tras terminar con el fichero adjunto (si lo hay) pasamos a comprobar el nombre del usuario que nos deja un mensaje y su dirección de correo, si hay algo escrito, obtenemos TRUE, se envía el mensaje y damos la opción de volver al inicio; en caso FALSE mostramos mensaje de error y damos la posibilidad de volver al formulario.

Y bueno de momento lo dejamos aquí, en un siguiente post os mostraré como me ha quedado el script en PHP y podréis probarlo, un saludo a tod@s!!




    No hay comentarios:

    Publicar un comentario