繁体   English   中英

如何使用PHP上传照片/文件到服务器

[英]How to upload photos/file to server using PHP

您好,我正在尝试允许用户将照片上传到列表中。 我正在使用 dropzone.js 并完成了表单,它工作得很好! 除了照片实际上没有上传到文件夹“上传/”

我已经尝试了许多不同的方法,花了好几天时间进行研究,但我终其一生都无法找出问题所在。

请注意,这是一个多页表格,所以我不能在这里发布整个表格,但我会尝试分享重要的脚本!

拖放区代码:

  <head>
  <script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>
  <link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css" type="text/css" />
</head>

    <div class="container" >
        <div class='content'>
        <form action="create.php" method="post" type="file" name="file" class="dropzone" id="dropzonewidget" enctype="multipart/form-data">
       
    </div> 
  </div>
  </div>
    </div>

    <div class="row form-block flex-column flex-sm-row">
      <div class="col text-center text-sm-start"><a class="btn btn-link text-muted" href="user-add-2.php"> <i class="fa-chevron-left fa me-2"></i>Back</a>
      </div>
        <div class="col text-center text-sm-end"><button type="submit" name="save" class="btn btn-primary">save</button><i class="fa-chevron-right fa ms-2"></i></div>
      </form>

现在对于 PHP 脚本:我有 2 次接近的尝试,第一次实际上进入数据库,第二次只是回显所有错误脚本

脚本 1:(有点作品)

 $uploadDir = 'var/www/uploads';
 $tmpFile = $_FILES['file']['tmp_name'];

 // upload file to directory
 $fileName = $uploadDir.'/'.time().'-'. $_FILES['file'] 
 ['name'];
 move_uploaded_file($tmpFile,$fileName); {

 
 $sql = "INSERT INTO hosts(id, user_name, name, type, 
 country, city, state, zip, about, price, photo)
  VALUES('$id', '$user_name', '$name', 
 '$type', '$country', '$city', '$state', '$zip', 
 '$about', '$price', '$fileName')";

脚本 2:

 $target_dir = "uploads/";
 $target_file = $target_dir . basename($_FILES["file"] 
 ["name"]);
 $uploadOk = 1;
 $imageFileType = 
 strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

 // Check if image file is a actual image or fake image

 $check = getimagesize($_FILES["file"]["tmp_name"]);
 if($check !== false) {
  echo "File is an image - " . $check["mime"] . ".";
  $uploadOk = 1;
 } else {
  echo "File is not an image.";
  $uploadOk = 0;
  }


  // Check if file already exists
  if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
  }

  // Check file size
   if ($_FILES["file"]["size"] > 1000000) {
    echo "Sorry, your file is too large.";
   $uploadOk = 0;
   }

   // Allow certain file formats
   if($imageFileType != "jpg" && $imageFileType != "png" 
   && $imageFileType != "jpeg"
   && $imageFileType != "gif" ) {
   echo "Sorry, only JPG, JPEG, PNG & GIF files are 
   allowed.";
   $uploadOk = 0;
   }

   // Check if $uploadOk is set to 0 by an error
   if ($uploadOk == 0) {
   echo "Sorry, your file was not uploaded.";
   // if everything is ok, try to upload file
   } else {

   if (move_uploaded_file($_FILES["file"]["tmp_name"], 
   $target_file)) {
   echo "The file ". htmlspecialchars( basename( 
   $_FILES["file"]["name"])). " has been uploaded.";
   //$pictureName = "uploads". basename( 
   $_FILES["fileToUpload"]["name"]);
   } else {
   echo "Sorry, there was an error uploading your 
   file.";
   }

在这两次尝试结束时,我有一个简单的插入查询(我知道 SQL 次注入,只是想让它先工作。)

希望我没有让你头疼

请注意,我是 PHP 和 SO 的新手,所以请多多关照,我希望更有经验的开发人员可以帮助我度过这些麻烦的时刻,在此先感谢:如果您理解我的问题,请发布一些代码而不是含糊的回复: ) 干杯

对于 dropzone 上传(多个文件上传)

一种。 不需要指定enctype="multipart/form-data"method="post" type="file" name="file"

b. 无需使用提交按钮

c。如前所述,确保有一个名为uploads的子文件夹,并且它是允许写入的

d. 要进行进一步的数据库操作(例如插入),请在 php 中执行插入查询,确保在构造插入查询时使用$_FILES['file']['name']

因此,请将您的代码修改为:

HTML

<head>
  <script src="https://unpkg.com/dropzone@5/dist/min/dropzone.min.js"></script>
  <link rel="stylesheet" href="https://unpkg.com/dropzone@5/dist/min/dropzone.min.css" type="text/css" />
</head>

    <div class="container" >
        <div class='content'>
        <form action="create.php" class="dropzone" id="dropzonewidget">
       </form>
    </div> 
  </div>

创建.php

<?php
$target_dir = "./uploads/";
$target_file = $target_dir . basename($_FILES["file"]["name"]);

if (move_uploaded_file($_FILES["file"]["tmp_name"], $target_dir.$_FILES['file']['name'])) {
   $status = 1;

// do further update in database
// please note that the file name is $_FILES['file']['name']
// make sure you use parametized prepared statement in your insert query
// to avoid SQL injection attacks
//
}
?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM