文件未存储在正确的文件夹中

时间:2017-05-16 08:09:24

标签: php

我创建了一个可以向我的数据库添加新记录的页面,一切正常,但是当我尝试上传pdf文件时,它不会存储到正确的文件夹中。它应该存储在我的“上传”中。当我检查我的数据库时,它没有正确链接它应该是../uploads/example.pdf而不是example.pdf

<?php

require('db.php');
include("auth.php");

$status = "";
if(isset($_POST['new']) && $_POST['new']==1)
{
$trn_date = date("Y-m-d H:i:s");
$fname =$_REQUEST['fname'];
$lname = $_REQUEST['lname'];
$memo = $_REQUEST['memo'];
$file = $_REQUEST['file'];
$submittedby = $_SESSION["username"];
$ins_query="insert into user (`trn_date`,`fname`,`lname`,`memo`,`submittedby`,`file`) values ('$trn_date','$fname','$lname','$memo','$submittedby','$file')";
mysqli_query($con,$ins_query) or die(mysql_error());
$status = "New Record Inserted Successfully.</br></br><a href='view.php'>View Inserted Record</a>";
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Insert New Record</title>
<link rel="stylesheet" href="css/style.css" />
</head>
<body>
<div class="form">
<p><a href="dashboard.php">Dashboard</a> | <a href="view.php">View Records</a> | <a href="logout.php">Logout</a></p>

<div>
<h1>Insert New Record</h1>
<form name="form" method="post" action=""> 
<input type="hidden" name="new" value="1" />
<p><input type="text" name="fname" placeholder="Enter Date" required /></p>
<p><input type="text" name="memo" placeholder="Enter Memorandum" required /></p>
<p><input type="text" name="lname" placeholder="Enter Title" required /></p>
<form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="file" />
         <input type="submit"/>
      </form>
<?php
   if(isset($_FILES['file'])){
      $errors= array();
      $file_name = $_FILES['file']['name'];
      $file_size =$_FILES['file']['size'];
      $file_tmp =$_FILES['file']['tmp_name'];
      $file_type=$_FILES['file']['type'];
      $file_ext=strtolower(end(explode('.',$_FILES['file']['name'])));

      $expensions= array("pdf");

      if(in_array($file_ext,$expensions)=== false){
         $errors[]="extension not allowed, please choose a pdf file.";
      }

      if($file_size > 2097152){
         $errors[]='File size must not exceed 2 MB';
      }

      if(empty($errors)==true){
         move_uploaded_file($file_tmp,"../uploads/".$file_name);
         echo "Success";
      }else{
         print_r($errors);
      }
   }
?>

<p><input name="submit" type="submit" value="Submit" /></p>
</form>

<p style="color:#FF0000;"><?php echo $status; ?></p>
</div>
</div>
</body>
</html>

2 个答案:

答案 0 :(得分:0)

那是因为你只设置保存文件名

$file = $_REQUEST['file'];

相反它应该是

$file = "../uploads/".$_REQUEST['file'];

答案 1 :(得分:0)

您的代码中存在相当多的逻辑错误。

  1. 您正在将记录插入MySQL数据库,然后检查文件扩展名和文件大小。

  2. 您只需将文件名插入MySQL($file = $_REQUEST['file'];),因此只会出现文件名。正确的代码是:

    $file = "../uploads/".$_FILES['file']['name'];
    
  3. 稍微需要调整文件移动部分:

        move_uploaded_file($file_tmp, $file);
    
    1. 在sql插入后的错误检查中,您使用的是mysql_error(),而不是mysqli_error($con)

    2. 您不会检查move_uploaded_file($file_tmp,"../uploads/".$file_name);来电是否成功且文件是否已移至最终位置。

    3. 同时请考虑将准备好的陈述用于prevent sql injection attacks