php:目录名+文件名

php: name of the directory + name of the file

我正在使用 PHP 制作上传文件的表格。这些是我的输入:

 $file_name = filter_input(INPUT_POST, 'file_name');
 $file = filter_input(INPUT_POST, 'file');
 $file_date = filter_input(INPUT_POST, 'premiere_date');
 $file_director = filter_input(INPUT_POST, 'director_name');

这就是我不知道我做错了什么:

if ((filter_input(INPUT_POST, 'submit'))) { //if submit button is clicked
      $target_dir = "uploads/";
    $target_file = $target_dir . basename($_FILES["file"]["file_name"]);
     move_uploaded_file($_FILES["file"]["tmp_name"], $target_file);    
     echo $target_file;
}

这是 html

 <form id="savingFiles" action="upload.php" method="post" enctype="multipart/form-data">
            <label>Name of the file:</label>
            <input type="text" name="file_name" value="<?php if (isset($row['file_name'])) {
    echo $row['file_name'];
} ?>"/>
            <br>
              <label>Select your file:</label> 
              <input type="file" name="file" value="<?php if (isset($row['file'])) {
    echo $row['file'];
} ?>"/>
              <br>Date of premiere:
                <input type="date" name="premiere_date" value="<?php if (isset($row['premiere_date'])) {
    echo $row['premiere_date'];

} ?>"/> 
                <br>
                  <label>Name of the director:</label>
            <input type="text" name="director_name" value="<?php if (isset($row['director_name'])) {
    echo $row['director_name'];
} ?>"/>
             <br>
                  <button type="submit" value="submit" name="submit">Upload file</button>
                  </form>

                  <?php
                  //Table with records
                  $sql = "SELECT myFilms.id, file_name, file, premiere_date, director_name FROM myFilms JOIN myFilms_directors ON myFilms.director_id = myFilms_directors.id";
                 /*for mysqlia
                  *  $result = $conn->query($sql);
                  */
                  /*for mysql (old)*/
                    $result = mysql_query($sql);

                  if ($result) {

                      echo "<table border='1' id='filesResults'><tr><th>FILE ID</th><th>FILE NAME</th><th>FILE</th><th>PREMIERE DATE</th><th>DIRECTOR NAME</th></tr>";


                      /* in mysqli 
                       * while ($row = $result->fetch_assoc()) */
                      /*for mysql (old)*/
                       while ($row =  mysql_fetch_array($result)) {

                          echo '<tr><td>' . $row['id'] . '</td><td>' . $row['file_name'] . '</td><td><a href= "'. $row['file']. ' ">view file</a></td><td>' . $row['premiere_date'] . '</td><td>' . $row['director_name'] . '</td></tr>';
                      }
                      echo "</table>";
                  } else {
                      echo "there is not data on the table";
                  }
                  /*for mysqli
                  $conn->close();            
                   */
                  /*for mysql (old)*/
                  mysql_close($dbhandle);

                  ?>

所以,当我回显 $target_file 时,我希望它是这种情况下的路径 uploads/nameOfTheFile.pdf 但它只显示为上传/所以 $target_dir, 我使用的是 basename 函数吗?我检查了 w3schools,它似乎适合我,但肯定有问题...

谢谢大家!!

您输入的文件标签与名称字段关联为 'file.'

Instead of using $_FILES["file"]["file_name"] use this $_FILES["file"]["file"]

希望对你有用。

改变
$target_file = $target_dir 。基本名称($_FILES["file"]["file_name"]);

$target_file = $target_dir 。基本名称($_FILES["file"]["name"]);

应该可以。

$_FILES 是一个关联数组,其中包含:

Array ( [name] => 
 [type] => some value 
[tmp_name] => some value
error] => some value 
[size] => some value
)

$_FILES["file"]["file_name"]更改为$_FILES["file"]["name"]

使用 var_dump($_FILES) 可以查看整个 PHP $_FILES 关联数组。从中可以看出:

array(1) { 
    ["file"]=> array(5) { 
        ["name"]=> string(14) "plugin wp.docx" 
        ["type"]=> string(71) "application/vnd.openxmlformats-officedocument.wordprocessingml.document" 
        ["tmp_name"]=> string(18) "/var/tmp/phpcoayaU" 
        ["error"]=> int(0) 
        ["size"]=> int(262453) 
    } 
}

$_FILES 包含一个名为 'file' 的 associative array,它有 5 个索引:nametypetmp_nameerrorsize.

您正在分配:

$target_file = $target_dir . basename($_FILES["file"]["file_name"]);

引用上面的对象是不正确的,因为 ["file_name"] 不是 file 的一部分。查看调试信息,解决方案应该很明显,只需将 ["file_name"] 更改为 ["name"]:

 $target_file = $target_dir . basename($_FILES["file"]["name"]);

关于 PHP var_dump() here 的一些信息,因为您似乎没有意识到这个功能。