Comunidad de diseño web y desarrollo en internet online

pulsar enlace a PDF y enviar variable a la vez

Citar            
MensajeEscrito el 29 Ene 2011 03:41 pm
Hola. Estoy haciendo una página web en PHP con MySQL. En ella tengo diferentes enlaces a documentos pdf. Cuando el usuario abra un documento debo también enviar una señal o variable a una tabla SQL. De esta forma yo sabre que ese documento ha sido abierto por este usuario. Creo que solamente con HTML y PHP no lo puedo hacer. Ademas me gustaría saber como recoger la fecha de esa pulsación. ¿Podeis ayudarme? Gracias.

Por dfmurillo

0 de clabLevel



 

msie8
Citar            
MensajeEscrito el 29 Ene 2011 03:51 pm
Lo suyo es que en vez de pinchar en un documento PDF tal cual lo redirijas a una página PHP con el ID del documento que se quiere descargar.

En vez de <a href="mi/ruta/al/archivo.PDF">Pincha para descargar</a>,
pon <a href="descargador_de_archivos.php?idarchivo=XXX">Pincha para descargar</a>.

Dentro de esa página lo que debes hacer es actualizar la base de datos con la fecha, hora y todo aquello que quieras guardar y posteriormente, descargar el archivo en PDF desde la página PHP.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 29 Ene 2011 04:16 pm
Creo que lo veo. Pero el caso es que no se lo que es "descargador_de_archivos.php", ¿es una pagina que me invento yo?, ¿como hago?. Me has ayudado bastante pero todavia no lo pillo bien.
Gracias.

Por dfmurillo

0 de clabLevel



 

msie8
Citar            
MensajeEscrito el 29 Ene 2011 06:40 pm
ok, vamos a ver.

Imagina que tu archivo PDF se llama miArchivo.pdf y está almacenado en una tabla de la base de datos que consta de las siguientes columnas:

tabla_archivos

idarchivo | nombrearchivo | numdescargas

1 | miArchivo.pdf | 0

Quieres saber cuántas veces se ha descargado entre otras cosas, pues bien, debes crear un archivo PHP que relacione la base de datos con el hecho de descargar el archivo. Para ello la forma más sencilla sería pasando la ID del archivo en cuestion como parámetro a esta página, esto es, paginaDescargas.php?id=1

Por lo cual el enlace que debes mostrar al cliente es <a href="paginaDescargas.php?id=1">Pincha para descargar miArchivo.pdf</a>

Ahora viene la parte que se ejecutaría dentro de paginaDescargas.php

Primero debemos compbobar que el id suministrado es un entero y que existe en la base de datos:

Código PHP :

// Convertimos el id pasado a entero por temas de seguridad
$idarchivo = (int) mysql_real_escape_string($_GET['id']);

$sql = "Select * from tabla_archivos where idarchivo=$idarchivo";
$query = mysql_query($sql);

// Si existe algún registro del archivo, realizamos las operaciones oportunas
if (@mysql_num_rows($query))
{
$datos = mysql_fetch_object($query);

$sql ="UPDATE tabla_archivos SET numdescargas=" . ($datos->numdescargas + 1)." where idarchivo=$idarchivo";
mysql_query($sql);

// Ahora provocamos la descarga del archivo en cuestion mediante un header

header("HTTP/1.1 200 OK"); //mandamos código de OK
header("Status: 200 OK"); //sirve para corregir un bug de IE (fuente: php.net)

if(isset($HTTP_SERVER_VARS['HTTP_USER_AGENT']) and strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT'],'MSIE')) // Explorer
   header('Content-Type: application/force-download');
else// firefox, mozilla, safari, ...
   header('Content-Type: application/octet-stream');

$ruta_al_archivo = "./mi/directorio/";
header("Content-Disposition: attachment; filename=" . $datos->nombrearchivo );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($ruta_al_archivo . $datos->nombrearchivo ));
$fp = fopen($ruta_al_archivo . $datos->nombrearchivo,"r");
fpassthru($fp);
fclose($fp);
// y listo
}


Un Saludo

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

firefox
Citar            
MensajeEscrito el 29 Ene 2011 06:53 pm
Muy bien. Voy a probar a ver si soy capaz. Pero ante todo muchisimas gracias por tu ayuda.

Por dfmurillo

0 de clabLevel



 

msie8

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.