0

嗨,我刚刚开发了一个原型,允许用户通过动态下拉列表选择一些选项,然后将一个小文件上传到 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();
}



}   
4

1 回答 1

0

您有 2 个带有名称操作的输入。从提交按钮中删除 name=action。

echo "<input type =hidden name=action value= '".$filename."' />";
echo "<input type=submit name=action value=download/>";

所以让它像这样

echo "<input type =hidden name=action value= '".$filename."' />";
echo "<input type=submit value=download/>";

编辑

好的,现在修复您的<form>标签。它缺少>... 它应该在 td 之前打开<td>或在该 td 内关闭。

并关闭<div>标签,因为现在您打开标签两次,而不是打开一次并关闭一次。所以第二个<div>应该变成</div>

所以这...

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 action= confirm_download.php method= post>";
echo "<div>";
echo "<input type =hidden name=action value= '".$filename."' />";
echo "<input type=submit name=action value=download/>";
echo "</div>";
echo "</form>";

编辑 2

好的,你现在的新问题是:

echo "<input type =hidden name=action value= '".$filename."' />";

此行使 $_POST['action'] 填充文件名。

但后来你说:

if ($_POST['action']=='download')

这永远不会是真的(除非文件名实际上是“下载”......)您可以将 if 更改为:

if (isset($_POST['action']))
于 2013-04-10T18:28:28.573 回答