Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème formulaire d'upload d'image

Sujet résolu
    22 mai 2018 à 17:09:55

    Bonjour,

    J'ai un formulaire qui permet à une personne d'enregistrer des informations sur une BDD et des images sur un serveur (cette partie fonctionne bien).

    J'ai un second formulaire permettant à un admin de modifier ce qu'a rentré une personne utilisant le premier formulaire. Pour cela l'admin a accès à un formulaire qui reprend la forme du premier et qui est remplit automatiquement avec les champs qui ont été sauvegardés précédemment.

    Mon problème se situe au moment ou l'admin souhaite uploader une nouvelle image. Je réutilise le même code que pour le premier formulaire mais cette fois-ci je n'obtiens que des erreurs et impossible d'upload une image.

    Voici mon code :

    < connexion à ma base de données >
    
    < je récupère le nom de l'image précédemment enregistrée pour la sauvegarder dans une variable ($SavePhotoMaison) >
    
    < déclaration de variable ayant pour valeur les $_POST['...']; des champs du formulaires >
     
    $valeurPhoto = $id_etude ;
    
    $target_dir = "img/photoMaison/";
    $target_file = $target_dir . basename($_FILES["photoMaison"]["name"]);
    $uploadOk = 1;
    $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
    $photoMaison = "$valeurPhoto.$imageFileType" ;
    
    // Check if image file is a actual image or fake image
    if(isset($_POST["submit"])) {
        $check = getimagesize($_FILES["photoMaison"]["tmp_name"]);
        if($check !== false) {
            echo "File is an image - " . $check["mime"] . ".";
            $uploadOk = 1;
        } else {
            echo "File is not an image.";
            $uploadOk = 0;
        }
    }
    // Check if file already exists
    if (file_exists($target_file)) {
        echo "Sorry, file already exists.";
        $uploadOk = 0;
    }
    // Check file size
    if ($_FILES["photoMaison"]["size"] > 5000000000) {
        echo "Sorry, your file is too large.";
        $uploadOk = 0;
    }
    // Allow certain file formats
    if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
    && $imageFileType != "gif" && $imageFileType != "pdf" ) {
        echo "Sorry, only JPG, JPEG, PNG, GIF & PDF files are allowed.";
        $uploadOk = 0;
    }
    // Check if $uploadOk is set to 0 by an error
    if ($uploadOk == 0) {
        echo "Sorry, your file was not uploaded.";
    // if everything is ok, try to upload file
    } else {
        if (move_uploaded_file($_FILES["photoMaison"]["tmp_name"], $target_dir.$photoMaison)) {
            echo "The file ". basename( $_FILES["photoMaison"]["name"]). " has been uploaded.";
        } else {
            echo "Sorry, there was an error uploading your file.";
        }
    }
    
    if (empty($imageFileType)) {
        
     $photoMaison  = $SavePhotoMaison ;
    
    }
    
    < requête d'update de ma BDD >

    En utilisant ce code j'obtiens le message suivant : Sorry, file already exists.Sorry, only JPG, JPEG, PNG, GIF & PDF files are allowed.Sorry, your file was not uploaded.

    Pourtant, même si le dossier de destination est vide et que le fichier a bien une extension valide, impossible d'upload.

    Je ne comprend pas pourquoi dans ce cas ça ne fonctionne pas alors que le même code fonctionne dans le premier formulaire.

    Piste : Lorsque je souhaite afficher $photoMaison, il s'affiche x. au lieu de x.png (l'extension ne semble pas être lu).

    Merci d'avance pour votre aide. :)


    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2018 à 18:12:31

      Bonjour,

      Est-ce que tu récupères bien quelque chose dans les variables $target_file et $imageFileType ?

      Y a-t-il bien un nom de fichier dans $_FILES["photoMaison"]["name"] ? Qu'obtiens-tu si tu affiches ces variables ?
      • Partager sur Facebook
      • Partager sur Twitter
      Une question bien formulée, c'est 50% de la réponse.
        23 mai 2018 à 10:16:09

        La variable $target_file retourne img/photoMaison ça signifie que la variable prend bien le début de la ligne mais pas la fin. 

        $target_file = $target_dir . basename($_FILES["photoMaison"]["name"])

         De même, la variable $imageFileType est vide. 

        -
        Edité par swetdice 23 mai 2018 à 10:18:05

        • Partager sur Facebook
        • Partager sur Twitter
          23 mai 2018 à 13:54:21

          Bonjour,

          Ok merci. Ça signifie aussi que la varible $_FILES["photoMaison"]["name"] ne contient pas l'extension puisqu'elle n'apparait pas dans $target_file. Donc logiquement, comme il n'y a pas d'extension, la fonction pathinfo() ne renvoie rien et $imageFileType reste vide.

          Pourrais-tu afficher le code de ton formulaire pour voir comment est transmit le nom du fichier ?

          • Partager sur Facebook
          • Partager sur Twitter
          Une question bien formulée, c'est 50% de la réponse.
            23 mai 2018 à 14:58:36

            Le voici :

            <?php
            
            if (isset ($_POST['modifier']))
            {
              
                < connexion à ma BDD >
            
            
                $id_etude=$_POST['choixEtude'];
                
                $res2 = $mysqli->query("SELECT PhotoMaison FROM etudes2 WHERE Id_Etude = '$id_etude'");
                
                
                    while ($row2 = mysqli_fetch_row($res2)) {
            
                            $PhotoMaison = $row2[0];
            
                    }    
                ?>
            
            <!doctype html>
            <html>
                      
                
                <body>
                    
                   
                       <form method="POST" action="script_ModifierEtude2.php?id_etude=<?php echo $id_etude ?>" TARGET=_BLANK>
                        
                            
                            <h2> Photo de la maison:</h2>
                            <input type="hidden" name="MAX_FILE_SIZE" value="10000000">
                                
                            Fichier : <input type="file" name="photoMaison">
            
                        
                            <input type="submit" value="Valider" class="btn btn-primary">
                                
            
                    </form>
                  
                </body>  
            </html>
                



            • Partager sur Facebook
            • Partager sur Twitter
              23 mai 2018 à 16:28:38

              Merci,

              Essaie de déclarer ton formulaire comme ça :

              <form method="POST" action="script_ModifierEtude2.php?id_etude=1" enctype="multipart/form-data">

              Chez moi, sans le enctype, $_FILES était vide et avec, je retrouve bien mon fichier.

              -
              Edité par purpaly 23 mai 2018 à 16:29:30

              • Partager sur Facebook
              • Partager sur Twitter
              Une question bien formulée, c'est 50% de la réponse.
                23 mai 2018 à 17:13:03

                Ca fonctionne ! Merci beaucoup.

                Ce fichier était la mise en commun de deux autre. L'un avait avait un Form avec 

                enctype="multipart/form-data"

                l'autre non. J'ai gardé le mauvais sans faire attention à cette ligne.

                Encore merci ;)

                • Partager sur Facebook
                • Partager sur Twitter

                Problème formulaire d'upload d'image

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown