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 :

$_FILES lorsqu'il n'y a aucun fichier


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut $_FILES lorsqu'il n'y a aucun fichier
    Bonjour,

    ben, ca fait quelques jours la que j'essaie de me débarasser d'une variable
    ' $erreur_img' qui apparait malgre la déclaration et la restriction de ma condition et je n'arrive plus a comprendre ce qui se passe.

    l'idée est que si il n,y pas d'images de chargée, on ne upload pas et on passe au reste du script pour les autres informations pour executer le insert et
    si il y a une image, on upload et on passe au reste du script, Jusque la tout va bien!!

    le problème survient quand il N,y a pas d'images de chargés, je declare une condition if ($_FILES['photo'] == '') {
    $erreur_img = false;
    pourtant le script continue de vérifier les autres conditions comme si il y avait une image et par conséquent déclare une erreur msg $erreur_img
    CASE4 - message: aucune image de chargée et erreur d'extension par conséquent

    quelqu'un peut-il me faire voir ou est le probleme ici?
    merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    <?php
      // On initialise l'action à réaliser
     
    	$action = (isset($_POST['action'])) && !empty($_POST['action']) ? $_POST['action'] : NULL;
     
    		switch ($action) {
     
    		case 'INSERT_passager' : // Insertion des données de l'utilisateur
            $erreur = false;
    		$erreur_img = false;
     
     
    		if ($_FILES['photo'] ==  '')  {
    			$erreur_img = false;
    		}
                elseif ($_FILES['photo'] ==  true)  {
    		     //elseif (isset($_FILES['photo']) && !empty($_FILES['photo']))  {
    				if ($_FILES['photo'] ==  true && $_FILES['photo']['error'] > 0) {
    					switch ($_FILES['photo']['error']) {
    						case 1 : $msgErreur[] = 'Le fichier téléchargé excède la taille de 2 mo.';
    						break;
    						case 2 : $msgErreur[] = 'Le fichier téléchargé excède la taille MAXFILE SIZE de 200 ko';
    						break;
    						case 3 : $msgErreur[] = 'Le fichier a été que partiellement téléchargé.';
    						break;
    						case 4 : $msgErreur[] = 'Aucun fichier a été téléchargé';				
    						break;
    						//case 5 : $msgErreur[] = 'erreur';
    						// break;
    						case 6 : $msgErreur[] = 'Un dossier temporaire est manquant';
    						break;
    						case 7 : $msgErreur[] = 'Échec de l\'ecriture du fichier sur le disque';
    						break;
    						case 8 : $msgErreur[] = 'Une extension PHP a arrété l\'envoi de fichier';
    						break;
    									//$erreur_img = true;
     
    					}										 					
    				}
     
    					$extensions = array('image/png', 'image/gif', 'image/jpg', 'image/jpeg', 'image/bmp');
    					$extension = $_FILES['photo']['type'];
     
    			if (isset($extension) && !in_array($extension, $extensions)) {  //Si l'extension existe et si elle n'est pas dans le tableau
     
    					$msgErreur[] = ' ERREUR - Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp seulement!';
    					$erreur_img = true;	
     
    			}	
     
    			if ($erreur_img == false) {
     
    				$fichier = basename($_FILES['photo']['name']);
    				$taille_maxi = 200000;
    				$taille = filesize($_FILES['photo']['tmp_name']);
    				//$extension = strrchr($_FILES['photo']['name'], '.');
    				$fichier = strtr($fichier, '
                        ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
                        'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    				$fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
    				$dossier = '../images/img_membres/';
    				if (move_uploaded_file($_FILES['photo']['tmp_name'], $dossier . $fichier) == false) {
                        $erreur_img = true;
     
    	        }
     
            }
     
    			//else {   // Aucune image de recherchée
    			// $erreur_img = true;
    				//}
    	}
    ?>
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    La réponse est dans ta question : quand aucun fichier n'est spécifié, tu obtiens $_FILES['photo']['error'] = 4 et non une chaine vide.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    oui mais comment faire sauter cette condition si le champ est vide??
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Que veux-tu dire ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Le problème c'est qu'au départ tu avais un truc à peu près fonctionnel, mais tu l'a modifié pour déboucher sur un déroulement moins logique.
    Forcément, au bout ça coince.

    Revient sur quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
     
    // On initialise l'action à réaliser
    $action = (isset($_POST['action'])) && !empty($_POST['action']) ? $_POST['action'] : NULL;
     
    // On affecte comme valeur aux 2 variables FALSE par défaut
    // On admet qu'à ce stade il n'y a pas d'erreur.
    $erreur = false;
    $erreur_img = false;
     
    switch ($action) {
        case 'INSERT_passager' : // Insertion des données de l'utilisateur
            // SI le tableau $_FILE existe ET SI le tableau $_FILES contient l'élément 'photo'
            if (isset($_FILES['photo']) && !empty($_FILES['photo']))  {
                // Ok ... $_FILES existe ET n'est pas vide
                if ($_FILES['photo']['error'] > 0) {
                    // [ERREUR] Valeur de error > à 0 donc ERREUR.
                    $erreur_img = true; // On affecte la variable à VRAI
     
                    // On recherche le type d'erreur
                    switch ($_FILES['photo']['error']) {
                        case 1 : $msgErreur[] = 'Le fichier téléchargé excède la taille de 2 mo.';
                        break;
                        case 2 : $msgErreur[] = 'Le fichier téléchargé excède la taille MAXFILE SIZE de 200 ko';
                        break;
                        case 3 : $msgErreur[] = 'Le fichier a été que partiellement téléchargé.';
                        break;
                        case 4 : $msgErreur[] = 'Aucun fichier a été téléchargé';
                        break;
                        //case 5 : $msgErreur[] = 'erreur';
                        //break;
                        case 6 : $msgErreur[] = 'Un dossier temporaire est manquant';
                        break;
                        case 7 : $msgErreur[] = 'Échec de l\'ecriture du fichier sur le disque';
                        break;
                        case 8 : $msgErreur[] = 'Une extension PHP a arrété l\'envoi de fichier';
                    break;
                    }
                }
                // On vérifie cette fois SI l'extension du fichier est valide
                $type_fichier = array('image/png', 'image/gif', 'image/jpg', 'image/jpeg', 'image/bmp');
                //$extension = $_FILES['photo']['type']; // Ne sert à rien finallement
     
                //Si le type est vide OU SI le type n'existe pas parmi le tableau $type_fichier
                if (empty($_FILES['photo']['type']) || !in_array($_FILES['photo']['type'], $type_fichier)) {
                    // [ERREUR] Type vide ou non autorisé
                    $msgErreur[] = 'ERREUR - Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp seulement!';
                    $erreur_img = true;
                }
     
                // SI aucune erreur
                if ($erreur_img == false) {
                    // Exécuté seulement SI aucune erreur
                    $fichier = basename($_FILES['photo']['name']);
                    $taille_maxi = 200000;
                    $taille = filesize($_FILES['photo']['tmp_name']);
                    //$extension = strrchr($_FILES['photo']['name'], '.');
                    $fichier = strtr($fichier, '
                    ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
                    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
                    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
                    $dossier = '../images/img_membres/';
     
                    // Dernière étape : Déplacement du fichier
                    if (move_uploaded_file($_FILES['photo']['tmp_name'], $dossier.$fichier) == false) {
                        // Erreur pour déposer le fichier
                        $erreur_img = true;
                        $msgErreur[] = 'ERREUR - Lorsque que le fichier est déplacé dans l\'espace Web';
                    }
                }
            }
        break;
    }
     
     
    // (plus loin dans le code) Partie HTML
    // On affiche les éventuels erreurs
    if ($erreur_img === true && !empty($msgErreur)) {
        echo '<pre>';
        print_r($msgErreur);
        echo '</pre>';
    }
    J'y ai rajouté quelques commentaires.
    Je te conseillerais d'en faire autant (et même mieux), ceci dans le but d'écrire en Français chaque ligne de code, chaque traitement qui est effectué.
    Si tu parviens au moins à le faire en Français et en t'efforçant de le faire de la manière la plus logique qu'il soit, ça sera déjà une excellente étape.
    En somme, la syntaxe Php te fais déjà défaut, mais avoir la bonne logique à adopter est aussi indispensable, primordiale.


    Pour non pas enfoncer le clou mais juste pour la logique, la compréhension :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if ($_FILES['photo'] ==  '')  {
        $erreur_img = false;
    }
    elseif ($_FILES['photo'] ==  true)  {
        if ($_FILES['photo'] ==  true && $_FILES['photo']['error'] > 0) {
            //
        }
     
    }
    En 1er il est dit ceci : SI le tableau $_FILES vaut rien (ou vide) ALORS on affecte à $erreur_img FALSE
    -> Ici, c'est pas logique car SI le tableau $_FILES vaut rien c'est qu'il y a une erreur, donc il faudrait affecter TRUE (ou VRAI)

    Ensuite, en admettant qu'on entre dans la condition ci-dessus, il est dit ceci :
    SI l'élément 'photo' du tableau $_FILES vaut VRAI ET si SI l'élément 'error' est > à 0 ALORS ...
    -> Ici, le problème c'est qu'il n'est pas logique de vérifier la valeur de l'élément 'photo' car cette élément ne contient pas directement une valeur mais d'autres élément : La 2ème dimension
    Exemple :
    $_FILES['photo'] -> C'est la 1ère dimension
    $_FILES['photo']['error'] -> 2ème dimension
    $_FILES['photo']['trype'] -> 2ème dimension
    Bref ... il n'y a pas à faire : if ($_FILES['photo'] == true) ça n'a pas de sens


    En espérant que tout ceci apportera un peu son petit lot de compréhension.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  6. #6
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    Le problème c'est qu'au départ tu avais un truc à peu près fonctionnel, mais tu l'a modifié pour déboucher sur un déroulement moins logique.
    Forcément, au bout ça coince.

    ben voila! C'est ca le problème, si j'ai modifié ce qui avait au départ, c'est que ca ne fonctionnait pas.
    quand $_FILES['photo'] est vide, ca déclenche 2 erreurs

    Aucun fichier a été téléchargé
    ERREUR - Vous devez uploader un fichier de type png, gif, jpg, jpeg, ou bmp seulement!

    je suis revenu exactement a ta suggestion et toujours pareil

    le problème commence ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (isset($_FILES['photo']) && !empty($_FILES['photo']))  {
    même si ($_FILES['photo']) est vide , il continue de lire le reste de l'instruction
    et déclenche les erreurs
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

  7. #7
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Alors faut peut être juste rajouter ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (isset($_FILES['photo']) && !empty($_FILES['photo']) && !empty($_FILES['photo']['name']))  {
    Si l'élément photo n'a pas de nom c'est qu'aucun fichier n'a été sélectionné, donc on ne rentrera pas dans la condition.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  8. #8
    Membre habitué Avatar de monlou
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Canada

    Informations forums :
    Inscription : Janvier 2010
    Messages : 363
    Points : 144
    Points
    144
    Par défaut
    bon enfin... ca marche..!! sti...

    i
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f (isset($_FILES['photo']) && !empty($_FILES['photo']) && !empty($_FILES['photo']['name']))  {
    et merci beaucoup RunCode
    Ils ne savaient pas que c'était impossible, alors ils l'ont fait!
    Mark Twain.

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

Discussions similaires

  1. aucun fichier trouver lors d'envois avec $_file
    Par alex77140 dans le forum Langage
    Réponses: 5
    Dernier message: 19/09/2011, 22h03
  2. Réponses: 1
    Dernier message: 22/10/2008, 12h51
  3. Désactiver Bouton du Ruban si aucun fichier Ouvert
    Par enfin dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 08/09/2008, 23h01
  4. Réponses: 11
    Dernier message: 28/05/2008, 18h04
  5. Réponses: 3
    Dernier message: 15/11/2007, 13h51

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