Solved

PHP MySQL query results auto download pdf files

Posted on 2008-10-07
4
977 Views
Last Modified: 2013-12-12
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
0
Comment
Question by:fastfind1
  • 2
4 Comments
 
LVL 13

Accepted Solution

by:
AielloJ earned 500 total points
ID: 22659327
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
 

Author Comment

by:fastfind1
ID: 22659955
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
 
LVL 13

Expert Comment

by:AielloJ
ID: 22660232
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
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 22660383
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

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Things That Drive Us Nuts Have you noticed the use of the reCaptcha feature at EE and other web sites?  It wants you to read and retype something that looks like this.Insanity!  It's not EE's fault - that's just the way reCaptcha works.  But it is …
This article describes how to use the timestamp of existing data in a database to allow Tableau to calculate the prior work day instead of relying on case statements or if statements to calculate the days of the week.
The viewer will learn how to dynamically set the form action using jQuery.
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

910 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

15 Experts available now in Live!

Get 1:1 Help Now