[Résolu]Renommer des photos uploader

Eléphanteau du PHP | 12 Messages

18 mai 2010, 11:47

Bonjour à tous,

voilà j'aimerai que lorsque l'on uploade une photo celle-ci soit automatiquement renommée par le login de la personne.

Qui peut m'aider ??

Merciiiiii

Code : Tout sélectionner

<HTML> <HEAD> <Title>Partie Administration</Title> </HEAD> <body bgcolor ="#3366FF"> <form method="POST" action="upload.php" enctype="multipart/form-data"> <!-- On limite le fichier à 500Ko --> Veuillez nommer le fichier par votre nom.prénom SVP. Ce pour plus de facilités et s’assurer que votre photo corresponde à votre nom. Veuillez noter que si votre photo n'est pas nommée comme demandé ci-dessous, elle ne sera pas prise en compte. Votre photo ne peut pas dépasser 500ko et doit avoir le format : .png,.gif,.jpg ou .jpeg et seulement ces formats, les autres formats ne sont pas acceptés. <br> En vous remerciant. <br> <br> <input type="hidden" name="MAX_FILE_SIZE" value="500000"> Fichier : <input type="file" name="photo"> <br> <br> <input type="submit" name="envoyer" value="Envoyer le fichier"> </form> <?php if(isset($_FILES['photo'])) { $dossier = 'upload/'; $fichier = basename($_FILES['photo']['name']); $taille_maxi = 500000; $taille = filesize($_FILES['photo']['tmp_name']); $extensions = array('.png', '.gif', '.jpg', '.jpeg'); $extension = strrchr($_FILES['photo']['name'], '.'); //Début des vérifications de sécurité... if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau { $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg,...'; } if($taille>$taille_maxi) { $erreur = 'Le fichier est trop gros...'; } if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload { //On formate le nom du fichier ici... $fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier); if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier ."$login.$pswd".$fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { echo 'UPLOAD EFFECTUE AVEC SUCCES !'; } else //Sinon (la fonction renvoie FALSE). { echo 'ECHEC DE L\'UPLOAD !'; } } else { echo $erreur; } } ?> <br> <br> <a href="#" onclick="opener=self;self.close();">fermer</a> </body> </HTML>
Modifié en dernier par cuoreconleali le 19 mai 2010, 07:44, modifié 1 fois.

ViPHP
ViPHP | 1136 Messages

18 mai 2010, 12:16

Salut ,

la réponse à ta question , réside dans cette fonction :

move_uploaded_file

Regarde le lien que je t'es donné , il te suffit de jouer avec le dernier paramètre , à savoir : string $destination

Good luck ,
Ch.

Eléphanteau du PHP | 12 Messages

18 mai 2010, 12:20

Merci pour ta réponse, je sais que je dois jouer avec cette variable mais je n'y arrive pas : je ne vois pas comment lui dire que le fichier doit porter comme nom $login

As tu une idée ?

ViPHP
ViPHP | 1136 Messages

18 mai 2010, 12:25

Tu écrits :
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier ."$login.$pswd".$fichier)) ...
Heu .. là tu mets en destination :

$dossier .$login.$pswd.".$fichier
soit par exemple :

upload/TotoMotdepasseFichier.png

Bon , déjà je ne suis pas certains que mettre le mot de passe concaténé dans le nom du fichier soit conseillé ... apres , c'est toi qui vois !

mais tu peux trés bien mettre uniquement le login :
if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier .$login)) ...
Ce qui devrait donner :

upload/Toto.png

Bien entendu , la variable $login doit être saine , pour éviter toute injection de code !
htmlentities() et tout ce qui s'en suit pour que tu estimes être un login "valide".

Ch.
Evidemment $login ne doit pas être null !

Eléphanteau du PHP | 12 Messages

18 mai 2010, 12:30

merci

Voila ce que je mets mais sa ne marche pas

Code : Tout sélectionner

if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier .$login.$fichier))
y vois tu une erreur ??

je voudrais arriver a ton exemple qui est dont upload\toto.jpg

Mammouth du PHP | 672 Messages

18 mai 2010, 12:38

Voila ce que je mets mais sa ne marche pas
Bonjour.

C'est un peu court...
- Message d'erreur ? Lequel ?
- Ca fonctionne, mais le résultat n'est pas conforme ? Quel est le résultat ?
- Autre (préciser) ?

ViPHP
ViPHP | 1136 Messages

18 mai 2010, 12:45

Quel est le resultat ?

quand tu dis ça ne fonctionne pas , le fichier ne s'upload pas ? le nom n'est pas correct ? ( dans ce cas vérifies tes variables )

Pourquoi tu rajoutes $fichier à la fin ? .. en fait il manque juste l'extension à ton fichier .. si elle est unique , tu peux la spécifier de façon statique
$login.'.jpeg'
Sinon , tu peux soit la récupérer du nom du fichier d'origine , soit la déduire du tyme mime , php5.3 offre une extension sympathique la dessus :

http://fr.php.net/manual/en/function.finfo-file.php

Ch.

Eléphanteau du PHP | 12 Messages

18 mai 2010, 14:03

le résultat est que le fichier n'est pas renommé.

concernant l'extension je la récupère sans problème.

Eléphanteau du PHP | 12 Messages

18 mai 2010, 14:16

à mon avis j'ai un problème avec la variable $login qui n'arrivent pas sur la page d'Upload comment je pourrais faire ??

Eléphanteau du PHP | 12 Messages

18 mai 2010, 14:34

au fait j'ai deux pages

la première avec ceci :

Code : Tout sélectionner

<HTML> <HEAD> <Title>Accueil</Title> </frameset> </HEAD> <body bgcolor ="#3366FF"> <b><center><u>Page réservée aux étudiants de Master 2 en sciences psychologiques et de l'éducation</b></center></u> <BR> <b>Veuillez entrer votre login et votre mot de passe, ceux-ci se trouvent dans le courrier que vous avez reçu, afin de pouvoir télécharger votre photo.</b> <BR><b>Chaque étudiant de MA2, a reçu un login et un mot de passe, différent pour chacun!!</b> <? if (!isset($_POST["entre"])) { echo "<FORM method = \"POST\" action = \"index.php\">"; echo"<BR>"; echo "Login : "."<input type = \"text\" name = \"login\">"; echo"<BR>"; echo "<BR>"."Mot de Passe : "."<input type = \"password\" name = \"pswd\">"; echo"<BR>"; echo "<BR>"."<input type = \"submit\" name = \"entre\" value = \"Entrer\">"; echo "</FORM>"; } else { //connexion à la base de donnée require ("autorisation.php"); require ("branchement.php"); //lecture et mise en mémoire des valeurs entrées par l'utilisateur $login = $_POST['login']; $pswd = $_POST['pswd']; //fonction de vérification par rapport à la bd $sql = "SELECT pswd FROM etudiants WHERE nom ='$login'"; $result = mysql_query ($sql); //si le mot de passe entré et celui de la db sont idem alors message de bienvenu admin if (mysql_num_rows($result)> 0) { $pass_db = mysql_result($result,0); if($pass_db == $pswd) { echo"<BR>"; echo"<br><b> pour acceder à votre page cliquer ici </b>"; echo"<BR>"; echo '<a href ="upload.php">Pour encoder votre photo, veuillez cliquer sur ce lien</a>';//lien hypertexte $login = $_POST['login']; $pswd = $_POST['pswd']; } //si non on dit que les données ne correspondent a celle de l admin else { echo" <br><b> Les données que vous avez entrés ne correspondent pas à un étudiant</b>"; } } else { // pas d'utlisateur de ce nom echo" <br><b> Vous n'êtes pas autorisés dans cette partie </b>"; } } ?> </body> </HTML>
et la deuxième avec l'UPLOAD

Code : Tout sélectionner

<HTML> <HEAD> <Title>Partie Administration</Title> </HEAD> <body bgcolor ="#3366FF"> <form method="POST" action="upload.php" enctype="multipart/form-data"> <!-- On limite le fichier à 500Ko --> <b>Veuillez nommer le fichier par votre nom.prénom SVP. </b> <BR><b>Ce pour plus de facilités et s’assurer que votre photo corresponde à votre nom. </b> <BR><b> Veuillez noter que si votre photo n'est pas nommée comme demandé ci-dessous, elle ne sera pas prise en compte. </b> <BR><b> Votre photo ne peut pas dépasser 500ko et doit avoir le format : .png,.gif,.jpg ou .jpeg et seulement ces formats, les autres formats ne sont pas acceptés.</b> <br> <BR><b> En vous remerciant. </b> <br> <br> <input type="hidden" name="MAX_FILE_SIZE" value="500000"> Fichier : <input type="file" name="photo"> <br> <br> <input type="submit" name="envoyer" value="Envoyer le fichier"> </form> <?php if(isset($_FILES['photo'])) { $dossier = 'upload/'; $fichier = basename($_FILES['photo']['name']); $taille_maxi = 500000; $taille = filesize($_FILES['photo']['tmp_name']); $extensions = array('.png', '.gif', '.jpg', '.jpeg'); $extension = strrchr($_FILES['photo']['name'], '.'); //Début des vérifications de sécurité... if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau { $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg,...'; } if($taille>$taille_maxi) { $erreur = 'Le fichier est trop gros...'; } if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload { //On formate le nom du fichier ici... $fichier = strtr($fichier, 'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier); if(move_uploaded_file($_FILES['photo']['tmp_name'], $dossier.$fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... { echo "<b> UPLOAD EFFECTUE AVEC SUCCES !</b>"; } else //Sinon (la fonction renvoie FALSE). { echo 'ECHEC DE L\'UPLOAD !'; } } else { echo $erreur; } } ?> <br> <br> <a href="#" onclick="opener=self;self.close();">fermer</a> </body> </HTML>

Mammouth du PHP | 672 Messages

18 mai 2010, 14:45

Dans ton script, tu appelles la variable $login. Mais à aucun moment elle n'est renseignée.

En PHP les variables ne sont pas passées d'un script à l'autre, donc tu ne peux pas récupérer dans ta page upload.php la valeur $login récupérée dans la page accueil.php
Du coup, ton script fonctionne bien mais comme $login est vide... #-o


Une solution : les sessions...


[Edit] Fautes de frappe :oops:

Eléphanteau du PHP | 12 Messages

18 mai 2010, 14:50

merci pour ta réponse mais étant très novice je ne vois pas comment faire avec les sessions.

As tu une idée pour pouvoir m'aider en gardant mes 2 pages et sans devoir modifier trop mes codes

ViPHP
ViPHP | 1136 Messages

18 mai 2010, 14:57

Fasons simple ..

L'utilisateur s'authentifie , tu enregistres son login dans une variable de session

ex : $_SESSION['login'] = $login;

Ensuite , n'importe ou dans ton code , tu peux récupérer le login de l'utilisateur , car une variable de session ( elle porte bien son nom ) est disponible pendant toute la durée de la "session" ( navigation ) de l'utilisateur , bref tant qu'il ne ferme pas son navigateur . ( bon , il y a des durées de vie ect .. mais pour le moment ne t'en préoccupe pas )

Donc , dans ta page d'upload , tu récupéres simplement le login , non plus directement avec $login qui dans cette page n'existe plus mais par $_SESSION['login']

NOTE: surtout n'oublie pas de mettre en premiere ligne , de tes script ( juste apres <?php ) session_start()

Sinon , ca ne fonctionnera pas ..
Je te conseil la documentation que t'a donné macgawel


Good luck ,
Ch

Eléphanteau du PHP | 12 Messages

18 mai 2010, 17:58

merci pour ces précieux conseils je vais tester cela et vous reviens

Eléphanteau du PHP | 12 Messages

18 mai 2010, 18:10

merci je viens d'essayer car trop envie d'y arriver mais voila l'erreur
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /var/www/promotions/index.php:13) in /var/www/promotions/index.php on line 15


Que dois je faire?