【问题标题】:Only execute insert query when a file is selected for file upload仅在选择文件进行文件上传时才执行插入查询
【发布时间】:2018-03-13 10:53:53
【问题描述】:

我有一个表单,用户可以在其中添加一些信息,还可以选择添加图像和 PDF 文件。我只想在选择文件时执行插入查询。当没有选择文件时,不应执行查询。我确实阅读了$_FILES Error Messages documentation,阅读了this question and answer,并尝试了多个 if 语句,例如:

if($_FILES["files"]["size"] > 0) {
}

if($_FILES["files"]["size"] != 0) {
}

if($_FILES["files"]["error"] != 4) {
}

但是当我使用例如(如果文件错误不是 4,这意味着没有文件上传):

    if($_FILES["files"]["error"] != 4) {
     //execute insert query
    }

它不执行查询。当我使用其他 if 语句时,它会插入一个空查询。我做错了什么,但我不知道是什么。我必须检查文件的大小是否大于 0 或检查是否没有上传文件(错误 4)。但似乎没有任何效果。有人可以向我解释我做错了什么吗?这是我的全部代码:

表格:

                   <form action="php/maak-sectie.php" method="post" id="sectieForm" class="form-horizontal" enctype="multipart/form-data">
                    <div class="row">
                        <div class="form-group col-md-4">
                            <select name="pagina_id" id="pagina_id" class="form-control form-control-lg">
                                <option value="pagina_id" disabled selected>Pagina</option>
                                <?php
                                $sql = "SELECT naam FROM pagina_id";
                                $result = mysqli_query($db, $sql);
                                while ( $row=mysqli_fetch_assoc($result)) {
                                    echo "<option value ='" . $row['naam'] . "'>".$row['naam']."</option>";
                                }
                                ?>
                            </select>
                        </div>
                        <div class="form-group col-md-4">
                            <input type="text" class="form-control form-control-lg" id="opdrachtnaam" name="opdrachtnaam" placeholder="Naam opdracht">
                        </div>
                        <div class="form-group col-md-4">
                            <select name="sprint" id="sprint" class="form-control form-control-lg">
                                <option value="sprint" disabled selected>Sprint</option>
                                <option value="1">1</option>
                                <option value="2">2</option>
                                <option value="3">3</option>
                                <option value="4">4</option>
                                <option value="5">5</option>
                            </select>
                        </div>
                    </div>
                    <div class="row">
                        <div class="form-group col-md-6">
                            <input type="text" class="form-control form-control-lg" id="title" name="title" placeholder="Titel">
                        </div>
                        <div class="form-group col-md-6">
                            <input type="text" class="form-control form-control-lg" id="sub_title" name="sub-title" placeholder="Sub titel">
                        </div>
                    </div>
                    <div class="row">
                        <div class="form-group col-md-12">
                            <textarea class="form-control form-control-lg" rows="5" id="body" name="body" placeholder="Tekst"></textarea>
                        </div>
                    </div>
                    <div class="row">
                        <div class="form-group col-md-6">
                            <label for="images">Afbeelding(en)</label>
                            <input type="file" class="form-control-file" accept="image/*" name="images[]" multiple="multiple" id="images">
                        </div>
                        <div class="form-group col-md-6">
                            <label for="files">Bewijslast</label>
                            <input type="file" class="form-control-file" accept="application/pdf" name="files[]" multiple="multiple" id="files">
                        </div>
                    </div>
                    <button type="submit" class="btn btn-dark" name="maak-sectie">Opslaan</button>
                </form> 

PHP 文件:

<?php

require 'database-connection.php';

if (isset($_POST["maak-sectie"])) {

    $pagina_id = mysqli_real_escape_string($db, $_POST['pagina_id']);
    $opdrachtnaam = mysqli_real_escape_string($db, $_POST['opdrachtnaam']);
    $sprint = mysqli_real_escape_string($db, $_POST['sprint']);
    $sectie_id = md5($opdrachtnaam);
    $titel = mysqli_real_escape_string($db, $_POST['title']);
    $sub_title = mysqli_real_escape_string($db, $_POST['sub-title']);
    $body = mysqli_real_escape_string($db, $_POST['body']);

    if($_FILES["files"]["error"] != 4) {

        foreach ($_FILES['files']['tmp_name'] as $key => $tmp_name ){
            $file_name = $key.$_FILES['files']['name'][$key];
            $file_size = $_FILES['files']['size'][$key];
            $file_tmp = $_FILES['files']['tmp_name'][$key];
            $file_type= $_FILES['files']['type'][$key];
            $file_dir = "uploads/".$file_name;
            $final_file_dir = "php/uploads/".$file_name;

            $sql= "INSERT INTO files (pagina_id, sectie_id, file_name, file_path, file_type) VALUES ('$pagina_id', '$sectie_id', '$file_name', '$final_file_dir', '$file_type')";
            mysqli_query($db, $sql);

            move_uploaded_file($file_tmp, $file_dir);

        }
    }

    if($_FILES["images"]["error"] != 4) {

        foreach ($_FILES['images']['tmp_name'] as $keys => $tmp_names) {
            $img_name = $keys.$_FILES['images']['name'][$keys];
            $img_size = $_FILES['images']['size'][$keys];
            $img_tmp = $_FILES['images']['tmp_name'][$keys];
            $img_type= $_FILES['images']['type'][$keys];
            $img_dir = "uploads/".$img_name;
            $img_file_dir = "php/uploads/".$img_name;

            $sql2 = "INSERT INTO files (pagina_id, sectie_id, file_name, file_path, file_type) VALUES ('$pagina_id', '$sectie_id', '$img_name', '$img_file_dir', '$img_type')";
            mysqli_query($db, $sql2);

            move_uploaded_file($img_tmp, $img_dir);

        }
    }

    $sql = "INSERT INTO sectie (sectie_id, pagina_id, sprint, titel, sub_titel, body, opdrachtnaam) VALUES ('$sectie_id', '$pagina_id', '$sprint', '$titel', '$sub_title', '$body', '$opdrachtnaam')";
    mysqli_query($db, $sql);

    header('Location: ' . $_SERVER['HTTP_REFERER']);
}

?>

【问题讨论】:

    标签: php file-upload


    【解决方案1】:

    我变了:

        if($_FILES["files"]["error"] != 4) {
        }
    

    到这里:

        if (!empty($_FILES['files']['tmp_name'][$key])) {
        }
    

    在我的新代码中,我检查文件上传是否为空。这对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-01
      • 2021-02-12
      • 1970-01-01
      • 2011-07-28
      • 2015-09-09
      • 2010-11-30
      相关资源
      最近更新 更多