使用PHP中的列表框上传文件

时间:2009-10-12 10:13:13

标签: php upload

我想从php中的列表框上传文件。

我可以使用http://www.tizag.com/phpT/fileupload.php

上找到的<input type="file">来完成此操作

但是当我按<input type="file">

更改此<select>

我正在尝试这种方式

<form enctype="multipart/form-data" action="upload.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
Choose a file to upload: <input name="uploadedfile" type="file" />
<select name="uploadedfile" id = "fileName" size="3" style="width: 100%">
<option id = "uploadedfile" value="c:\text.txt">c:\text.txt</option>
</select>
<input type="submit" value="Upload File" />
</form> 

和PHP代码在两种情况下保持相同

<?php
$target_path = "uploads/";
$target_path = $target_path . basename( $_FILES['uploadedfile']['value']); 


if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['value']). 
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

?>

它不起作用........

此致 与Hemant

2 个答案:

答案 0 :(得分:8)

出于安全原因,您只能使用<input type="file" />上传文件。这些输入类型显示文件选择框,允许用户以安全的方式选择文件。允许服务器像你试图那样选择要上传的任意文件将严重违反安全性。

例如,假设我实施了基于<select>的选项(并且有效)。我可以选择要上传的Windows密码文件。我可以选择预定义位置的各种讨厌的文件。

总而言之,您的HTML有两个具有相同名称的元素。哪一个实际发送到服务器将在某种程度上取决于您的浏览器和服务器。您真的只需要一个具有相同名称的表单元素。

答案 1 :(得分:1)

我不确定这是如何工作的,因为您使用下拉框要求用户上传文件。

根据我的经验,下拉菜单(选择&gt;选项)不是用作特定选项之外的输入,例如“蓝色”与“红色”。

然而,你将遇到设置问题因为a)你是select元素之外的第一个文件选项而b)你给它们两个相同的名字,这意味着当php得到{{1变量,它将创建一个包含两个具有相同键的项的数组(如果它甚至到达那个点)。

更新

在阅读了Matthew的回答后,我现在注意到你设置的POST值。正如他所说,那是一个很重要的时刻。理论上你可以复制整个硬盘(当然非常慢),或者有一些甚至不会询问用户是否可以上传并在计算机上获取任何内容的AJAX。

我认为你在某种程度上为用户提供了“上传”服务器上已有的通用文件的选项,因为他们没有任何东西可以在他们的最终使用。