2011-01-14 118 views
1

出于某种原因,我的PDF上传表单始终失败,我有这样的代码:PHP文件上传失败

<?php 
if($_POST["submit"] == "Add PDF to Comm and Special Projects") 
{ 
    $addsubp = $_POST["addsubp"]; 
    $addsubp_name = $_POST["addsubp_name"]; 
    $commuploadedfile = $_FILES['uploadedfile']['name']; 
    $sqldoc = "INSERT INTO projects_links (pid, display_name, link) VALUES ('".$addsubp."','".$addsubp_name."','".$commuploadedfile."')"; 
    mysql_query($sqldoc) or die(mysql_error()); 
    echo "<BR>"; 
    $target_path = "D:\\Hosting\\69903\\html\\pdfs\\comm\\";  
    $target_path = $target_path . basename($_FILES['uploadedfile']['name']); 

    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { 
     echo "<br>The file ". basename($_FILES['uploadedfile']['name']). 
     " has been uploaded<br>"; 
    } else{ 
     echo "<br>There was an error uploading the file, please try again.<br>"; 
    } 
} 
?> 
<form method="post"> 
Add PDF to Project for Committees and Special Projects <br>Choose Project<select name="addsubp"><?php 

$query = "SELECT 
projects.* 
FROM 
projects"; 
$showresult = mysql_query($query); 
$csp_c = 1; 
while($buyarray = mysql_fetch_assoc($showresult)) 
{ 
    echo "<option value=".$buyarray['id'].">".$buyarray["pname"]."</option>"; 
} 

?></select><br> 
Choose Display Name for PDF <input type="text" name="addsubp_name" /> <Br> 
Choose PDF: <input name="uploadedfile" type="file" /> <Br> 
<input type="submit" value="Add PDF to Comm and Special Projects" name="submit" /> 
</form> 

我已确保应用程序具有写权限的“通讯”目录。我有godaddy,并使用文件管理器来确保这一点。之前我在这个项目中遇到过权限问题,所以我知道这不是事实。它不断打印

上传文件时出现错误,请重试。

它不会尝试上传任何PDF,我做错了什么? 谢谢!

+0

不知道这与它有什么关系,但是你在Windows系统上?可能是Windows如何处理$ _FILES ['uploadedfile'] ['tmp_name'] – 2011-01-14 03:59:31

+0

这是一个基于Windows的服务器是 – 2011-01-14 04:01:29

+0

搁置注意..你可能只应该做你的INSERT INTO,如果文件上传成功..不是? – Ben 2011-01-14 04:03:03

回答

3

你可能有权限问题,但对于文件上传表单标签应包含正确的enctype属性。

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

和定义文件大小限制也是一个不错的主意:

<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />

0
  1. 你的代码是盲目地假定文件上传成功。在最低限度你应该有类似

    如果($ _FILES [ 'UploadedFile的'] [ '错误'] === UPLOAD_ERR_OK){ ...处理上载的 }

  2. 你的代码是脆弱的到SQL注入。您不会转义您插入数据库的3个值中的任何一个

  3. 您在创建数据库记录之前,请确保文件已成功移入目标目录。如果文件因任何原因而无法写入(因为它现在是您的问题)会发生什么?数据库会说它在那里,文件系统会说它不是

  4. 你不检查文件冲突。如果两个独立的上传文件发送“file.txt”,则第二个上传文件将覆盖第一个上传文件。

  5. 您正在用用户提供的名称(用户控制下)存储文件。如果这个文件是可以通过网络访问的,那么任何有权访问你的上传表单的人都可以上传他们想要的任何东西(例如一个php文件),服务器会为他们高兴地执行它。