【问题标题】:PHP/MySQL multiple upload formsPHP/MySQL 多种上传表单
【发布时间】:2015-07-26 20:35:24
【问题描述】:

我对 PHP 非常陌生,正在尝试创建一个带有多个上传字段和一个提交按钮的 HTML/PHP 表单。

我目前正在使用一个上传字段,其中文件上传到目录,路径保存到 mySQL 表。

index.php

<?php
include_once 'dbconfig.php';
?>

    <form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <button type="submit" name="btn-upload">upload</button>
    </form>

上传.php

<?php
include_once 'dbconfig.php';
if(isset($_POST['btn-upload']))
{    

    $file = rand(1000,100000)."-".$_FILES['file']['name'];
    $file_loc = $_FILES['file']['tmp_name'];
    $file_size = $_FILES['file']['size'];
    $file_type = $_FILES['file']['type'];
    $folder="uploads/";

    // new file size in KB
    $new_size = $file_size/1024;  
    // new file size in KB

    // make file name in lower case
    $new_file_name = strtolower($file);
    // make file name in lower case

    $final_file=str_replace(' ','-',$new_file_name);

    if(move_uploaded_file($file_loc,$folder.$final_file))
    {
        $sql="INSERT INTO tbl_uploads(file,type,size) VALUES('$final_file','$file_type','$new_size')";
        mysql_query($sql);
        ?>
        <script>
        alert('successfully uploaded');
        window.location.href='index.php?success';
        </script>
        <?php
    }
    else
    {
        ?>
        <script>
        alert('error while uploading file');
        window.location.href='index.php?fail';
        </script>
        <?php
    }
}
?>

我一直在努力(到处搜索)要做的是拥有多个输入/上传字段。我还需要将新上传字段的路径放在新的 mySQL 列中。

类似:

<form action="upload.php" method="post" enctype="multipart/form-data">

        <input type="file" name="file" />
        <input type="file" name="file-two" />
        <input type="file" name="file-three" />

        <button type="submit" name="btn-upload">upload</button>
        </form>

如果有人能帮我解决这个问题,我将不胜感激。我已经搜索了很多,否则我不会寻求帮助。谢谢!

【问题讨论】:

标签: php forms upload


【解决方案1】:

假设您要上传单个文件。上传后,You $_FILES 变量将类似于:

array(1) {
  ["file"]=>
  array(5) {
    ["name"]=>
    string(12) "example.png"
    ["type"]=>
    string(9) "image/png"
    ["tmp_name"]=>
    string(24) "C:\php\tmp\php279.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(33007)
  }
}

现在,如果您在上传后尝试使用乘法上传按钮(如您提供的 HTML)上传乘法文件,您的 $_FILES 变量将如下所示:

array(2) {
  ["file"]=>
  array(5) {
    ["name"]=>
    string(12) "example1.png"
    ["type"]=>
    string(9) "image/png"
    ["tmp_name"]=>
    string(25) "C:\php\tmp\php7C1F.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(33007)
  }
  ["file-two"]=>
  array(5) {
    ["name"]=>
    string(12) "example2.png"
    ["type"]=>
    string(9) "image/png"
    ["tmp_name"]=>
    string(25) "C:\php\tmp\php7C1F.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(33007)
  }
}

如您所见,它是一个关联数组。所以你只需要一个foreach 循环来处理所有上传的文件。


所以你的代码会是这样的:

<?php

if(isset($_POST['btn-upload']))
{    

    foreach ($_FILES as $file) {
        $file = rand(1000,100000)."-".$file['file']['name'];
        $file_loc = $file['file']['tmp_name'];
        $file_size = $file['file']['size'];
        $file_type = $file['file']['type'];
        $folder="uploads/";

        // new file size in KB
        $new_size = $file_size/1024;  
        // new file size in KB

        // make file name in lower case
        $new_file_name = strtolower($file);
        // make file name in lower case

        $final_file=str_replace(' ','-',$new_file_name);

        if(move_uploaded_file($file_loc,$folder.$final_file))
        {
            $sql="INSERT INTO tbl_uploads(file,type,size) VALUES('$final_file','$file_type','$new_size')";
            mysql_query($sql);
            ?>
            <script>
            alert('successfully uploaded');
            window.location.href='index.php?success';
            </script>
            <?php
        }
        else
        {
            ?>
            <script>
            alert('error while uploading file');
            window.location.href='index.php?fail';
            </script>
            <?php
        }

    }
}
?>

您的 HTML 代码没有变化:

<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="file" name="file-two" />
    <input type="file" name="file-three" />
    <button type="submit" name="btn-upload">upload</button>
</form>

【讨论】:

    【解决方案2】:

    我假设您正在寻找一个多文件上传器。我会给你我用于我的项目的代码,然后将其更改为你的要求。

    index.php

    <form id="add_theme_photos" action="" method="post" enctype="multipart/form-data">
          <h5>Add Files</h5>
         <input type="file" name="file[]" id="fileToUpload"  multiple="multiple"/>
        <button type="submit" name="btn-upload">Add Photos</button>
    </form>
    

    上传.php

    if (isset($_POST['btn-upload'])) {
    include 'connect.php'; <-- file connecting to sql
    $errors = array();
    foreach($_FILES['file']['tmp_name'] as $key => $tmp_name ){
        $file_name = $key.$_FILES['file']['name'][$key];
        $file_size =$_FILES['file']['size'][$key];
        $file_tmp =$_FILES['file']['tmp_name'][$key];
        $file_type=$_FILES['file']['type'][$key];   
        if($file_size > 2097152){
            $errors[]='File size must be less than 2 MB';
        }
    
         // new file size in KB
         $new_size = $file_size/1024;  
         // new file size in KB
    
        $imageURL = "media/images/".$file_name;
        $stmt = $conn->prepare("INSERT INTO tbl_uploads(file,type,size) VALUES(?, ?, ?)";
        $stmt->bind_param('sss',  $final_file','$file_type','$new_size);
        $desired_dir="../media/images";
        if (empty($errors) == true) {
            if (is_dir($desired_dir) == false) {
                mkdir($desired_dir, 0700);
            }
            if (is_dir($desired_dir."/".$file_name)==false) {
                move_uploaded_file($file_tmp,"../media/images/".$file_name);
            } else {
                $new_dir-"media/images/".$file_name.time();
            }
            $stmt->execute();
            $stmt->close();
        } else {
            print_r($errors);
        }
        if (empty($error)) {
            echo "";
        }
    }
    }
    

    注意事项: 文件保存在: $desired_dir = "files/saved/here"; $conn -> 连接数据库

    这里是关于主题http://techstream.org/Web-Development/PHP/Multiple-File-Upload-with-PHP-and-MySQL 的教程。 :)

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-25
      • 2015-10-24
      • 1970-01-01
      • 2011-12-27
      相关资源
      最近更新 更多