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 :

Je ne comprends pas cet exemple de code


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    1 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 356
    Points : 696
    Points
    696
    Par défaut Je ne comprends pas cet exemple de code
    Bonjour à tous,

    Dans le code de cette page je ne comprends pas l'utilité du code des lignes 249 et 250 ni le rapport avec la taille du fichier à télécharger.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    mars 2005
    Messages
    4 674
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : mars 2005
    Messages : 4 674
    Points : 7 214
    Points
    7 214
    Billets dans le blog
    16
    Par défaut
    Par défaut :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->required      = self::REQUIRE_NO;
    Doc de la méthode ::setRequired(), la seule à écrire sur $this->required :

    * Défini si les fichiers sont requis ou non
    Contexte d'exécution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if ($this->_error == UPLOAD_ERR_OK && is_uploaded_file($_FILES[$this->fieldName]['tmp_name'][$i])) {
        ...
    } else {
        if ($this->required == self::REQUIRE_ALL || $this->required == self::REQUIRE_YES && $i == 0) { // Ligne 249
            $this->errors[$i] = "Erreur pendant l'upload. Fichier trop volumineux ?";
        }
    }
    UPLOAD_ERR_OK est une valeur de $_FILES[...]['error'] => https://www.php.net/manual/fr/featur...oad.errors.php

    => S'il y a une erreur sur l'upload et que le fichier est déclaré obligatoire, lève une erreur
    => Fait la vérif uniquement sur le 1er fichier de la série pour une raison que j'ignore
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    décembre 2008
    Messages
    1 356
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : décembre 2008
    Messages : 1 356
    Points : 696
    Points
    696
    Par défaut
    Merci
    Le nom des constantes parlent d'eux-même. Mais je ne vois pas pourquoi:
    • On ne distingue pas les cas de REQUIRE_ALL et REQUIRE_YES.
    • Le contrôle ne se fait que sur le premier fichier.

    Je ne comprends pas non plus le message d'erreur avec la taille du fichier.
    Dans le cas de REQUIRE_YES, il me semble qu'il faudrait exiger au moins un fichier (mais pourquoi le premier?), dans celui de REQUIRE_ALL, il faudrait exiger tous les fichiers.

    Le mystère reste entier et je vais dans un premier temps faire l'impasse, quitte quand j'aurais un moment reprendre la classe en distinguant les différents cas. J'y ai d'ailleurs déjà apporté quelques petites améliorations.

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    mars 2009
    Messages
    2 720
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : mars 2009
    Messages : 2 720
    Points : 6 153
    Points
    6 153
    Par défaut
    Si j'ai bien compris, je crois que REQUIRE_YES et REQUIRE_ALL correspondent à des cas de figure différents:
    • REQUIRE_YES est utilisé dans le cas de l'upload d'un seul fichier obligatoire ou d'au moins un fichier obligatoire parmi d'autres (et dans ce cas c'est donc le premier upload réussi qui lève l'obligation d'où le test sur $i). Donc si l'upload du premier fichier échoue l'erreur est signalée.
    • REQUIRE_ALL est utilisé lorsque tous les fichiers doivent obligatoirement être uploadés, donc si un échoue, même message.

    Je pense que l'idée derrière est que si par exemple un formulaire exige 2 fichiers obligatoires, on utilise alors 2 inputs nommés différemment et on utilise 2 instances de la classe, chacune avec REQUIRED_YES (ou REQUIRED_ALL ce qui n'est pas génant même s'il n'y a qu'un fichier).

    À noter que si vous réglez la propriété mimeCheck à autre chose que MIME_CHECK_NONE et que vous passez la propriété secureMode à true, vous ne pourrez pas uploader des fichiers nommés "wouech.zinc" ou "j.aime.le.sexe" (du fait des points qui ne sont pas échappés dans la pattern de la ligne 567).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

Discussions similaires

  1. Réponses: 12
    Dernier message: 20/04/2015, 12h42
  2. [MySQL] Je ne comprends pas ce bout de code
    Par wperle dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2011, 07h18
  3. Je ne comprends pas cette ligne de code
    Par beegees dans le forum C++
    Réponses: 17
    Dernier message: 13/05/2008, 11h02
  4. Je ne comprend pas le code source de ce programme
    Par elmodeno dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 29/10/2006, 12h16
  5. Réponses: 22
    Dernier message: 16/08/2006, 13h11

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