如何使用PHP检索上传的文件

时间:2011-08-31 09:43:34

标签: php mysql file-upload download

确定。我在2011年8月24日以来在这个网站上搜索。(并不重要)一种显示用户上传文件的方法。我在管理员方面有我的表格,一切正常。我还有一个表格,显示用户填写的表格中的任何内容。但我无法在桌面上查看文件或其名称。

我的数据库表的主要标识为auto_increment int(11)unsigned。

这是我写的代码:

//This gets all the other information from the form 
$company=$_POST['company']; 
$location=$_POST['location'];
$pic=($_FILES['userfile']['name']);

$query = "INSERT INTO user_DB VALUES ('','$company', '$location', '$userfile' )";

//target to the path of my files
$target_path = "uploads/post_id/";
if(!is_dir($target_path)) mkdir($target_path);
$uploadfile = $target_path . basename($_FILES['userfile']['name']);

//Move the uploaded file to $taget_path
(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile));

在您填写详细信息的表单上,我有以下内容:

<tr>
<td><label for="company_name">Company Name</label></td>
<td><input type="text" name="company" id="company" value="" size="38" /></td>
</tr>
<tr>
<td><label for="location">Location</label></td>
<td><input type="text" name="location" id="location" value="" /></td>
</tr>
<tr>
<td>Upload a File:</td>
<td><input name="userfile" id="userfile" type="file" /></td>
</tr>

显示查询结果的前端表格就像这样,只是文件场。

echo "<td>";
echo "<a href=../admin/uploads/post_id/> $row'userfile'</a>";
echo "</td>";

因此,您可以看到我正在尝试获取文件名以及文件本身。如果是pdf / jpg / doc,我应该能够在点击链接时查看/下载它。

蚂蚁的想法......

4 个答案:

答案 0 :(得分:5)

为了让这项工作得以改变,你可以改变一些建议。

1。上传表格

您的表单标签是什么样的?不要忘记按以下方式添加enctype参数:

<form type="post" action="" enctype="multipart/form-data">
    ...
</form>

2。环境卫生

$company  = mysql_real_escape_string($_POST['company']); 
$location = mysql_real_escape_string($_POST['location']);
$pic      = mysql_real_escape_string($_FILES['userfile']['name']);

以上几行是帮助防止查询遭受SQL注入攻击的第一步。

3。 SQL查询

$userfile不存在,因为您实际上已将文件名分配给$pic,因此您的查询应如下所示:

$query = "INSERT INTO user_DB 
          VALUES ('','$company', '$location', '$pic')";

4。 HTML输出

现在链接到输出表中的文件:

echo "<td>";
echo "<a href=" . $target_path . basename($row['userfile']) . ">
         {$row['userfile']}</a>";
echo "</td>";

答案 1 :(得分:2)

我认为可以替换这个

$query = "INSERT INTO user_DB VALUES ('','$company', '$location', '$userfile' )";

$query = "INSERT INTO user_DB VALUES ('','$company', '$location', '$pic' )";

答案 2 :(得分:2)

您可能错过的非常基本的形式是enctype。许多初学者都这样做。因此,只需检查表单中是否包含enctype属性。

<form enctype="multipart/form-data">

只有您拥有此功能,才能通过表单上传文件。另一个你可能出错的地方是

$query = "INSERT INTO user_DB VALUES ('','$company', '$location', '$userfile' )";

您将文件名存储在名为$ pic的变量中,但是在这里您已经给出了$ userfile,所以只需尝试将其更改为$ pic。

答案 3 :(得分:0)

您可以使用一列作为auto_increament

当您插入新用户时,您可以使用此查询获得已注册用户的总和

$ qry = mysql_qyery(“select * from users”); 并且您可以使用

获得用户数量

$ count = mysql_num_rows($ qry); 所以在此之后你插入一个新用户,他的ID将是

$ count1 = $ count + 1; $ id ='F'。$ count1;