Probleme formulaire d'upload, renommer le fichier

Probleme formulaire d'upload, renommer le fichier - PHP - Programmation

Marsh Posté le 30-10-2007 à 13:44:51    

Bonjour,
 
Grand debutant en php je me permet de soliciter votre aide, et je vous en remercie par avance.
 
Je vous explique mon probleme, j'ai formulaire d'upload (voir ci dessous) qui me convient à 2 chose pres...
 
le premier probleme:
 
Comment faire pour renomer le fichier (nom inscrit dans le champ "nom"-"nom du fichier original".extention)
 
et le deuxieme:
 
comment faire pour que, lorsque la personne clique sur commander, le site pascule sur une "page d'attente" (anime flash par exemple) pendant l'upload de sont fichier...
 
Voici le code du formulaire:
 

Code :
  1. <body>
  2. <form method="POST" action="upload.php" enctype="multipart/form-data">
  3.      <p>
  4.      <input type="hidden" name="MAX_FILE_SIZE" value="8339040">
  5.      Fichier : <input type="file" name="avatar" />
  6.   </p>
  7.   <p>Nom:
  8.  <label>
  9.        <input type="text" name="ClientName" />
  10.     </label>
  11.   </p>
  12.  <input type="submit" name="envoyer" value="Commander">
  13. </form>
  14. </body>
  15. </html>


 
et le code de traitement:
 

Code :
  1. <?php
  2. $dossier = 'test/';
  3. $fichier = basename($_FILES['avatar']['name']);
  4. $taille_maxi = 8339040;
  5. $taille = filesize($_FILES['avatar']['tmp_name']);
  6. $extensions = array('.png', '.gif', '.jpg', '.jpeg','.JPG');
  7. $extension = strrchr($_FILES['avatar']['name'], '.');
  8. //Début des vérifications de sécurité...
  9. if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
  10. {
  11.      $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
  12. }
  13. if($taille>$taille_maxi)
  14. {
  15.      $erreur = 'Le fichier est trop gros...';
  16. }
  17. if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
  18. {
  19.      //On formate le nom du fichier ici...
  20.      $fichier = strtr($fichier,
  21.           'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
  22.           'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
  23.      $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
  24.      if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
  25.      {
  26.           echo 'Upload effectué avec succès !';
  27.      }
  28.      else //Sinon (la fonction renvoie FALSE).
  29.      {
  30.           echo 'Echec de l\'upload !';
  31.      }
  32. }
  33. else
  34. {
  35.      echo $erreur;
  36. }
  37. ?>


 
 
je vous remercie pour votre future aide....


Message édité par b440 le 30-10-2007 à 13:46:07
Reply

Marsh Posté le 30-10-2007 à 13:44:51   

Reply

Marsh Posté le 30-10-2007 à 14:50:17    

Je ne vois absolument pas le problème de renommage de fichier... Suffit de  modifier ta variable $fichier.
 
Pour la page d'attente, t'as dû remarquer que 95% de sites n'en ont pas, ce qui veut dire que ce n'est pas possible. C'est un problème de navigateurs, qui se content d'envoyer sans donner de feedback à l'utilisateur. Et on ne peut presque rien faire, c'est un problème de protocole avant tout.
 
Des sites comme youtube utilisent un flash ou du java pour faire ça mieux. Comme je vois que c'est de l'upload d'avatar, c'est pas trop grave, les gens vont quand-même pas envoyé des trucs dingues, ils n'ont cas attendre, ce à quoi ils sont déjà habitués :)

Reply

Marsh Posté le 30-10-2007 à 14:59:52    

Pour l'attente tu peut utiliser le javascript :

 

sur l'évenement onclick de ton bouton "Commander" tu peux ouvrir une pop-up ou un <div></div> contenant un gif animé d'attente.

 

j'avais fais comme ça pour un site d'upload et de partage de photos, ça marchait plutôt pas trop mal :)

 
FlorentG a écrit :

 

Des sites comme youtube utilisent un flash ou du java pour faire ça mieux. Comme je vois que c'est de l'upload d'avatar, c'est pas trop grave, les gens vont quand-même pas envoyé des trucs dingues, ils n'ont cas attendre, ce à quoi ils sont déjà habitués :)

 


pas bien : tu as la vision de facilité du développeur et non celle du confort d'utilisation pour l'internaute lambda :D

Message cité 1 fois
Message édité par JeJe_80 le 30-10-2007 à 15:02:18
Reply

Marsh Posté le 30-10-2007 à 15:15:13    

JeJe_80 a écrit :

pas bien : tu as la vision de facilité du développeur et non celle du confort d'utilisation pour l'internaute lambda :D


Je suis quand-même d'avis qu'il faudrait implémenter dans les navigateurs une autre solution. Pour l'instant, y'a rien à faire :(

Reply

Marsh Posté le 30-10-2007 à 15:53:49    

merci pour ta reponse,
 
mais comment modifier ma variable ?  
 
noob inside...

Reply

Marsh Posté le 30-10-2007 à 15:57:28    

merci jeje je vais creuser l'idée du div.
 
le formulaire risque d'etre utilisé pour uploader des photo, je pense qui si un client clique sur commander et rien de special ne s'ouvre ou bouge il risque de ce dire que ça ne marche pas...

Reply

Marsh Posté le 30-10-2007 à 18:56:31    

bin à la place de :
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie
 
tu utilises :
 
if(move_uploaded_file($_FILES['avatar']['tmp_name'], $dossier . 'nouveau_nom_prefixe-'.$fichier)) //Si la fonction renvoie


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 31-10-2007 à 09:05:41    

Yes, ça marche!!!!
 
Merci pour votre aide!!

Reply

Marsh Posté le 17-05-2010 à 15:11:42    

Bonjour,  
 
j'ai un soucis j'utilise la même chose que vous mais je voudrais que les photos soient renommées par le login de la personne comment faire ??

Reply

Marsh Posté le 18-05-2010 à 13:07:52    

ben du met le login du user connecté dans le nom du fichier en 2ième paramètre de la fonction move_uploaded_file :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed