dimanche 22 août 2021

My elseif statement works only for the first statement

I'm trying to make an if...elseif condition. But it goes only in the first condition and I really don't found what is wrong. I want to make a form for adding a new post. It must be possible to add a new post whithout a file. But in my condition the function checkFile() is always called even if the fieldset named image is empty.

Here is my code :

        elseif ($_GET['action'] == 'addPost') {
            if (!empty($_POST['redactor']) && !empty($_POST['title']) && !empty($_POST['content']) && isset($_FILES['image'])) {
                $res = checkFile($_FILES['image']); // Checking if file is ok (function définie in controller.php)
                if ($res == true) {
                    addPost($_POST['redactor'], $_POST['title'], $_POST['content'], $_FILES['image']['name']);  
                } else {
                    echo $imageError;
                    // echo "erreur dans le téléchargement";
                } 
            } 
            elseif ((!empty($_POST['redactor']) && !empty($_POST['title']) && !empty($_POST['content']) && empty($_FILES['image']))) {
                addPost($_POST['redactor'], $_POST['title'], $_POST['content'], NULL); 
            }        
        }
function checkFile($data) {
        global $imageError;
        $imageError = "";
        $allowed = array("jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png");
        $filename = $data["name"];
        $filetype = $data["type"];
        $filesize = $data["size"];
        
        // Vérifie l'extension du fichier
        $ext = pathinfo($filename, PATHINFO_EXTENSION);
        if(!array_key_exists($ext, $allowed)) 
        $imageError .= 'Veuillez sélectionner un format de fichier valide.';
        // Vérifie la taille du fichier - 5Mo maximum
        $maxsize = 5 * 1024 * 1024;
        if($filesize > $maxsize) 
        $imageError .= ' La taille du fichier est supérieure à la limite   autorisée.';
        // Vérifie le type MIME du fichier
        if(in_array($filetype, $allowed)){
            move_uploaded_file($data["tmp_name"], "./public/img/" . $data  ["name"]);   
            return true;
        } else {
            $imageError .= " Veuillez réessayer."; 
            return false;
        }         
    }
<?php
$title = 'ajouter-article';
ob_start(); // "mémorise" toute la sortie HTML qui suit
?>

<div class="container w-50 mt-4">
    <form action="../../index.php?action=addPost" method="post" enctype="multipart/form-data">
        <div>
            <label for="redactor" class="form-label">Auteur</label><br>
            <input type="text" id="redactor" name="redactor" class="form-control mb-3">
        </div>
        <div>
            <label for="title" class="form-label">titre</label><br>
            <input id="title" name="title" class="form-control mb-3">
        </div>
        <div>
            <label for="content" class="form-label">article</label><br>
            <textarea id="content" name="content" class="form-control mb-3" rows="5"></textarea>
        </div>
        <div class="mb-3">
            <label for="image" class="form-label">Ajouter une image</label>
            <input class="form-control" name="image" type="file" id="image">
        </div>
        <div>
            <input type="submit" name="submit" class="btn btn-primary mb-3">
        </div>
    </form>
</div>

<?php $content = ob_get_clean(); ?>
<?php require('../template.php'); ?>

Does somebody see the mistake ? Thank you

Aucun commentaire:

Enregistrer un commentaire