嗨,我刚刚开发了一个原型,允许用户通过动态下拉列表选择一些选项,然后将一个小文件上传到 mysql。我刚刚完成了可以正常工作并正确返回结果的搜索功能。最近几天让我陷入困境的是允许用户下载搜索结果中返回的文件之一。我已将结果放入 html 表中并使用表单作为下载选项,这就是我怀疑问题出在表单的地方,因为当我弄乱了文件下载工作但当用户在上一页上点击搜索时。
我的阅读让我走到了这一步,我已经查看了一些问题,但似乎没有一个能解决问题。我还是 php 新手,所以请原谅我凌乱的结构。任何帮助将非常感激。
这是 results_page.php 的脚本
if (isset ($resultts) and ($tests))
{
$sql = "SELECT p.logID, p.fileData, p.fileName, p.mimeType, p.dateCreated, t.testName, r.resultType
FROM result AS r
INNER JOIN product_logs AS p
ON r.resultID=p.resultID
INNER JOIN test AS t
ON t.testID=r.testID
WHERE t.testName LIKE '%$tests%'
AND r.resultType LIKE '%$resultts%'
ORDER BY p.dateCreated DESC";
$result1= mysqli_query($sql) or die (mysqli_error());
while ($row = mysqli_fetch_array($result1))
{
$filename = $row['fileName'];
$filetype = $row['mimeType'];
$filetest = $row['testName'];
$fileresult= $row['resultType'];
$filedate=$row['dateCreated'];
$fileid=$row['logID'];
$filedata=$row['fileData'];
echo"<table>";
echo"<tr><th>File Name</th><th>File Type</th><th>Test</th><th>Result</th><th>Date</th> <th>options</th></tr>";
echo"<tr valign=top>";
echo "</tr>";
echo"<td><'".$filename."'</td>";
echo "<td><'".$filetype."'</td>";
echo"<td><'".$filetest."'</td>";
echo"<td><'".$fileresult."'</td>";
echo"<td><'".$filedate."'</td>";
echo "<td><form action= confirm_download.php method= post</td>";
echo "<div>";
echo "<input type =hidden name=action value= '".$filename."' />";
echo "<input type=submit name=action value=download/>";
echo "<div>";
echo "</form>";
echo "</td>";
echo "</table>";
}
if ($_POST['action']=='download')
{
// Content-type must come before Content-disposition
header("Content-type: $filetype");
header("Content-disposition: attachment filename=$filename");
header('Content-length: ' . strlen($filedata));
echo $filedata;
exit();
}
}