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] Nommer de façon unique le fichier de destination


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Par défaut [Upload] Nommer de façon unique le fichier de destination
    Bonjour ,

    Je suis en train de créer un site d’annonces dans lequel un internaute pourra uploader une photo .

    En fait , l’internaute sera en train de remplir un formulaire de type : titre , commentaires , choix de catégories …lorsqu’il aura la possibilité de uploader sa photo .

    Mon problème réside dans l’attribution du nom de destination de la photo .

    Je souhaite en effet que celui soit du type id.jpg ou id.gif …où id serait le numéro de l’annonce en cours de création …

    Id est un champs auto-incrémenté dans ma table annonces .

    En clair , je cherche à écrire la variable $nom qui corresponde à ce que je souhaite ci-dessus telle que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $nom = ????
    $resultat = move_uploaded_file($_FILES[‘icone’][‘tmp_name’],$nom) ;
    Possible ou faut-il s’orienter vers une autre solution ?

    Merci d’avance pour vos réponses ,

    HAbroc

  2. #2
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    Bonjour,
    Tu peux utiliser la fonction microtime() pour nommer tes fichiers de facon unique.
    Z.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    tu peux faire simplement (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    	// Répertoire de stockage
    	$rep='./ICONES/';
    	// nom unique grace a ID
    	$nom = $ID.'_'.$_FILES['icone']['name'];
    	// enregistrement de l image
    	$resultat = move_uploaded_file($_FILES[‘icone’][‘tmp_name’],$rep.$nom) ;
    ?>

  4. #4
    Membre éclairé
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Par défaut
    Merci pour la rapidité de vos réponses .

    J'essaie ce soir .

    HAbroc

  5. #5
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    jreaux62 :
    Je connais pas $ID, que fait cette variable ?

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Zwiter Voir le message
    jreaux62 : Je connais pas $ID, que fait cette variable ?
    voir 1er message de HAbroc :
    "Id est un champs auto-incrémenté dans ma table annonces"
    $ID : Il faut juste récupérer le "bon" Id de la "bonne" annonce (ca dépend si c'est un "insert" ou un "update")

  7. #7
    Membre émérite
    Profil pro
    Assistant recherche bioinformatique
    Inscrit en
    Novembre 2007
    Messages
    877
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Assistant recherche bioinformatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 877
    Par défaut
    j'avais loupé cela.
    C'est effectivement le plus logique, et plus failce a retrouver pour l'humain...

  8. #8
    Membre éclairé
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ID : Il faut juste récupérer le "bon" Id de la "bonne" annonce (ca dépend si c'est un "insert" ou un "update")
    __________________


    Je débute ...

    Lorsque l'internaute va créer son annonce via mon formulaire d'insertion d'annonces , en cliquant sur 'envoyer ' , cela va générer un nouvel id dans ma table 'annonces ' . L'upload de la photo étant inclus dans le formulaire d'annonces , comment puis -je récupérer le "bon" id ( non encore généré ) de la "bonne" annonce et en faire $ID ?

    HAbroc

  9. #9
    Invité
    Invité(e)
    Par défaut
    Par exemple, comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
       // recuperation du id en selectionnant LA DERNIERE fiche cree
       $query_id = "SELECT MAX(id) AS idmax FROM latable"; 
       $result_id = mysql_query($query_id) or die('Erreur SQL ! '.$query_id.'<br/>'.mysql_error());
       $val_id = mysql_fetch_array($result_id);
       // => id de la PROCHAINE fiche sera :
       $ID = $val_id['idmax']+1;
    ?>
    Note : il faudra enregistrer ce $ID en même temps que les autres données.

  10. #10
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Dans cette situation, il faut se servir de mysql_insert_id() ou LAST_INSERT_ID() de mysql.

    Surtout pas de MAX

  11. #11
    Invité
    Invité(e)
    Par défaut
    Sauf que mysql_insert_id() et maxdb_insert_id () supposent qu'il y a DEJA eu une requete "insert" envoyée.
    Ce qui n'est pas le cas ...
    La requete se faisant bien plus tard (après le traitement de l'upload, notamment)

  12. #12
    Membre chevronné
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Par défaut
    Oui, mais l'INSERT doit s'effectuer avant le nommage du fichier, de là, on possèdera son id.

    Utiliser un MAX engendrera forcément des problèmes.

  13. #13
    Membre éclairé
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Par défaut
    Bonsoir ,

    En suivant vos échanges , je me suis rendu sur le message :

    Utiliser mysql_insert_id(),LAST_INSERT_ID(),ou DESC LIMIT ?

    où AlexandreBOx N1bus et Antoun échangent sur le sujet .

    Il semble que ni SELECT MAX+1 , ni mysql_insert_id() ne soit la solution .

    Nibus précise un script pour générer un nom d'image unique .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    if (...) {
         $S=filesize($photo);
         $Time = date("YmdHis");
         $nom_de_limage = substr(md5($S . $Time ) , 0 , 20 ) . ".jpg ;
    }
    Cela est effectivement une solution pour avoir un nom unique , après avoir inséré l'annonce .
    Peut-etre est-il intéressant de passer par cette solution , puis de renommer cette image avec l'id de l'annonce , une fois celle-ci créé ? Par un update ?

    Reste à écrire le 'bon' update , et là , j'ai toujours besoin de vous ...

    HAbroc

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 21
    Par défaut
    Salut,
    l'insertion et l'upload se faisant dans le même script pourquoi vouloir absolument copier ton fichier avant d'avoir fait ton insert?

    tu fais ton insert dans la bdd, tu utilises musql_insert_id() pour récupérer l'id et ensuite tu copies ton fichier.

    Ou alors tu crées un nom unique tu copies ton fichier et tu stockes le nom de l'image dans la bdd. Ca a l'avantage de pouvoir prévoir un cas ou l'utilisateur n'a pas uploadé de fichier et de pas être obligé de tester pour l'affichage si l'image existe ou non.

  15. #15
    Membre éclairé
    Homme Profil pro
    directeur hypermarché
    Inscrit en
    Avril 2009
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : directeur hypermarché

    Informations forums :
    Inscription : Avril 2009
    Messages : 227
    Par défaut
    Effectivement , de ce que j'ai pu trouver sur le net , il n'y a pas de solution fiable à 100% pour récupérer le dernier id ( risque pour les upload multiples ) .
    Je vais par contre me diriger vers cette dernière solution :

    un nom unique ( grace à md5 )
    stockage du nom dans la table adéquate de la BDD

    En fait , je m'étais focalisé pour rien sur la récupération du dernier id ; car pour l'affichage de mes photos ( dans dreamweaver ) , j'ai quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images/<?php echo recorset1000['id'] ?>.jpg
    Mais rien n'empeche ( et c'est meme beaucoup mieux ) de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    images/<?php echo recorset1000['photo'] ?>.jpg
    après avoir créé un champ 'photo' dans la table , et d'y mettre les noms uniques .

    Merci à tous ,

    HAbroc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Affichage des fichiers uploadés de cette année uniquement
    Par Mlle JACQUES Hélène dans le forum Langage
    Réponses: 20
    Dernier message: 02/02/2015, 16h07
  2. Réponses: 1
    Dernier message: 13/08/2014, 09h22
  3. Réponses: 0
    Dernier message: 13/08/2014, 09h05
  4. Réponses: 1
    Dernier message: 23/10/2009, 23h12
  5. [Upload] Date de dernier accès aux fichiers...
    Par John@EuroDevz dans le forum Langage
    Réponses: 10
    Dernier message: 08/04/2005, 10h57

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