IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Upload de fichier avec PHP, PDO et MySql


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Stagiaire
    Inscrit en
    Avril 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Stagiaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 39
    Points : 12
    Points
    12
    Par défaut Upload de fichier avec PHP, PDO et MySql
    Bonjour,

    Pour les besoins d'un site, je cherche à créer un formulaire permettant d'enregistrer des données dans une base de données ainsi que d'uploader des fichiers.

    Côté données (nom, description...) de ce que j'ai déjà réalisé, ça marche. Le problème vient de l'upload. En effet, lorsque j'envoie mon formulaire, dans la base de données sont enregistrés le nom de ma course, sa description et l'image choisi. Cependant, l'image ne va pas dans le dossier destinataire comme je lui demande. Je sais pas si c'est parce que j'ai raté un truc, ou que je n'ai pas compris lesquels code que j'ai trouvé sur le net, mais vu que c'est sensé fonctionner je ne suis pas sûr de comprendre pourquoi ça ne fonctionne pas.

    Voici le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    <form method="post" action="">
            <div id="addEvent">
                <label>Titre : </label><input type="text" id="textTitre" name="textTitre"></br></br>
                <label>Description : </label></br>
                <textarea type="text" id="textDescr" name="textDescr" class="ckeditor"></textarea></br></br>
                <form method="POST" action="uploadImageV3.php" enctype="multipart/form-data" id="formImg" target="_blank">
                    <label>Charger une image : </label>
                        <input type="file" name="avatar" id="addImg"/></br></br>
                </form>
                <label>Charger le réglement (.pdf) : </label><input type="file" name="addReg" id="addReg"/></br></br>
                <input type="submit" value="Ajouter" ><a href="mes-evenements"><input type="button" value="Annuler"></a>
            <?php
            $titre          = $_POST['textTitre'];
            $desc           = $_POST['textDescr'];
            $img            = $_POST['avatar'];
            $reg            = $_POST['addReg'];
            $pasDeFichier   = "";
     
            $event=new Org_Events($titre, $desc, $img, $reg);
            $pdo->addEvent($event);
     
            ?>
     
            </div>
    </form>
    La requête addEvent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    public function addEvent($unEvent)
        {
            try
            {
                $req = 'INSERT INTO evenement (nom, description, image)
                VALUES (:pnom, :pdescr, :pimage)';
                echo $req;
                $prep = PdoOrg::$monPdo->prepare($req);
                $prep->bindValue(':pnom', $unEvent->getTitre(), PDO::PARAM_STR);
                $prep->bindValue(':pdescr', $unEvent->getDescription(), PDO::PARAM_INT);
                $prep->bindValue(':pimage', $unEvent->getImage(), PDO::PARAM_INT);
                $prep->execute(); 
                $prep = NULL;
            }   
            catch (PDOException $uneException) {
                echo "ERREUR : " . $uneException->getMessage();
            }
        }
    Et mon uploadImageV3.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    <?php
    $dossier = 'uploadTemp/imgEvent/';
    $fichier = basename($_FILES['avatar']['name']);
    $taille_maxi = 1000000;
    $taille = filesize($_FILES['avatar']['tmp_name']);
    $extensions = array('.png', '.gif', '.jpg', '.jpeg');
    $extension = strrchr($_FILES['avatar']['name'], '.'); 
    //Début des vérifications de sécurité...
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    {
         $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
    }
    if($taille>$taille_maxi)
    {
         $erreur = 'Le fichier est trop gros...';
    }
    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    {
         //On formate le nom du fichier ici...
         $fichier = strtr($fichier, 
              'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
              'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
         $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
         if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
         {
              echo 'Upload effectué avec succès !';
         }
         else //Sinon (la fonction renvoie FALSE).
         {
              echo 'Echec de l\'upload !';
         }
    }
    else
    {
         echo $erreur;
    }
    ?>
    Merci d'avance pour vos réponses

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    uploadImageV3.php te donne un message d'erreur, un message de réussite ou rien du tout ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Stagiaire
    Inscrit en
    Avril 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Stagiaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 39
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par sabotage Voir le message
    uploadImageV3.php te donne un message d'erreur, un message de réussite ou rien du tout ?
    Rien du tout :/

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu obtiens une page blanche ?
    Si tu ajouter un echo au début il s'affiche ?

  5. #5
    Membre à l'essai
    Homme Profil pro
    Développeur Stagiaire
    Inscrit en
    Avril 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Stagiaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 39
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Tu obtiens une page blanche ?
    Si tu ajouter un echo au début il s'affiche ?
    J'ai oublié de préciser que je bosse sur WordPress. Je n'ai pas de page blanche, et aucun echo ne s'affiche.

    J'ai essayé la partie "upload" du formulaire et uniquement cette partie hors du code que j'ai mis ici. Là l'upload fonctionne, l'image est dans le dossier destinataire et j'ai un message de réussite.

    Donc le problème n'est peut-être pas le code d'upload mais le formulaire. Je pense qu'il aime pas l'idée d'avoir un formulaire d'upload dans un formulaire de base.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur Stagiaire
    Inscrit en
    Avril 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Stagiaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 39
    Points : 12
    Points
    12
    Par défaut
    Bon après avoir mis finalement tout le code du uploadImageV3.php en-dessous du formulaire, après test cela ne change rien. Cependant, j'ai deux messages maintenant :

    Upload effectué avec succès !
    Sauf que non. L'image n'est pas dans le dossier de destination.

    Et puis ceci :

    ERREUR : SQLSTATE[23000]: Integrity constraint violation: 1048 Le champ 'image' ne peut être vide (null)

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Des formulaires ne peuvent pas être imbriqués.

    Pour le deuxième problème regarde ce que contient ton $_FILES

  8. #8
    Membre à l'essai
    Homme Profil pro
    Développeur Stagiaire
    Inscrit en
    Avril 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Stagiaire

    Informations forums :
    Inscription : Avril 2017
    Messages : 39
    Points : 12
    Points
    12
    Par défaut
    Merci pour ton aide sabotage.

    J'ai pu résoudre mon problème ! Faudra que j'améliore tout ça cependant ^^

    Si des gens sont intéressés, voici mon code complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    <form method="post" action="" enctype="multipart/form-data">
            <div id="addEvent">
                <label>Titre : </label><input type="text" id="textTitre" name="textTitre"></br></br>
                <label>Description : </label></br>
                <textarea type="text" id="textDescr" name="textDescr" class="ckeditor"></textarea></br></br>
                <label>Charger une image (.jpg, .jpeg, .png, .gif) : </label>
                    <input type="file" name="image" id="addImg"/></br></br>
                <label>Charger le réglement (.pdf) : </label><input type="file" name="reg" id="addReg"/></br></br>
                <input type="submit" value="Ajouter" ><a href="mes-evenements"><input type="button" value="Annuler"></a></br></br>
            <?php
     
            //echo '</br> L = '.__LINE__.'</br>'.print_r($_FILES, true).'</br>';
            $titre          = $_POST['textTitre'];
            $desc           = $_POST['textDescr'];
     
            if(((empty($titre)) || (empty($desc))))
                echo 'Veuillez donner un titre et une description à votre événement !</br>';
            else{
                if(empty($_FILES['image']['name']))
                    echo 'Aucune image n\'a été chargée</br>';
                else{
                    $dossierImg = 'C:/wamp/www/ovh_sys01/www/html/kms_wp_org/wp-content/plugins/organisateur/uploadTemp/imgEvent/';
                    $fichierImg = basename($_FILES['image']['name']);
                    $taille_maxi_img = 10000000;
                    $tailleImg = filesize($_FILES['image']['tmp_name']);
                    //echo '</br> L = '.__LINE__.'</br>'.print_r($_FILES, true).'</br>';
                    $extensionsImg = array('.png', '.gif', '.jpg', '.jpeg');
                    $extensionImg = strrchr($_FILES['image']['name'], '.'); 
                    //echo '</br>EXT = '.$extension.'.</br> F = '.$_FILES['image']['name'].'.</br>***^</br>';
     
                    //Début des vérifications de sécurité...
                    if(!in_array($extensionImg, $extensionsImg)) //Si l'extension n'est pas dans le tableau
                        $erreur = 'Vous devez uploader une image de type png, gif, jpg ou jpeg...</br>';
                    if($tailleImg > $taille_maxi_img)
                        $erreur = 'Le fichier est trop gros...</br>';
     
                    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
                    {
                        //On formate le nom du fichier ici...
                        $fichierImg = strtr($fichierImg, 
                                    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
                                    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                        $fichierImg = preg_replace('/([^.a-z0-9]+)/i', '-', $fichierImg);
     
                        if(move_uploaded_file($_FILES['image']['tmp_name'], $dossierImg . $fichierImg)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
                            echo "Upload de l'image effectué avec succès !</br>";
                        else //Sinon (la fonction renvoie FALSE).
                            echo 'Echec de l\'upload !</br>';
                    }
                    else
                        echo $erreur;
                }
     
                if(empty($_FILES['reg']['name']))
                    echo 'Aucun pdf n\'a été chargé</br>';
                else{
                    $dossierReg = 'C:/wamp/www/ovh_sys01/www/html/kms_wp_org/wp-content/plugins/organisateur/uploadTemp/regEvent/';
                    $fichierReg = basename($_FILES['reg']['name']);
                    $taille_maxi_reg = 10000000;
                    $tailleReg = filesize($_FILES['reg']['tmp_name']);
                    //echo '</br> L = '.__LINE__.'</br>'.print_r($_FILES, true).'</br>';
                    $extensionsReg = array('.pdf');
                    $extensionReg = strrchr($_FILES['reg']['name'], '.'); 
                    //echo '</br>EXT = '.$extension.'.</br> F = '.$_FILES['image']['name'].'.</br>***^</br>';
     
                    //Début des vérifications de sécurité...
                    if(!in_array($extensionReg, $extensionsReg)) //Si l'extension n'est pas dans le tableau
                        $erreur = 'Vous devez uploader un fichier de type pdf.</br>';
                    if($tailleReg > $taille_maxi_reg)
                        $erreur = 'Le fichier est trop gros.</br>';
     
                    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
                    {
                        //On formate le nom du fichier ici...
                        $fichierReg = strtr($fichierReg, 
                                    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
                                    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                        $fichierReg = preg_replace('/([^.a-z0-9]+)/i', '-', $fichierReg);
     
                        if(move_uploaded_file($_FILES['reg']['tmp_name'], $dossierReg . $fichierReg)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
                            echo 'Upload du pdf effectué avec succès !</br>';
                        else //Sinon (la fonction renvoie FALSE).
                            echo 'Echec de l\'upload !</br>';
                    }
                    else
                        echo $erreur;
                }
     
                $img            = $dossierImg . $fichierImg;
                $reg            = $dossierReg . $fichierReg;
     
                $event=new Org_Events($id, $titre, $desc, $img, $reg);
                $pdo->addEvent($event);
     
                echo "L'événement ".$titre." a été créé !";
            }
            ?>
     
            </div>
        </form>
    Bon problème réglé certes, mais je trouve ça embêtant de mettre tout le chemin vers le dossier de destination en dur comme ça. Si je ne le fais pas, j'ai cette erreur :

    WARNING: MOVE_UPLOADED_FILE(UPLOADTEMP/IMGEVENT/image.PNG): FAILED TO OPEN STREAM: NO SUCH FILE OR DIRECTORY IN C:\WAMP\WWW\OVH_SYS01\WWW\HTML\KMS_WP_ORG\WP-CONTENT\PLUGINS\ORGANISATEUR\ORGANISATEUR_EVENTS.PHP ON LINE 178

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu peux utiliser la constante __DIR__ qui te donnera le chemin du script.

Discussions similaires

  1. Comment uploader 10000 fichiers avec PHP
    Par gye baek dans le forum Langage
    Réponses: 5
    Dernier message: 09/05/2017, 00h19
  2. upload des fichier avec php
    Par xuraville dans le forum Langage
    Réponses: 2
    Dernier message: 02/02/2015, 15h42
  3. Uploader plusieurs fichier avec php
    Par jaona82 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 07/07/2014, 08h18
  4. Upload de fichiers avec php presque bon mais ..
    Par -Fly- dans le forum Langage
    Réponses: 5
    Dernier message: 06/11/2010, 11h32
  5. [Upload] Upload de fichier avec un script PHP
    Par largolgd dans le forum Langage
    Réponses: 7
    Dernier message: 23/04/2006, 15h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo