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

Langage PHP Discussion :

Upload image dans base de données


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Janvier 2025
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2025
    Messages : 1
    Par défaut Upload image dans base de données
    Bonjour,

    Mise en contexte:
    - L'utilisateur sur mon site doit télécharger une image, cette image doit s'ajouter dans le dossier 'uploads/positions/', ensuite je veux que le chemin d'accès de l'image ajouté doit être ajouter dans la base de donnée pour pouvoir récupérer le lien quand je veux pour avoir cette image. Il est prévu qu'un grand nombre d'image soit télécharger par les utilisateurs. les dossier qui doivent accueillir les images ont toutes les permission (777).

    Problèmes:
    - aucune images n'est energistrer dans le dossier. Et aucun lien n'est ajouter dans la base de donnée.

    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
        $imagePath = null;
        if (!empty($_FILES['position_image']['name'])) {
            $uploadDir = '../../uploads/positions/';
            if (!is_dir($uploadDir)) {
                mkdir($uploadDir, 0777, true);
            }
     
            $fileName = basename($_FILES['position_image']['name']);
            $filePath = $uploadDir . uniqid() . '_' . $fileName;
            $fileType = strtolower(pathinfo($filePath, PATHINFO_EXTENSION));
     
            // Validation du fichier
            $allowedTypes = ['jpg', 'jpeg', 'png', 'gif'];
            if (!in_array($fileType, $allowedTypes)) {
                die('Erreur : Type de fichier non supporté. Types acceptés : JPG, JPEG, PNG, GIF.');
            }
     
            if (move_uploaded_file($_FILES['position_image']['tmp_name'], $filePath)) {
                $imagePath = $filePath;
            } else {
                die('Erreur lors du téléchargement de l\'image.');
            }
        }

  2. #2
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Hello,

    Citation Envoyé par dyllanVrb Voir le message
    aucune images n'est energistrer dans le dossier
    Est-ce que tu passes bien dans la condition ? Ton formulaire a bien l'attribut enctype="multipart/form-data" ?


    Citation Envoyé par dyllanVrb Voir le message
    Et aucun lien n'est ajouter dans la base de donnée.
    Je ne vois pas de code faisant de lien avec ta base de données dans ce que tu montres.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 418
    Par défaut
    Et de plus il faudra nettoyer le nom de ton image si tu veux pouvoir la faire afficher sur un site. A minima supprimer les éventuels espaces (mais pas que) car tous les caractères ne sont pas autorisés dans une URL.

  4. #4
    Modérateur
    Avatar de blueice
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2003
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 494
    Par défaut
    Déjà je verrais quelques améliorations :
    Sécurité, les dossiers en 0755
    Une vérification après la création du dossier
    Séparer l'extension du fichier et du nom
    Réutiliser l'extension extraite pour vérifier le type
    Amélioration du message sur les types supportés
    Code PHP : 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
     
    $imagePath = null;
    if (!empty($_FILES['position_image']['name'])) {
        $uploadDir = '../../uploads/positions/';
        if (!is_dir($uploadDir)) {
            if (!mkdir($uploadDir, 0755, true)) {
                die('Erreur : Impossible de créer le répertoire d\'upload.');
            }
        }
     
     
        $fileName = basename($_FILES['position_image']['name']);
        $fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
        $uniqueFileName = uniqid() . '_' . $fileName;
        $filePath = $uploadDir . $uniqueFileName;
     
     
        // Validation du fichier
        $allowedTypes = ['jpg', 'jpeg', 'png', 'gif'];
        if (!in_array($fileExtension, $allowedTypes)) {
            die('Erreur : Type de fichier non supporté. Types acceptés : ' . implode(', ', $allowedTypes) . '.');
        }
     
     
        if (move_uploaded_file($_FILES['position_image']['tmp_name'], $filePath)) {
            $imagePath = $filePath;
        } else {
            die('Erreur lors du téléchargement de l\'image.');
        }
    }

    Ensuite comme dis par les collègues, on peut pas t'aider plus sans le reste du code mais on peut ajouter des logs d'erreurs, à tester :
    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
     
    $imagePath = null;
    if (!empty($_FILES['position_image']['name'])) {
        $uploadDir = '../../uploads/positions/';
        if (!file_exists($uploadDir)) {
            if (!mkdir($uploadDir, 0755, true)) {
                error_log("Erreur : Impossible de créer le répertoire d'upload.");
                die("Erreur : Impossible de créer le répertoire d'upload.");
            }
        }
     
     
        $fileName = basename($_FILES['position_image']['name']);
        $fileExtension = strtolower(pathinfo($fileName, PATHINFO_EXTENSION));
        $uniqueFileName = uniqid() . '_' . $fileName;
        $filePath = $uploadDir . $uniqueFileName;
     
     
        $allowedTypes = ['jpg', 'jpeg', 'png', 'gif'];
        if (!in_array($fileExtension, $allowedTypes)) {
            error_log("Erreur : Type de fichier non supporté.");
            die('Erreur : Type de fichier non supporté. Types acceptés : ' . implode(', ', $allowedTypes) . '.');
        }
     
     
        if (move_uploaded_file($_FILES['position_image']['tmp_name'], $filePath)) {
            $imagePath = $filePath;
            error_log("Image uploadée avec succès : " . $imagePath);
        } else {
            error_log("Erreur lors de l'upload : " . error_get_last()['message']);
            die("Erreur lors du téléchargement de l'image.");
        }
    }
     
     
    // Après avoir vérifié que $imagePath n'est pas null, insére-le dans la base de données
    if ($imagePath !== null) {
        // Exemple d'insertion dans la base de données (à adapter selon ta structure)
        $sql = "INSERT INTO votre_table (image_path) VALUES (?)";
        $stmt = $pdo->prepare($sql);
        if ($stmt->execute([$imagePath])) {
            error_log("Chemin de l'image insérée dans la base de données : " . $imagePath);
        } else {
            error_log("Erreur lors de l'insertion dans la base de données : " . implode(", ", $stmt->errorInfo()));
        }
    }

Discussions similaires

  1. [MySQL] Upload images dans la base de données ou non?
    Par Veers59 dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 18/06/2007, 08h52
  2. images dans base access
    Par inforlab dans le forum VB.NET
    Réponses: 5
    Dernier message: 15/05/2007, 19h57
  3. insérer image dans base de données
    Par eriz dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 16/04/2007, 12h03
  4. inserer une image dans base de données ?
    Par ouldfella dans le forum Requêtes
    Réponses: 7
    Dernier message: 20/12/2006, 16h04
  5. [VB.NET]Champ image dans base de donnée access
    Par dankes dans le forum Windows Forms
    Réponses: 10
    Dernier message: 06/10/2005, 15h31

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