![]() |
Descargar archivos mediante un formulario
Hola a todos! Estoy empezando a programar en PHP, en una web personal. La idea que me surgió es la siguiente: tengo muchos archivos .pdf para descargar, estos archivos, los muestro con una imagen de cada uno en una pagina "seleccionar_pdf.htm". Cuando se clickea en una imagen, se descargaría el .pdf, pero lo que yo quiero antes de que el visitante descargue el archivo, que llene un formulario y después si, que se descargue el archivo (formulario_descarga.php). Lo que yo quiero es hacer una sola pagina de formulario, y no una para cada .pdf que tengo, osea, tendría que pasar como variable, el nombre del pdf a la pagina del formulario. Una vez que el usuario puso enviar, en la pagina del form, automáticamente se pone a bajar el archivo, y se redirecciona a una pagina de agradecimiento por haber llenado los datos. La verdad es que no me doy cuenta como encararlo, esa es mi inquietud. Estoy con PHP5, y uso un hosting de dattatec, si precisan algún dato mas, me avisan, muchas gracias desde ya! Un abrazo, Nacho.
|
Hola
Como bien has dicho para saber que archivo quieres descargar tan solo tienes que pasar el nombre del archivo como parametro del formulario (GET o POST da lo mismo) una vez en el formulario lo guardas en un hidden. Cuando el formulario este validado, ya sea en javascritp o en PHP redireccionas a una página de esas típicas que dice "pulse aqui si el archivo no se descarga en 5 segundos", para hacer que la descarga se realice automaticamente tienes que utilizar el meta: Código:
<META HTTP-EQUIV="refresh" content="5,.."> |
Muchas gracias, con el nombre del archivo por variable y enviado a su vez, por un input hidden, lo pude solucionar. Gracias por tu tiempo!
De paso te dejo otra inquietud: ¿qué utilidad o ventaja tiene, que el archivo se descargue automáticamente, transcurrido cierto tiempo? Muchas gracias, un abrazo, Nacho. |
Hola,
Cita:
Yo creo que en este caso en concreto y en otros similares esa es la ventaja de la redirección automática. Al menos es lo que pienso, vamos. :) |
Si, ahora me terminó de cerrar la idea, y lo voy a probar. Muchas gracias por el tiempo! Un abrazo!
|
Hola
Esta claro que dec está más puesto que yo en usabilidad, yo simplemente he optado por la opción automática por las palabras usadas en la pregunta: Cita:
|
Respecto de la descarga de documentos
Es imprescindible que los usuarios llenen el formulario para bajar los documentos?
La solución que planteas no genera obligatoriedad de llenar el formulario. Un input hidden es un arma de doble filo. |
Hago una validación en javascript del llenado de los campos del form. Si los campos se llenan correctamente, se pone a bajar el archivo y se redirecciona a otra página.
Estoy leyendo el link que me pasó Kayetano, que habla sobre las des/ventajas de la validación del lado del cliente, como del lado del servidor. No sé a que te referís con arma de doble filo (soy novato en la programación dinámica de sitios web). Saludos, Nacho. |
Enviar información desde el cliente
Pues resulta que el hidden no será visto por el usuario y resulta útil ya que guarda información del documento pdf. Pero el que no sea visto en la representación de la página web no significa que no pueda ser visto en el código HTML de la página.
Si tú señalas el documento a descargar colocando el valor en un hidden, estará expuesto el valor o la dirección del documento. Un programador web que esté atento, verá que estás enviando el nombre del archivo pdf a descargar. La primera vez, llenará el formulario. Las siguientes, simplemente obviará el formulario y recurrirá a la dirección que llama el formulario y no parará hasta "vaciarte" los pdfs o las cosillas que tengas de valor sin pasar por el "molesto" formulario. Resultado: usa hidden si lo que quieres es obstaculizar. Pero si quieres proteger... ese es otro asunto. Saludos |
Si, entiendo el problema que planteas, voy a intentar pensar otra solución, para ver como puedo solucionar ese agujero en el código. Muchas gracias por el dato!
Un saludo, Nacho. |
Hola
Cita:
1. Se puede indicar el nombre del archivo pero no su situación, por lo que se complica la descarga saltandose el formulario. 2. Como ya se ha comentado en otro hilo, se puede (mejor dicho SE DEBE) validar del lado del servidor, es decir, comprobar que el formulario se a cumplimentado correctamente del lado del servidor, sistema muy complicado de saltarse. Además existe la opción de ofuscar o encriptar el nombre del archivo añadiendo algún tipo de código variable (fecha o hora) con lo que ya resultaría imposible la descarga directa. En resumen que el uso de hiddens es muy normal y no es ningún tipo de arma de doble filo. Como bien indicas los buenos programadores pueden hacer cosas muy buenas. |
O yo no entiendo o tu no entiendes
Cita:
Pero ese no es el caso. Lo que sucede es si la dirección (URI) del archivo está contenida en el hidden, entonces, conociéndola ya no es necesario llenar el formulario. Únicamente es necesario escribir el URI que está en el hidden y ya está hecho todo no crees? |
Si se pone toda la ubicación pues ciertamente nada impide descargar directamente el archivo. Pero creo que kayetano se refirió desde un principio al nombre del archivo.
En realidad, el nombre del archivo se pasa como podría pasarse cualquier otro identificador (un número por ejemplo), y es el servidor quien- con base en dicho identificador -escoge el archivo real y lo manda al cliente. // Saludos |
No es necesario colocar todo el nombre
Como dije, si observas el lugar de descarga del documento, el nombre base es suficiente para descargar otros documentos de los que tienes el nombre base.
En cuanto a la segunda parte de tu última observación, es lo que debe hacerse. En realidad no se maneja el nombre del archivo a descargar, sino una representación de ese nombre. Y en ese caso, no importa que se use hidden o get, ya que debe existir un programa de transformación de la representación que necesariamente validará la data recibida. |
Ya veo por donde va tu preocupación. pero tu estás suponiendo que si tengo el sitio www.acme.com y el nombre pepe_perico, entonces podré encontrar el archivo en www.acme.com/pepe_perico.pdf. Pero no tiene por qué ser así. Los archivos reales pueden estar en cualquier otra parte, incluso fuera del árbol de directorios web; el servidor anexará la ubicación real al nombre pero eso jamás lo verá el cliente.
// Saludos |
Bueno, hablando de peras y manzanas...
Cita:
Sobre la metodología para proteger archivos al momento de descargarlos, bien podríamos abrir otro hilo. Saludos |
Hola
Por poner un ejemplo de lo que comenta román, yo en alguna ocasión he guardado tanto fotos como documentos en la propia base de datos, con lo que no existe nungún tipo de ruta. semptrion como puedes ver hay muchas alternativas y posibilidades a la hora de proteger la descarga de archivos, no hay que cerrarse a una sola idea. |
Fotos en la base de datos?
Y podríamos hablar mucho del asunto, pero en este caso, les repito, el tema es que nuestro amigo pampitasnowman señalaba que "con el nombre del archivo por variable y enviado a su vez, por un input hidden, lo pude solucionar..." con lo que me pareció se generaba un hueco de seguridad. De ahí que todas las reflexiones vienen medio que añadiendo contenido a algo que no se ha planteado :mad:.
Pero aquí salta un tema más polémico y que siempre ha llamado mi atención: se deben colocar fotos en una base de datos? :eek: Pero para que discutamos sobre ello, decidí abrir un nuevo tema de conversación http://www.clubdelphi.com/foros/showthread.php?t=43578 Así que, saludos y que estén bien. |
La franja horaria es GMT +2. Ahora son las 07:14:12. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi