0

I'm having a form where users can add some information and also have the option to add images and PDF files. I only want to execute the insert query when there is a file selected. When there are no files selected the query shouldn't be executed. I did read the $_FILES Error Messages documentation, read this question and answer and I tried multiple if-statements like:

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

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

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

But when I use for example (if files error is not 4, which means there is no file uploaded):

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

it doesn't execute the query. When I am using other if-statements it inserts an empty query. I am doing something wrong but I don't know what. I have to check if the size of the file is bigger than 0 or check if there is no file uploaded (error 4). But nothing seems to work. Can someone explain to me what I'm doing wrong? This is my whole code:

Form:

                   <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 file:

<?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']);
}

?>
Baspa
  • 1,099
  • 1
  • 18
  • 49

1 Answers1

0

I changed:

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

to this:

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

In my new piece of code i check if the file upload is not empty. This worked for me.

Baspa
  • 1,099
  • 1
  • 18
  • 49