Insertion noms de fichiers images dans la base

Résolu/Fermé
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024 - 17 mars 2022 à 14:54
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024 - 18 mars 2022 à 10:23
Bonjour, je m'explique, j'aimerais insérer dans la base le nom de mes fichiers concernant mes images après qu'il soit déplacer dans le répertoire images. Le problème c'est qu'il vont bien dans le dossier images sans les accents, les apostrophes et les espaces, mais pas dans la base.

Besoin d'aide, merci bien et bonne fin de journée.

class/imageManager.php


<?php

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);

                // Seules les fichiers jpg qui ont une taille inférieurs ou égal à 70 000 000 Octets sont autorisés.

                if(($type == 'image/jpeg') AND ($size <= 70000000)) {
                    
                    if(move_uploaded_file($tmp_name, $upload_dir . $filename) === false) {

                        $error++;

                    }
                    else {

                        // Appel avec $this de la méthode au sein d'une même classe

                        $this->createThumbnail($filename);
                    }
                }
                else {

                    $error++;

                    echo '<p class="msg_error">Seules les fichiers jpeg qui ont une taille inférieur
                                               ou égal 70000000 sont autorisés';
                }
            }
            else {

                $error++;
            }
        }
        
        if($error == 0) {

            return true;
        }
        else {

            return false;
        }
    }
}



admin/create-image.php


require('../include/inc-connexion.php');
require('../include/inc-config.php');
require('../class/Image.php');
require('../class/imageManager.php');
require('../process/process-create-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><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>

    <p>Ajoutez des images</p>
    <input type="file" name="upload_form[]" multiple="multiple" value="">
    
    <input type="submit" id="submit" name="submit_form" value="Validez">
</form>



process/process-create-image.php


if(!empty($_FILES)) {

    $manager = new imageManager($db);
    $images = $manager->upload($_FILES);

    if($images === true) {

        $message = '<p class="msg_success">Le chargement a réussi</p>';
    }
    else {

        $message = '<p class="msg_error">Le chargement a échoué</p>';
    }
}

// Les valeurs sont-elles postées ?

if(!isset($_POST['submit_form'])) {

    $message = '<p class="msg_error">Aucune donnée n\'est fournie.
                <a href="' . WEB_DIR_URL . 'admin/create-image.php">retour</a></p>';
}

if(isset($_POST['submit_form'])) {

    $title_form = htmlspecialchars(trim($_POST['title_form']));
    $descr_form = htmlspecialchars(trim($_POST['descr_form']));
    
    // Cas où les valeurs sont postées.

    // Si une des valeurs est vide.
  
    if((empty($title_form)) OR (empty($descr_form))) {
        
        $message = '<p class="msg_error">Une des informations est manquante.
                    <a href="' . WEB_DIR_URL . 'admin/create-image.php">retour</a></p>';
    }
    else {
        
        $images_data = array(
            
            'imgID'    => 1,
            'title'    => $title_form,
            'descr'    => $descr_form,
            'filename' => $_FILES['upload_form']['name'][0]
        );
    
        $image_data = new Image($images_data);

        $manager = new imageManager($db);

        if(!$manager->readImageData($images)) {

            $image = $_FILES['upload_form']['name'][0];

            $manager->cleanText($image);
            
            $manager->createImageData($image_data);
                
            echo '<p><a href="update-image.php">Mise à jour des données</a></p>';

            print_r($_FILES);
        }
        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>';
        }
    }
}
A voir également:

6 réponses

ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
18 mars 2022 à 10:23
ça y est ça marche enfin, merci bien & bon weekend.


<?php

if(!empty($_FILES)) {

    $manager = new imageManager($db);
    $images = $manager->upload($_FILES);

    if($images === true) {

        $message = '<p class="msg_success">Le chargement a réussi</p>';
    }
    else {

        $message = '<p class="msg_error">Le chargement a échoué</p>';
    }
}

// Les valeurs sont-elles postées ?

if(!isset($_POST['submit_form'])) {

    $message = '<p class="msg_error">Aucune donnée n\'est fournie.
                <a href="' . WEB_DIR_URL . 'admin/create-image.php">retour</a></p>';
}

if(isset($_POST['submit_form'])) {

    $title_form = htmlspecialchars(trim($_POST['title_form']));
    $descr_form = htmlspecialchars(trim($_POST['descr_form']));
    
    // Cas où les valeurs sont postées.

    // Si une des valeurs est vide.
  
    if((empty($title_form)) OR (empty($descr_form))) {
        
        $message = '<p class="msg_error">Une des informations est manquante.
                    <a href="' . WEB_DIR_URL . 'admin/create-image.php">retour</a></p>';
    }
    else {
        
        $images_data = array(
            
            'imgID'    => 1,
            'title'    => $title_form,
            'descr'    => $descr_form,
            'filename' => $manager->cleanText($_FILES['upload_form']['name'][0])
        );
    
        $image_data = new Image($images_data);

        $manager = new imageManager($db);

        if(!$manager->readImageData($images)) {
            
            $manager->createImageData($image_data); ?>
                
            <p><a href="update-image.php">Mise à jour des données</a></p>

            <?php print_r($_FILES);
        }
        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>';
        }
    }
}
1
jordane45 Messages postés 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024 4 658
17 mars 2022 à 16:04
Bonjour,

On peut supposer que le code pour faire l'insertion se trouve dans la fonction que tu appelles après le move...
Donc... dans :
createThumbnail

Sauf que je ne vois cette fonction nul part dans ce que tu nous montres...


0
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
17 mars 2022 à 16:10

/* METHODE QUI VA CREE LES IMAGES MINIATURES */

    public function createThumbnail($filename) {

        // Définition des chemins des images et des vignettes.

        $image = IMAGE_DIR_PATH . $filename;
        $vignette = THUMB_DIR_PATH . $filename;

        // Récupération des dimensions de l'image source.

        $size = getimagesize($image);
        $largeur = $size[0];
        $hauteur = $size[1];

        // Définition des valeurs souhaitées pour les vignettes.
        // Ce sont des valeurs maximales.

        $largeur_max = 200;
        $hauteur_max = 200;

        // Création de l'image source avec imagecreatefromjpeg.

        $image_src = imagecreatefromjpeg($image);

        // On crée un ratio (une proportion).
        // et on verifie que l'image source ne soit pas
        // plus petite que l'image de destination.

        if($largeur > $largeur_max OR $hauteur > $hauteur_max) {

            // Si largeur plus grande que hauteur.
 
            if($hauteur <= $largeur) {

                $ratio = $largeur_max / $largeur;
            }
            else {

                $ratio = $hauteur_max / $hauteur;
            }
        }
        else {

            // l'image créee sera identique à l'originale.

            $ratio = 1;
        }

        // Création de l'image noire de destination avec imagecreatetruecolor.

        $image_destination = imagecreatetruecolor(round($largeur * $ratio), round($hauteur * $ratio));

        // Fabrication de la vignette avec dimensions souhaitées.

        imagecopyresampled($image_destination, $image_src, 0, 0, 0, 0, round($largeur * $ratio), round($hauteur * $ratio), $largeur, $hauteur);

        // Envoi de la nouvelle image JPEG dans le fichier.

        if(!imagejpeg($image_destination, $vignette)) {
 
            $error_msg = 'la création de la vignette a echouée pour l\'image ' . $image;
            
            return $error_msg;
 
            exit;
        }
        else {

            return true;
        }
    }

    public function cleanText($filename) {

        $special = array(' ', '\'', 'á','à','â','ä','ã','å','ç','é','è','ê',
                         'ë','í','ì','î','ï','ñ','ó','ò','ô','ö','õ','ú','ù',
                         'û','ü','ý','ÿ','Á','À','Â','Ä','Ã','Å','Ç','É','È',
                         'Ê','Ë','Í','Ï','Î','Ì','Ñ','Ó','Ò','Ô','Ö','Õ','Ú',
                         'Ù','Û','Ü','Ý');
 
        $normal = array('-', '', 'a','a','a','a','a','a','c','e','e','e','e',
                        'i','i','i','i','n','o','o','o','o','o','u','u','u',
                        'u','y','y','A','A','A','A','A','A','C','E','E','E',
                        'E','E','I','I','I','I','N','O','O','O','O','O','U',
                        'U','U','U','Y');
 
        $result = str_replace($special, $normal, $filename);

        $results = strtolower($result);

        return $results;
    }

0
jordane45 Messages postés 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024 4 658
17 mars 2022 à 18:12
Alors non, ce n'est pas là non plus ...
N'as tu pas une fonction qui te permet de faire un INSERT ou un UPDATE en BDD ??
0
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
17 mars 2022 à 18:19

/* METHODE QUI INSERT LES DONNEES DANS LA BASE DONT LE NOM DU FICHIER DE L'IMAGE */

    public function createImageData(Image $image) {

        try {

            $sql = 'INSERT INTO images(title, descr, filename) VALUES(:title, :descr, :filename)';

            $stmnt = $this->db->prepare($sql);

            $title = $image->getTitle();
            $descr = $image->getDescr();
            $filename = $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.<br>
            Message d\'erreur : ' . $e->getMessage();
        }
    }

0
jordane45 Messages postés 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024 4 658
17 mars 2022 à 18:54
Et bien ça semble pas mal, quel est le souci tu as un message d'erreur ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
17 mars 2022 à 19:03
Pas de message d'erreur. sauf que mon fichier c'est l'été.jpg est déplacé dans le répertoire images renommer comme ceci

cest-lete.jpg, jusque là tout va bien. Mais c'est l'insertion dans la base qui pose problème. mon fichier s'insert comme ceci

c'est l'été.jpg
0
jordane45 Messages postés 38162 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 6 mai 2024 4 658
17 mars 2022 à 19:21
Ben oui,
Quand tu fais le move, tu passes avant par la fonction
 $filename = $this->cleanText($name);

Il faut faire de même lors de l'insertion en bdd;..
0
ameb2908 Messages postés 81 Date d'inscription jeudi 17 mars 2022 Statut Membre Dernière intervention 13 avril 2024
18 mars 2022 à 09:52
Bonjour, j'ai fait comme vous dites. ça marche toujours pas.


<?php

if(!empty($_FILES)) {

    $manager = new imageManager($db);
    $images = $manager->upload($_FILES);

    if($images === true) {

        $message = '<p class="msg_success">Le chargement a réussi</p>';
    }
    else {

        $message = '<p class="msg_error">Le chargement a échoué</p>';
    }
}

// Les valeurs sont-elles postées ?

if(!isset($_POST['submit_form'])) {

    $message = '<p class="msg_error">Aucune donnée n\'est fournie.
                <a href="' . WEB_DIR_URL . 'admin/create-image.php">retour</a></p>';
}

if(isset($_POST['submit_form'])) {

    $title_form = htmlspecialchars(trim($_POST['title_form']));
    $descr_form = htmlspecialchars(trim($_POST['descr_form']));
    
    // Cas où les valeurs sont postées.

    // Si une des valeurs est vide.
  
    if((empty($title_form)) OR (empty($descr_form))) {
        
        $message = '<p class="msg_error">Une des informations est manquante.
                    <a href="' . WEB_DIR_URL . 'admin/create-image.php">retour</a></p>';
    }
    else {
        
        $images_data = array(
            
            'imgID'    => 1,
            'title'    => $title_form,
            'descr'    => $descr_form,
            'filename' => $_FILES['upload_form']['name'][0]
        );
    
        $image_data = new Image($images_data);

        $manager = new imageManager($db);

        if(!$manager->readImageData($images)) {

            $manager->cleanText($images);
            
            $manager->createImageData($image_data); ?>
                
            <p><a href="update-image.php">Mise à jour des données</a></p>

            <?php print_r($_FILES);
        }
        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>';
        }
    }
}
0