PHP MySQL query results auto download pdf files

I have a mysql table called download.  There are only 3 columms:  id, filename, down

As pdf files are created and saved in a folder on the server called /files this table is updated.  

The id is autoincrement
The filename is the filename of the pdf saved in the /files directory
The down column is initially set to 0, meaning that file has not been downloaded.

I have a PHP page that displays all of the filenames where down = 0, using the following query
"SELECT * FROM download WHERE downloaded = '0'"; and a repeating region for the table.

What I would like is to have a hyperlink that when clicked, automatically downloads all of the pdf files that meet the query, and then updates the table to make down = 1 for each of the files downloaded, so that they won't show up in the next page refresh.

I know how to do the update for the mysql table.


What I need help on is how to automatically download each pdf from the /files directory on the server to the clients computer that meets the down = 0 criteria
fastfind1Asked:
Who is Participating?
 
AielloJConnect With a Mentor Commented:
You may want to consider a different method than a straight hyperlink for your files.  Using hyperlinks allows people to link directly to your PDF files, bypassing your site's web pages.  You can use the header code below to send the appropriate headers to the browser, then reading the file contents and relaying them to the browser.  Using this method your files can be in any directory on your site.  The URl of the file is never displayed to the user.

When you download the file you update the flag inthe table using the filename being downloaded.  I don't believe you can download multiple files at a time.  The only way I think you could do this would be to put all of the PDF files into a single .zip file and download it.  PHP has .zip file read/write libraries available:

  http://www.php.net/zip
<?  
$dir="/path/to/file/"; 
if (isset($_REQUEST["file"])) { 
    $file=$dir.$_REQUEST["file"]; 
    header("Content-type: application/force-download"); 
    header("Content-Transfer-Encoding: Binary"); 
    header("Content-length: ".filesize($file)); 
    header("Content-disposition: attachment; filename=\"".basename($file)."\""); 
    readfile("$file"); 
} else { 
    echo "No file selected"; 
} 
 ?> 

Open in new window

0
 
fastfind1Author Commented:
Actually I did know about the headers, but it only lets you download one pdf at a time.

Is there no way to download multiple pdf's at the same time, without zipping them first?
0
 
AielloJCommented:
Not that I'm aware of.  Maybe someone else knows how.  My understanding is that it's part of basic web security to get the user's OK for each file.
0
 
Ray PaseurCommented:
You can send multiple attachments in email (I know of no way to force multiple downloads) and if you get the client's email, it may be a useful piece of information some day!  Cheers, ~Ray
0
All Courses

From novice to tech pro — start learning today.