Solved

PHP MySQL query results auto download pdf files

Posted on 2008-10-07
4
975 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
Comment Utility
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
Comment Utility
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
Comment Utility
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
Comment Utility
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

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Confronted with some SQL you don't know can be a daunting task. It can be even more daunting if that SQL carries some of the old secret codes used in the Ye Olde query syntax, such as: (+)     as used in Oracle;     *=     =*    as used in Sybase …
PL/SQL can be a very powerful tool for working directly with database tables. Being able to loop will allow you to perform more complex operations, but can be a little tricky to write correctly. This article will provide examples of basic loops alon…
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 …

744 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

13 Experts available now in Live!

Get 1:1 Help Now