简体   繁体   English

使用PHP以一种形式从输入字段上传多个文件?

[英]Multiple file upload from input field in one form using PHP?

    <form action="upload.php" method="post" enctype="multipart/form-data">
        <table border="0">
          <tr>
            <td>Select to upload:</td>
          </tr>
          <tr>
            <td>Image *</td>
            <td>File *</td>
            <td>File 1 *</td>
            <td>File 2 *</td>
            <td>File 3</td>
            <td>File 4</td>
          </tr>
          <tr>
            <td><input type="file" name="image" multiple="multiple" ></td>
            <td><input type="file" name="file1" multiple="multiple" ></td>
            <td><input type="file" name="file2" multiple="multiple" ></td>
            <td><input type="file" name="file3" multiple="multiple" ></td>
            <td><input type="file" name="file4" multiple="multiple" ></td>
            <td><input type="file" name="file5" multiple="multiple" ></td>
          </tr>
          <tr>
            <i class="glyphicon glyphicon-upload">
                <td><input type="submit" value="Start Upload" name="submit"></td>
            </i>
          </tr>
        </table>
    </form>  // Closes the new window.

    <?php
    include "dbConfig.php";
    session_start();
    if($_SESSION['username'] == ''){
        header('Location: user.php');
    }
    if(isset($_POST["submit"])) {
        $target_dir = "uploads/";
        $target_image = $target_dir . ($_SESSION['username'].'_'.basename($_FILES["image"]["name"]));
        $target_file1 = $target_dir . ($_SESSION['username'].'_'.basename($_FILES["file1"]["name"]));
        $target_file2 = $target_dir . ($_SESSION['username'].'_'.basename($_FILES["file2"]["name"]));
        $target_file3 = $target_dir . ($_SESSION['username'].'_'.basename($_FILES["file3"]["name"]));
        $target_file4 = $target_dir . ($_SESSION['username'].'_'.basename($_FILES["file4"]["name"]));
        $target_file5 = $target_dir . ($_SESSION['username'].'_'.basename($_FILES["file5"]["name"]));

        $uploadOk = 1;
        $imageFileType = pathinfo($target_image,PATHINFO_EXTENSION);


        if ($_FILES["image"]["size"] == 0 || $_FILES["file1"]["size"] == 0 ||$_FILES["file2"]["size"] == 0 || $_FILES["file3"]["size"] == 0) {
            echo "You Must upload Fist 4 files <br>";
            $uploadOk = 0;}
else{
            if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
            && $imageFileType != "gif" ) {
                echo "<center><h2>Sorry, only JPG, JPEG, PNG & GIF files are allowed for Image.<br></center></h2>";
                $uploadOk = 0;
            }
            if ($uploadOk == 0) {
                echo "<center><h2>Sorry, your file was not uploaded.</center></h2>";
            } else {
                if (move_uploaded_file($_FILES["image"]["tmp_name"], $target_image) && move_uploaded_file($_FILES["file1"]["tmp_name"], $target_file1) && move_uploaded_file($_FILES["file2"]["tmp_name"], $target_file2) && move_uploaded_file($_FILES["file3"]["tmp_name"], $target_file3)) {

                    $img = $_SESSION['username']."_".basename( $_FILES["image"]["name"]);
                    $file1 = $_SESSION['username']."_".basename( $_FILES["file1"]["name"]);
                    $file2 = $_SESSION['username']."_".basename( $_FILES["file2"]["name"]);
                    $file3 = $_SESSION['username']."_".basename( $_FILES["file3"]["name"]);
                    if($_FILES["file4"]["size"] == 0){
                            $file4 = '';
                    }else{
                            move_uploaded_file($_FILES["file4"]["tmp_name"], $target_file4);
                            $file4 = $_SESSION['username']."_".basename( $_FILES["file4"]["name"]);
                    }
                    if($_FILES["file5"]["size"] == 0){
                            $file5 = '';
                    }else{
                            move_uploaded_file($_FILES["file5"]["tmp_name"], $target_file5);
                            $file5 = $_SESSION['username']."_".basename( $_FILES["file5"]["name"]);
                    }
                    $sql = "INSERT INTO user_data(name, image, file1, file2, file3, file4, file5) VALUES ('".$_SESSION['username']."','".$img."','".$file1."','".$file2."','".$file3."','".$file4."','".$file5."')";
                    $query = mysql_query($sql);
                    echo "The file has been uploaded.";

                } else {
                    echo "Sorry, there was an error uploading your file.";
                }
            }
        }
    }
    ?>

I suggest to use a function / loop to upload all Files to the directory. 我建议使用功能/循环将所有文件上载到目录。 The answer is yet unchecked for typos - maybe you look through it and test if it will fit. 答案尚未检查错别字-也许您可以仔细检查并测试它是否适合。

if (count($_FILES) > 0)
{
    // initialize check and Error output
    $ok = true;
    $_SERVER['error_message'] = '';

    // check count of uploads is ok
    if (count($_FILES) != 6 || !in_array(array_keys($_FILES), 'image'))
    {
        $_SERVER['error_message'] .= 'too few files uploaded<br />';
        $ok = false;
    }

    // if still ok check all uploads
    if ($ok) foreach ($_FILES as $name => $myFile)
    {
        // keep false so $ok &&
        $ok = $ok && checkfile($name, $myFile)
    }

    // if still ok upload all files
    if ($ok) foreach ($_FILES as $name => $myFile)
    {
        // No need for basename as the name will only be the filename (the path is not submitted by uploading a file - maybe to check php reference if it is )
        move_uploaded_file($myFile["tmp_name"], 'uploads/'.$_SESSION['username'].'_'.$myFile["name"]);
    }
}
function checkfile($name, $myFile)
{
    // check general uploaderrors
    switch ($myFile['error'])
    {
        case UPLOAD_ERR_OK:
    break;
        case UPLOAD_ERR_NO_FILE:
            $_SERVER['error_message'] .= $name . ' contains no file<br />';
            return false;
    break;
        case UPLOAD_ERR_INI_SIZE:
        case UPLOAD_ERR_FORM_SIZE:
            $_SERVER['error_message'] .= $name . ' exceeded filesize<br />';
            return false;
    break;
        default:
            $_SERVER['error_message'] .= $name . ' unknown errors in fileupload<br />';
            return false;
    break;
    }

    // check minimum filesize (here 0)
    if ($myFile['size'] <= 0) $_SERVER['error_message'] .= $name . ' need to be larger than 0 bytes<br />';

    // check each filetype and "unknown" uploads like having a otherfile25 that is not expected from the form
    switch ($name)
    {
        case 'image':
            if (!in_array(substr($myFile['name'], -4), array('.png', '.jpg'))
            {
                $_SERVER['error_message'] .= $name . ' need to a png or jpg image<br />';
                return false;
            }
    break;
        case 'file1':
        case 'file2':
        case 'file3':
        case 'file4':
        case 'file5':
            if (!in_array(substr($myFile['name'], -4), array('.xls'))
            {
                $_SERVER['error_message'] .= $name . ' need to a xls file<br />';
                return false;
            }
    break;
        default:
            $_SERVER['error_message'] .= 'unknown file ' . $name . '<br />';
            return false;
    break;
    }
    return true;
}

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

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