Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1705 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Upload de fichier presque fonctionnel (presk...)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] Upload de fichier presque fonctionnel (presk...)

n°1420534
Donzeky
Le bleu c'est la vie.
Posté le 05-08-2006 à 19:37:34  profilanswer
 

Bonsoir,
 
voilà je tente de créer un formulaire qui permette l'envoi d'images .jpg ou .jpeg uniquement, ne dépassant pas les 50Ko, avec affichage des erreurs en cas de non-respect de ces règles ou envoi de formulaire vide.
Il marchait correctement jusqu'à ce que je rajoute un elseif pour la taille maxi.
 
Maintenant, il repère correctement une taille trop élevée et un format d'image interdit, mais m'interdit également aussi l'upload de .jpg et .jpeg :/
 
J'ai beau chercher, je ne vois pas d'où vient l'erreur.
Alors... merci d'avance à qui trouvera le pb (je précise que je débute en php :o)
 
Voici mon code :

Code :
  1. <?php
  2. $nom_fichier = $_FILES['fichier']['name'];
  3. $nom_fichier_temp = $_FILES['fichier']['tmp_name'];
  4. $nom_fichier_size = $_FILES['fichier']['size'];
  5. $nom_fichier_type = $_FILES['fichier']['type'];
  6. $taille_max = 50176;
  7. if (isset($_POST['upload']))
  8. {
  9. if ($nom_fichier_size==0)
  10. {
  11.  $message_erreur = '<br />L\'upload a échoué. Veuillez choisir une image.<br />';
  12. /* switch($i)
  13. {
  14. case 0:
  15.             echo
  16. }*/
  17. }
  18. elseif($nom_fichier_size > $taille_max)/
  19. {
  20.  $message_erreur = '<br />Seuls les fichiers de moins de 50Ko sont acceptés';
  21. }
  22. elseif (!stristr($nom_fichier_type, 'jpg') || !stristr($nom_fichier_type, 'jpeg'))//stristr est semblable à strstr, mais n'est pas sensible à la casse
  23. {
  24.  $message_erreur = '<br />Seules les images de type .jpg et .jpeg sont admises.<br />';
  25. }
  26. else
  27. {
  28.  $nom_destination = 'fichiers/';
  29.  $nom_destination .= $nom_fichier;//sinon $destination vaut fichiers/$_FILES['fichier']['name']
  30.  $size = $nom_fichier_size;
  31.  move_uploaded_file($nom_fichier_temp, $nom_destination);
  32.  echo 'Le fichier '.$nom_fichier.' a été correctement uploadé <p>';
  33.  echo 'Il pèse '.$nom_fichier_size.' Octets';
  34.  echo '<p>Aperçu :<p>';
  35.  readfile($nom_destination);
  36. }
  37. }
  38. ?>
  39. <form method="post" action="file_upload_en_un_seul_fichier.php" enctype="multipart/form-data" name="formulaire">
  40. <fieldset>
  41. <legend>Envoi de fichier</legend>
  42. <label for="photo">Chemin :</label>
  43. <input type="file" name="fichier" size="30"><p>
  44. <input type="submit" name="upload" value="Uploader">
  45. <?php
  46. echo $_GET = stripslashes($message_erreur);//afficher sans les antislashes le message d'erreur transmis par GET
  47. ?>
  48. </fieldset>
  49. </form>


Message édité par Donzeky le 06-08-2006 à 15:46:25
mood
Publicité
Posté le 05-08-2006 à 19:37:34  profilanswer
 

n°1420543
AlphaZone
Posté le 05-08-2006 à 20:06:04  profilanswer
 

Tu as des tests qui me font un peu peur comme celui de la ligne 8, et tu as oublier un champ à la ligne 45
 
Voici un tutorial : http://www.phpfrance.com/tutoriaux [...] e-fichiers
 
Ca devrait t'aider.

n°1420848
Donzeky
Le bleu c'est la vie.
Posté le 06-08-2006 à 15:45:32  profilanswer
 

AlphaZone a écrit :

Tu as des tests qui me font un peu peur comme celui de la ligne 8, et tu as oublier un champ à la ligne 45
 
Voici un tutorial : http://www.phpfrance.com/tutoriaux [...] e-fichiers
 
Ca devrait t'aider.


Merci pour ta réponse.
 
J'ai rajouté </fieldset>, le champs label (c'était ça qui manquait :??:).
J'ai aussi remplacé le  
if ($_POST['upload'])
par
if (isset($_POST['upload'])).
Mais ça ne change rien...
 
Je crois que je vais carrément reprendre depuis le début, en faisant autrement.
 
 
 
EDIT : code modifié dans le premier message

Message cité 1 fois
Message édité par Donzeky le 06-08-2006 à 15:46:49
n°1420852
AlphaZone
Posté le 06-08-2006 à 16:05:40  profilanswer
 

Donzeky a écrit :


J'ai rajouté </fieldset>, le champs label (c'était ça qui manquait :??:).


 
Non c'est un champ de type hidden qui te permet de fixé la taille max des fichiers envoyés.

n°1420926
Donzeky
Le bleu c'est la vie.
Posté le 06-08-2006 à 18:14:02  profilanswer
 

Mais le fait de spécifier la taille max par :

Code :
  1. elseif($nom_fichier_size > $taille_max)
  2. $nom_fichier_size
  3. vaut
  4. $_FILES['fichier']['size']
  5. et où
  6. $taille_max
  7. vaut
  8. 50176


ne suffit pas  :??:
Ou bien c'est moins "conseillé" ?

n°1420940
AlphaZone
Posté le 06-08-2006 à 18:54:54  profilanswer
 

Et non, malheureusement cela ne suffit pas. Je pense que tu as compris que je parlais du champ hidden nommé MAX_FILE_SIZE.
Voici un article très intéressant, je pense que cela devrait t'aidé dans la compréhension : http://www.nexen.net/index.php?opt [...] method.php
 
Extrait de la partie concerné :

Citation :

Le champs caché MAX_FILE_SIZE  (mesuré en octets) doit précédé le champ input de type file et sa valeur représente la taille maximale acceptée du fichier. Ceci est considéré comme un conseil pour le navigateur, bien que PHP l'utilise également. Il est très facile de contourner cette restriction. Ne comptez pas sur le respect de cette configuration par le navigateur! La configuration de PHP sur la taille maximale à respecter ( upload_max_filesize ) ne peut être contournée, elle. Vous devez ajouter la variable MAX_FILE_SIZE  à votre formulaire dans tous les cas car il prévient le chargement de gros fichiers qui demanderait un long délai d'attente au client et ainsi fera échouer le script.


 
 
Autre précision sur ton code :

Code :
  1. $nom_fichier = $_FILES['fichier']['name'];
  2. $nom_fichier_temp = $_FILES['fichier']['tmp_name'];
  3. $nom_fichier_size = $_FILES['fichier']['size'];
  4. $nom_fichier_type = $_FILES['fichier']['type'];
  5. $taille_max = 50176;


 
Tu devrais faire cela SI et SEULEMENT SI tu es sûr qu'un fichier a été uploadé, sinon cela risque d'afficher des messages d'erreur sur ta page. C'est un peu gênant pour le visiteur et peut-être un plus pour un pirate de passage :D

Message cité 1 fois
Message édité par AlphaZone le 06-08-2006 à 18:59:32
n°1420957
Donzeky
Le bleu c'est la vie.
Posté le 06-08-2006 à 19:30:04  profilanswer
 

AlphaZone a écrit :


Autre précision sur ton code :

Code :
  1. $nom_fichier = $_FILES['fichier']['name'];
  2. $nom_fichier_temp = $_FILES['fichier']['tmp_name'];
  3. $nom_fichier_size = $_FILES['fichier']['size'];
  4. $nom_fichier_type = $_FILES['fichier']['type'];
  5. $taille_max = 50176;


 
Tu devrais faire cela SI et SEULEMENT SI tu es sûr qu'un fichier a été uploadé, sinon cela risque d'afficher des messages d'erreur sur ta page. C'est un peu gênant pour le visiteur et peut-être un plus pour un pirate de passage :D


Pour cela j'avais mis :

Code :
  1. if (isset($_POST['upload']))
  2. --> Sinon réafficher le formulaire avec le message d'erreur :
  3. "Veuillez choisir une image".


Mais après, est-ce suffisant pour la sécurité... de toute façon je lis les liens que tu m'as donnés et meme plus, et teste diférentes méthodes :)

n°1421246
AlphaZone
Posté le 07-08-2006 à 07:20:43  profilanswer
 

Justement niveau sécurité ce n'est pas au top, tu vérifi simplement que le formulaire a été envoyé or tu ne sais pas si ton champ fichier a été saisi.
 
Il faut que tu vérifi si le champ fichier a été défini et qu'il n'est pas vide : if(isset() && !empty(...))

n°1421294
flo850
moi je
Posté le 07-08-2006 à 10:27:05  profilanswer
 

il suffit de verifier la taille du tableau $_FILES  
au passage, il vaut mieux eviter de tester sur le bouton submit , il me semble que si on se sert de entrer pour valider le formulaire la variable n'est pas passé ( sous IE 6 )  
 
le pluis propre est d'utiliser un champ hidden pour checker si on est passer par le formulaire ou pas


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] Upload de fichier presque fonctionnel (presk...)

 

Sujets relatifs
Batch - Afficher les fichier du répertoire System Volume InformationGaleire Photo "miniature" en PHP
Version xdebug pour PHP 4.3.8 sous WindowsEffacer la mise en forme d'un fichier
probleme chargement de fichier csv[PHP] Prog. orientée objet pas gérée par mon serveur O_o
requete multiple PHP SQL : besoin coup de main urgentApache, MySQL PHP 5 et Windows ... petite galère à l'installation
Découpage de fichier wordPHP MVC et urls
Plus de sujets relatifs à : [PHP] Upload de fichier presque fonctionnel (presk...)


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR