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 :

Formulaire de téléchargement avec un champ titre et description


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Dépanneur informatique
    Inscrit en
    Septembre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Dépanneur informatique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 31
    Par défaut Formulaire de téléchargement avec un champ titre et description
    Bonjour, j'aimerais réaliser un formulaire de téléchargement avec un champ titre et description.
    et enregistrer les informations dans une base.

    J'ai déjà réaliser une première étape, télécharger l'image sur le serveur, ce qui pose problème ensuite,
    c'est l'insertion des trois informations => nom du fichier, le titre et la description dans la table.

    Si quelqu'un pouvait me donner une piste ! Merci d'avance.

    Petit rappel => exercice en POO PDO MySQL.

    Bonne après-midi.

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    J'ai déjà réaliser une première étape, télécharger l'image sur le serveur, ce qui pose problème ensuite,
    c'est l'insertion des trois informations => nom du fichier, le titre et la description dans la table.
    Donne-nous ton script, qu'on voit où ça bloque exactement.

  3. #3
    Membre averti
    Homme Profil pro
    Dépanneur informatique
    Inscrit en
    Septembre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Dépanneur informatique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 31
    Par défaut
    admin/upload.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
     
    <?php
     
    require('../include/inc-connexion.php');
    require('../include/inc-config.php');
    require('../class/Image.php');
    require('../class/imageManager.php');
    require('../process/process-upload-image.php');
    require('menu.php');
     
    ?>
     
    <h1>upload</h1>
     
    <?php if(isset($message)) echo $message ?>
     
    <form id="upload" method="post" action="" enctype="multipart/form-data">
        <p>Ajoutez des images</p>
        <input type="file" name="upload_form[]" multiple="multiple" value="">
     
        <p><label for="title">Titre :</label></p>
        <p><input type="text" name="title_form" id="title"></p>
     
        <p><label for="descr">Description :</label></p>
        <p><textarea name="descr_form" id="descr" cols="50" rows="5"></textarea></p>
     
        <input type="submit" id="submit" name="submit_form" value="Validez">
    </form>
    class/imageManager.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
    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
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    class imageManager {
     
        private $db;
     
        public function __construct($db) {
     
            $this->setDb($db);
        }
     
        public function setDb(PDO $dbh) {
     
            return $this->db = $dbh;
        }
     
        public function upload($files) {
     
            $upload_dir = IMAGE_DIR_PATH;
     
            foreach($files['upload_form']['error'] as $key => $error) {
     
                $error = 0;
     
                if($error == UPLOAD_ERR_OK) {
     
                    $type = $files['upload_form']['type'][$key];
                    $size = $files['upload_form']['size'][$key];
                    $tmp_name = $files['upload_form']['tmp_name'][$key];
                    $name = $files['upload_form']['name'][$key];
                    $filename = $this->cleanText($name);
     
     
     
                    if(($type == 'image/jpeg') AND ($size <= 70000000)) {
     
                        if(move_uploaded_file($tmp_name, $upload_dir . $filename) === false) {
     
                            $error++;
                        }
                        else {
     
                            $this->createThumbnail($filename);
                        }
                    }
                    else {
     
                        echo '<p class="msg_error">Seules les fichiers jpg qui ont une taille inférieurs ou égal à 70 000 000 Octets sont autorisés.</p>';
     
                        $error++;
                    }
                }
                else {
     
                    $error++;
                }
            }
     
            if($error == 0) {
     
                return true;
            }
            else {
     
                return false;
            }
        }
     
         public function createImageData(Image $image) {
     
            try {
     
                $sql = 'INSERT INTO images(title, descr, filename) VALUES(:title, :descr, :filename)';
     
                $stmnt = $this->db->prepare($sql);
     
                $title = htmlspecialchars($image->getTitle());
                $descr = htmlspecialchars($image->getDescr());
                $filename = htmlspecialchars($image->getFilename());
     
                $stmnt->bindParam(':title', $title);
                $stmnt->bindParam(':descr', $descr);
                $stmnt->bindParam(':filename', $filename);
     
                $stmnt->execute();
            }
            catch(PDOException $e) {
     
                echo 'Une erreur est survenue lors de l\'insertion des données dans la base. ' . $e->getMessage();
            }
        }
     
         public function readImageData($filename) {
     
            try {
     
                $sql = 'SELECT id, title, descr, filename FROM images WHERE filename = :filename';
     
                $stmnt = $this->db->prepare($sql);
     
                $stmnt->execute(array(
     
                    ":filename" => $filename
                ));
     
                $count = $stmnt->rowCount();
     
                if($count > 0) {
     
                    return $stmnt->fetch();
                }
                else {
     
                    return false;
                }
            }
            catch(PDOException $e) {
     
                echo 'Une erreur est survenue lors de la récupération d\'une des données dans la base. Message d\'erreur : ' . $e->getMessage();
            }
        }
    }
    process/process-upload-image.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
    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
     
    if(!isset($_POST['submit_form'])) {
     
        $message = '<p class="msg_error">Aucune donnée n\'est fournie.<a href="' . WEB_DIR_URL . 'admin/upload.php">retour</a></p>';
    }
     
    if(isset($_POST['submit_form'])) {
     
        if(!empty($_FILES)) {
     
            $manager = new imageManager($db);
            $images = $manager->upload($_FILES);
     
            if($images === false) {
     
                $message = '<p class="msg_error">Le chargement a échoué.</p>';
            }
            else {
     
                $message = '<p class="msg_error">Le chargement a réussi.</p>';
     
                echo '<p><a href="add-image.php">Ajouter une image</a></p>';
            } 
     
            echo '<pre>';
            print_r($_FILES);
            echo '</pre>';
        }
     
        $title_form = trim($_POST['title_form']);
        $descr_form = trim($_POST['descr_form']);
     
        if((empty($title_form)) OR (empty($descr_form))) {
     
            $message = '<p class="msg_error">Une des informations est manquante.<a href="' . WEB_DIR_URL . 'admin/upload.php">retour</a></p>';
        }
        else {
     
            $images_data = array(
     
                'id' => 1,
                'title' => $title_form,
                'descr' => $descr_form,
                'filename' => $_FILES['upload_form']['name']
            );
     
            $image_data = new Image($images_data);
     
            $manager = new imageManager($db);
     
            if(!$manager->readImageData($filename_form)) {
     
                $manager->createImageData($image_data);
     
                $message = '<p class="msg_success">Les informations ont bien été enregistrées dans la base de données.</p>';
            }
            else {
     
                $message = '<p class="msg_error">Une erreur est survenue lors de l\'enregistrement des données dans la base.<br>
                                                 Aucune information n\'a été enregistrée.</p>';
            }
        }
    }

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 322
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 322
    Billets dans le blog
    17
    Par défaut
    Tu n'as pas donné ta classe Image.

    Dans ImageManager, tu peux commencer par vérifier si tu récupères bien les valeurs, puis remonter la chaîne de la même manière :

    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
        public function createImageData(Image $image) {
     
            try {
     
                $sql = 'INSERT INTO images(title, descr, filename) VALUES(:title, :descr, :filename)';
     
                $stmnt = $this->db->prepare($sql);
     
                $title = htmlspecialchars($image->getTitle());
                $descr = htmlspecialchars($image->getDescr());
                $filename = htmlspecialchars($image->getFilename());
     
                // Infos bien reçues ?
                echo "DEBUG ==> [title={$title}][descr={$descr}][filename={$filename}]";
     
                $stmnt->bindParam(':title', $title);
                $stmnt->bindParam(':descr', $descr);
                $stmnt->bindParam(':filename', $filename);
     
                $stmnt->execute();
            }
            catch(PDOException $e) {
     
                echo 'Une erreur est survenue lors de l\'insertion des données dans la base. ' . $e->getMessage();
            }
        }
    PS : c'est généralement une très mauvaise idée d'enregistrer en base un HTML échappé (htmlspecialchars()) => Afin de conserver de la data neutre il vaut mieux laisser l'échappement sous la responsabilité de l'affichage

  5. #5
    Membre averti
    Homme Profil pro
    Dépanneur informatique
    Inscrit en
    Septembre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Dépanneur informatique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 31
    Par défaut
    Bonjour, voici mon code => class/Image.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
    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
    101
    102
    103
    104
    105
    106
    107
     
    class Image {
     
        private $id;
        private $title;
        private $descr;
        private $filename;
     
        private static $error;
     
        const MSG_ERROR_ID = 'ID doit être un entier';
        const MSG_ERROR_TITLE = 'TITLE doit être une chaîne de caractères';
        const MSG_ERROR_DESCR = 'DESCR doit être une chaîne de caractères';
        const MSG_ERROR_FILENAME = 'FILENAME doit être une chaîne de caractères';
        const MSG_ERROR_END = 'L\'objet ne peut pas être créé';
     
        public function __construct(array $data) {
     
            $this->setId($data['id']);
            $this->setTitle($data['title']);
            $this->setDescr($data['descr']);
            $this->setFilename($data['filename']);
     
            if(!empty(self::$error)) {
     
                throw new Exception(self::$error . self::MSG_ERROR_END);
            }
        }
     
        public function setError($msg) {
     
            self::$error = $msg;
        }
     
        public function getError() {
     
            return self::$error;
        }
     
        public function setId($id) {
     
            if((is_int($id)) AND ($id > 0)) {
     
                $this->id = $id;
            }
            else {
     
                $this->setError(self::MSG_ERROR_ID);
            }
        }
     
        public function setTitle($title) {
     
            if(is_string($title)) {
     
                $this->title = $title;
            }
            else {
     
                $this->setError(self::MSG_ERROR_TITLE);
            }
        }
     
        public function setDescr($descr) {
     
            if(is_string($descr)) {
     
                $this->descr = $descr;
            }
            else {
     
                $this->setError(self::MSG_ERROR_DESCR);
            }
        }
     
        public function setFilename($filename) {
     
            if(is_string($filename)) {
     
                $this->filename = $filename;
            }
            else {
     
                $this->setError(self::MSG_ERROR_FILENAME);
            }
        }
     
        public function getId() {
     
            return $this->id;
        }
     
        public function getTitle() {
     
            return $this->title;
        }
     
        public function getDescr() {
     
            return $this->descr;
        }
     
        public function getFilename() {
     
            return $this->filename;
        }
    }

  6. #6
    Membre averti
    Homme Profil pro
    Dépanneur informatique
    Inscrit en
    Septembre 2021
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Dépanneur informatique

    Informations forums :
    Inscription : Septembre 2021
    Messages : 31
    Par défaut
    Bonjour, je reviens vers vous. J'ai réussi à insérer les noms des fichiers images

    process/process-upload-image.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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
     
     
    if(!empty($_FILES)) {
     
        $images = new imageManager($db);
        $image = $images->upload($_FILES);
     
        $file = $_FILES['upload_form']['name'][0];
     
        if($images === true) {
     
            return true;
        }
        else {
     
            $message = '<p class="msg_error">Seules les fichiers jpg qui ont une taille inférieurs ou égal à 70 000 000 Octets sont autorisés.</p>';
        }
    }
     
    if(!isset($_POST['submit_form'])) {
     
        $message = '<p class="msg_error">Aucune donnée n\'est fournie.<a href="' . WEB_DIR_URL . 'admin/upload.php">retour</a></p>';
    }
     
    if(isset($_POST['submit_form'])) {
     
        $title_form = htmlspecialchars(trim($_POST['title_form']));
        $descr_form = htmlspecialchars(trim($_POST['descr_form']));
     
        if((empty($title_form)) OR (empty($descr_form))) {
     
            $message = '<p class="msg_error">Une des informations est manquante.<a href="' . WEB_DIR_URL . 'admin/upload.php">retour</a></p>';
        }
        else {
     
            $images_data = array(
     
                'id' => 1,
                'title' => $title_form,
                'descr' => $descr_form,
                'filename' => $file
            );
     
            $image_data = new Image($images_data);
     
            $manager = new imageManager($db);
     
            if(!$manager->readImageData($file)) {
     
                $manager->createImageData($image_data);
     
                $message = '<p class="msg_success">Les informations ont bien été enregistrées dans la base de données.</p>';
     
                echo '<p><a href="admin/update-image.php">Mise à jour des données</a></p>';
            }
            else {
     
                $message = '<p class="msg_error">Une erreur est survenue lors de l\'enregistrement des données dans la base.<br>
                                                 Aucune information n\'a été enregistrée.</p>';
            }
        }
    }
    Par contre, quand j'insère image1.jpg, image2.jpg tout va bien, mais image3.jpg (dans la BDD => OK), par contre l'image ne va pas dans le répertoire et en plus de ça une image nommer c'est l'été.jpg (dans le répertoire => cest-lete.jpg donc OK), dans la base c'est l'été.jpg.

    Merci pour votre aide.

Discussions similaires

  1. formulaire d'inscription avec quelques champs obligatoire
    Par fleurrouge dans le forum Langage
    Réponses: 13
    Dernier message: 24/04/2012, 10h54
  2. [MySQL] Formulaire d'inscription avec plusieurs champs de type upload
    Par yokuan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/12/2011, 11h46
  3. Ouvrir un formulaire presaisie avec les champs liés
    Par FrédéricCM dans le forum Access
    Réponses: 1
    Dernier message: 02/06/2006, 21h14
  4. Réponses: 7
    Dernier message: 14/02/2006, 10h33
  5. Probleme avec les champs du formulaire
    Par Red_devils dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 29/09/2004, 13h06

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