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 :

Stocker l'url d'une image dans une base de données


Sujet :

PHP & Base de données

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut Stocker l'url d'une image dans une base de données
    Bonjour, je fais appele a vous car j'ai un petit problème, je veux uploader l'url de mon image direct dans la base de données, tout marche bien y'a aucun soucis le problème c'est que l'image ne s'upload pas sur le serveur alors que la table mysql marche bien.

    page ajout.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
    <form method="post" action="upload.php" enctype="multipart/form-data">
    <label for="mon_fichier">Photo à envoyer : </label><br />
    <input type="hidden" name="MAX_FILE_SIZE" value="1048576" />
    <input type="file" name="photo1" id="photo1" /><br />
     
     
    <p> <label for="titre">Titre : <input type="text" name="titre" value="" size="30" maxlength="100"/> </label> </p>
     
    <p> <label for="description"> description : <input type="text" name="description" value="" size="33" maxlength="50"/> </label> </p>
     
    <p> <label for="age"> age : <input type="text" name="age" value="" size="33" maxlength="50"/> </label> </p>
    <p> <label for="origine"> origine: <input type="text" name="origine" value="" size="33" maxlength="50"/> </label> </p>
    <p> <label for="num"> Num : <input type="text" name="num" value="" size="33" maxlength="50"/> </label> </p>
     
     
    <p>
    <label for="ville"><strong> ville</strong> </label> <br/><br/>
    <textarea name="ville" id="ville" rows="10" cols="100">
     
    </textarea>
    </p>
     
     
    <p>
    <label for="cp"> <strong> cp : </strong> </label> <br/> <br/>
    <textarea name="cp" id="cp" rows="10" cols="20">
    </textarea>
    </p>
     
    <p>
    <label for="statut"> <strong> statut : </strong> </label> <br/> <br/>
    <textarea name="statut" id="statut" rows="10" cols="20">
    </textarea>
    </p>
     
    <p> <input type="submit" name="submit" value="Envoyer"/>
    <br/>
    </form>

    et voici la page 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
    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
    <?php
     
    if(isset($_POST['titre'])&& isset($_POST['description']) && isset($_POST['age']) && isset($_POST['origine']) && isset ($_POST['num']) && isset($_POST['ville']) && isset($_POST['cp']) && isset($_POST['statut']) && isset ($_FILES['photo1'])) {
     
     
       if(isset($_FILES['photo1']) && $_FILES['photo1']['error']==0) { // Inscription de la photo uploadé dans le dossier bouquin
        move_uploaded_file($_FILES['photo1']['tmp_name'],
        'http://xxxxxxxxxxxx.fr/xxxxx/md/'.basename($_FILES['photo1']['name']));
        echo 'L\'envoi a bien été effectué';
     
     
     
        } 
     
     
     
     
     
              try{ // Connexion à la BDD
              $bdd=new PDO('mysql:host=xxx;dbname=xxxx', 'xxxx','xxxxxxxxxxxx');
     
              }
     
              catch(Exception $e){
              die ('Erreur:'.$e->getMessage());
     
              }
     
     
     
                   // Insertion des données envoyées par l'internaute grâce à une requête préparée
              $stockage='http://xxxxxxxxxxxx.fr/xxxxx/md/'.$_FILES['photo1']['name'].'';
             $insertion=$bdd->prepare('INSERT INTO annonces(titre, description, age, origine, num, ville, cp, statut, photo1) VALUES (:titre, :description, :age, :origine, :num, :ville, :cp, :statut, :photo1)');       
    $insertion->execute(array(
    'titre' => $_POST['titre'],
    'description' => $_POST['description'],
    'age' => $_POST['age'],
    'origine' => $_POST['origine'],
    'num' => $_POST['num'],
    'ville' => $_POST['ville'],
    'cp' => $_POST['cp'],
    'statut' => $_POST['statut'],
    'photo1' => $stockage
    ));                          
                if($insertion==true) {
                echo '<p> Les données ont bien été enregistrées</p>';
                }
                else {
                echo 'Erreur dans l\'enregistrement des données </p>';
                    } 
     
     
     
     
     
                $insertion->closeCursor(); // déconnexion
     
    }
    ?>
    Voila merci pour votre aide :3

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    je pense que ton fichier est bien envoyé au serveur par contre je ne suis pas sûr que le movel_uploaded_file() avec pour destination du http... fonctionne par défaut.

    d'ailleurs tu peux vérifier si le déplacement s'est bien terminé car la fonction movel_uploaded_file() renvoie false en cas d'échec.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Oula j'ai pas très bien compris comment je peux retourner un false ? oui bah je vais essayé sans le Http :p

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $move = move_uploaded_file(...);
    if ($move === false) { ... }

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Parfait ! Grace à toi l'upload marche impec le seul petit soucis c'est que quand j'upload ça garde le le titre de l'image du coup j'ai upload une premiere image : Ab.jpg et après une deuxieme image que j'ai aussi appeler Ab.jpg et le probleme c'est que il affiche la première image et non pas la deusieme :/

  6. #6
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Le movel_uploaded_file() écrase sans avertissement un fichier existant, donc le changement d'image a été fait sur le serveur. Par contre l'image affichée provient toujours du cache du navigateur...
    Fait un CTRL+F5 sur ta page.

  7. #7
    Futur Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Oui mais le probleme c'est qu'il y'aura pres de 50 annonces du coup quelqu'un upload une image qui porte le meme nom que celle d'une autre annonce ça va changer les deux :/ c'est possible de rajouter l'id de l'annonce ou le titre de l'annonce après le nom du fichier pendant l'upload ?

  8. #8
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Citation Envoyé par raphaelf2 Voir le message
    quelqu'un upload une image qui porte le meme nom que celle d'une autre annonce
    Pendant l'upload, un nom temporaire est créé par le système et c'est à partir de ce nom que tu vas renommer définitivement le fichier, à toi de gérer correctement le nommage de plusieurs images pour une même annonce.

  9. #9
    Futur Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Hmmmm oui je vois mais il n'y a pas moyen de rajouter quelque chose pour qu'il n'y est aucun nom identique car ce n'est pas moi qui met les annonces mais les utilisateur et il ne ferront pas gaffe au nom de leur image

  10. #10
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Ça va dépendre de la manière dont tu gères la possibilité d'avoir et surtout d'identifier plusieurs images pour une même annonce.
    La question à te poser est de savoir si cela est important que les utilisateurs qui envoient les images aient besoin d'avoir accès au nommage.

    Si oui alors tu gardes le nom que tu récupères et tu lui ajoutes un numéro ou tu dis carrément à l'utilisateur de changer de nom (tu peux lui en proposer des dispos si ça te chante), si non, tu génères un nom bidon et tu archives en base le lien annonce-images.
    A tout hasard avant d'appliquer movel_uploaded_file(), vérifie si le nouveau nom du fichier est bien disponible. Sinon régénère le jusqu'à ce qu'il soit dispo.

  11. #11
    Futur Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    hmmm ouais je vois ce que tu veux dire ^^ alors non il ne pourrons pas gérer le nommage et moi non plus j'ai pas envie de me prendre la tete avec ça a vrai dire ^^ ça pourrait passer ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $titre = $_POST["titre"] ;
     
     
    if(isset($_POST['titre'])&& isset($_POST['description']) && isset($_POST['age']) && isset($_POST['origine']) && isset ($_POST['num']) && isset($_POST['ville']) && isset($_POST['cp']) && isset($_POST['statut']) && isset ($_FILES['photo1'])) {
     
     
       if(isset($_FILES['photo1']) && $_FILES['photo1']['error']==0) { // Inscription de la photo uploadé dans le dossier bouquin
        move_uploaded_file($_FILES['photo1']['tmp_name'], $titre, 
        './md/'.basename($_FILES['photo1']['name']));
        echo 'L\'envoi a bien été effectué';

  12. #12
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Plutôt comme ça :
    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
    if (isset($_FILES['photo_1'], $_POST['titre'], $_POST['description'], $_POST['age'], $_POST['origine'], $_POST['num'], $_POST['ville'], $_POST['cp'], $_POST['statut']))
    {
        // on vérifie que l'upload s'est déroulé sans erreur
        // que le nom récupéré ne contient que des lettres (restriction forte)
        // que la longueur du nom ne dépasse pas 15 caractères
        $basename = (string)basename($_FILES['photo1']['name']);
        if (($_FILES['photo1']['error'] === 0) && ctype_alpha($basename) && (strlen($basename) <= 15))
        {
            $dir = './md/'.$basename;
            $i   = 0;
            while (++$i <= 10)                  // jusqu'à 10 images par nom
            {
                $n = sprintf('%02d', $i);
                if (is_file($dir.$n) === false)
                {
                    $dir .= $n;
                    break;
                }
            }
            if ($i === 11)
            {
                echo "Limite du nombre d'images atteinte (10)";
            }
            else
            {
                if (move_uploaded_file($_FILES['photo1']['tmp_name'], $dir))
                    echo "L'envoi a bien été effectué";
                else
                    echo "L'envoi a échoué";
            }
       }
    }
    Il faudrait voir à gérer les extensions acceptées et aussi contrôler la taille du fichier reçu pour avoir quelque chose de complet

  13. #13
    Futur Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    Merci pour le scripte mais il ne fonctionne pas enfin c'est surement moi qui est fait une connerie hahah ^^

    page upload complete :

    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
    <?php
     
    	if (isset($_FILES['photo_1'], $_POST['titre'], $_POST['description'], $_POST['age'], $_POST['origine'], $_POST['num'], $_POST['ville'], $_POST['cp'], $_POST['statut']))
    {
        // on vérifie que l'upload s'est déroulé sans erreur
        // que le nom récupéré ne contient que des lettres (restriction forte)
        // que la longueur du nom ne dépasse pas 15 caractères
        $basename = (string)basename($_FILES['photo1']['name']);
        if (($_FILES['photo1']['error'] === 0) && ctype_alpha($basename) && (strlen($basename) <= 15))
        {
            $dir = './md/'.$basename;
            $i   = 0;
            while (++$i <= 10)                  // jusqu'à 10 images par nom
            {
                $n = sprintf('%02d', $i);
                if (is_file($dir.$n) === false)
                {
                    $dir .= $n;
                    break;
                }
            }
            if ($i === 11)
            {
                echo "Limite du nombre d'images atteinte (10)";
            }
            else
            {
                if (move_uploaded_file($_FILES['photo1']['tmp_name'], $dir))
                    echo "L'envoi a bien été effectué";
                else
                    echo "L'envoi a échoué";
            }
       }
    }    
     
     
     
              try{ // Connexion à la BDD
              $bdd=new PDO('mysql:host=xxxxxx;dbname=xxxxx', 'xxxxxxx','xxxxxxxx');
     
              }
     
              catch(Exception $e){
              die ('Erreur:'.$e->getMessage());
     
              }
     
     
     
                   // Insertion des données envoyées par l'internaute grâce à une requête préparée
              $stockage='http://xxxxxxxxx/xxx/md/'.$_FILES['photo1']['name'].'';
             $insertion=$bdd->prepare('INSERT INTO annonces(titre, description, age, origine, num, ville, cp, statut, photo1) VALUES (:titre, :description, :age, :origine, :num, :ville, :cp, :statut, :photo1)');        
    $insertion->execute(array(
    'titre' => $_POST['titre'],
    'description' => $_POST['description'],
    'age' => $_POST['age'],
    'origine' => $_POST['origine'],
    'num' => $_POST['num'],
    'ville' => $_POST['ville'],
    'cp' => $_POST['cp'],
    'statut' => $_POST['statut'],
    'photo1' => $stockage
    ));                           
                if($insertion==true) {
                echo '<p> Les données ont bien été enregistrées</p>';
                }
                else {
                echo 'Erreur dans l\'enregistrement des données </p>';
                    }  
     
     
     
     
     
                $insertion->closeCursor(); // déconnexion
     
    }
    ?>

  14. #14
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    coquille dans le nom de la première clé dans le test if (isset($_FILES['photo_1'], cela devrait être if (isset($_FILES['photo1']

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Formateur en informatique
    Inscrit en
    Novembre 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Novembre 2015
    Messages : 12
    Points : 7
    Points
    7
    Par défaut
    j'ai enlevé le photo_1 et remplacer par : photo1 et ça ne marche pas :/
    aucun ajout dans la bdd, pas de message d'erreur et pas de photo upload :/

Discussions similaires

  1. [Débutant] Manipulation d'images : intégrer une image dans une image
    Par noscollections dans le forum VB.NET
    Réponses: 2
    Dernier message: 17/10/2014, 11h51
  2. Comment stocker une image dans la base de données ?
    Par geforce dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/06/2012, 13h15
  3. Insérer une légende dans une image avec une police plus petite
    Par Paulinho dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 3
    Dernier message: 29/04/2006, 14h19
  4. Introduire une image dans la base de données
    Par ghassenus dans le forum Bases de données
    Réponses: 4
    Dernier message: 04/04/2006, 10h09

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