Erreur dans le code! mais ou?

Fermé
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 - Modifié par letrancheur le 1/03/2014 à 21:30
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 - 4 mars 2014 à 18:33
Bonjour,
Voici mon code php
<?php
//Testons si le fichier a bien été envoyé et si il n'y a pas d'erreurs
if(isset($_FILES['monfichier']) and $_FILES['monfichier']['error'] == 0)
 {
 //testons si l'extension est autorisée
 $infosfichier = pathinfo($_FILES['monfichier']['name']);
 $extension_upload = $infosfichier['extension'];
 $extensions_autorisees = array('gif', 'ico', 'png', 'jpg', 'jpeg', 'tif', 'bmp', 'tiff', 'dib', 'wdp');
 if(in_array($extension_upload, $extensions_autorisees))
  {
  // Testons si le fichier n'est pas trop gros
  if($_FILES['monfichier']['size'] <= 1000000)
   {
   /*//testons si l'monfichier n'existe pas déjà
   $file=$_FILES['monfichier']['name']; 
   $filename='/monfichier/reception'.$file; 
   if (file_exists($filename))
    {
     echo 'Le nom de l\'monfichier existe déjà, changez-le';
    }
    else
     {*/
      move_uploaded_file($_FILES['monfichier']['tmp_name'], 'reception/' . basename($_FILES['monfichier']['name']));
              echo "<center><b><br />L'envoi a bien  été effectué!</b><br />";
     ?><meta http-equiv="refresh" content="1;url=/monfichier/reception"/>
     <?php 
     //}
   }
   else
    {
     echo "L'image est trop volumineuse";
    }
  }
  else
   {
    echo "L'extension du fichier n'est pas autorisée veuillez vérifier si c'est est bien une monfichier que vous tentez d\'envoyer";
   }
 }
 else
  {
   echo "Une erreur est survenue lors de l'envoye";
  }
?>

Voici mon problème.
Mon code fonctionne presque parfaitement bien seulement j'ai un problème quand j'envoy une image trop grande il ne me met pas le message l'image est trop grande mais il me let les dernier else c'est a dire une erreur est survenue lors de l'envoye
comment dois-je faire pour que si l'image sois trop grande qu'il le mette et que il il y a des erreurs il me mette une erreur est survenue...?
Merci d'avance et bon soirée/journée
Ps j'ai une 2e question comment puis-je faire pour verifier si l'image(d'un même nom) n'existe pas déja dans le dossier
A voir également:

2 réponses

letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7
2 mars 2014 à 19:04
Voila comment j'ai du faire pour résoudre le problème mais bon comment
j'ai du faire une répétition donc une autre idée parce que la répétition je préférerait éviter
<?php
// Testons si le fichier a bien été envoyé et s'il n'y a pas d'erreur
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
if (isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
        // Testons si l'extension est autorisée
        $infosfichier = pathinfo($_FILES['monfichier']['name']);
        $extension_upload = $infosfichier['extension'];
        $extensions_autorisees = array('gif', 'ico', 'png', 'jpg', 'jpeg', 'tif', 'bmp', 'tiff', 'dib', 'wdp');
        if (in_array($extension_upload, $extensions_autorisees))
        {
                // Testons si le fichier n'est pas trop gros
                if ($_FILES['monfichier']['size'] <= 1000000)
                {
                        // On peut valider le fichier et le stocker définitivement
                        move_uploaded_file($_FILES['monfichier']['tmp_name'], 'reception/' . basename($_FILES['monfichier']['name']));
                        echo "L'envoi a bien été effectué !";
?>
<meta http-equiv="refresh" content="1;url=reception"/>
<?php
                }else{ echo "L'image est trop volumineuse";}
        }else{echo "L'envoi n'a pas été effectué car le fichier n'a pas la bonne extension!<br /> Veuillez vérifier que le fichier sois bien une image. Puis réessayez.";}
}
}else{echo "Rien n'a été envoyé";}
?>
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
3 mars 2014 à 11:27
Salut,


Dans le cas où la taille des données reçues par la méthode POST est plus grande que post_max_size, les superglobales $_POST et $_FILES seront vides. Ceci peut être surveillé de différentes façons, e.g. en passant une variable $_GET au script qui traite les données, i.e. <form action="edit.php?processed=1">, et ainsi vérifier si $_GET['processed'] est défini.


https://www.php.net/manual/fr/ini.core.php#ini.post-max-size

Bonne journée
0
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7
Modifié par letrancheur le 3/03/2014 à 12:28
ok donc que me conseillerait tu pour régler le problème?
parsque mon pseudo code c'était sa

début
vérifier si il y a bien un fichier envoyé

vérifier si le fichier envoyé est une image

si oui vérifier sa taille

(si bonne vérifier si le fichier n'existe pas déjà [pas encore fait c'est pour la suite])

(si le fichier n'existe pas encore) envoyer+message "envoyé"

(aussi-non mettre message "exite déjà")

si taille image trop grande message "trop grand" [pas un if mais un else]

si fichier n'est pas une image message "ce n'est pas une image"[pas un if mais un else]

si il n'y a rien d'envoyé message "rien n'a été envoyé"[pas un if mais un else]

fin
ce que j'ai mis entre () c'est pour la suite pas encore attaqué
et si j'ai bien compris toi tu me conseil ne ne pas toucher au code que j'ai fait dc celui qui est dans le msg précédent mais de mettre
<form action="edit.php?processed=1">
c'est sa?
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
3 mars 2014 à 12:31
Le code de ton premier post est correct, la répétition de la condition de ton deuxième message ne sert théoriquement à rien.

L'idée proposée sur la doc est effectivement d'envoyer un paramètres GET à la soumission du formulaire.
Si on reçoit ce paramètres GET mais que le tableau $_FILE est vide, on suppose que le fichier envoyé dépasse la limite définie dans la configuration de php.
0
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7
Modifié par letrancheur le 4/03/2014 à 01:22
Ok et comment puis-je faire pour faire en sorte que mon code bassé sur mon speudo-code fonctionne dans tous les cas?
Mettre la verification de la taille avant celle de l'extension ?
Ou alors je dois peux- etre virer la partie après le AND dans mon premier if?
Ou alors encore le laisser mais présiser a coter de chaque else qu'il sagit d'une erreur? Mais je crois que ca ne resolvera pas mon probleme
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 524
Modifié par Pitet le 4/03/2014 à 12:26
Ton code fonctionne déjà correctement. Il y a un seul cas que tu ne peux pas détecter avec la variable $_FILES : lorsque le fichier est trop gros.
Dans ce cas, la variable $_FILES est vide et tu ne peux pas différencier si rien n'est envoyé ou si le fichier est trop gros.
On ajoute donc un paramètre GET qui sera lui toujours envoyé.

Si vous veux controler toutes les possibilités, tu peux tester comme ceci :
if (isset($_GET['processed']))
{
    if (isset($_FILES['monfichier']))
    {
        if ($_FILES['monfichier']['error'] == 0) 
        {
            // suite de ton code
        } else { echo 'Une erreur est survenu pendant l\'envoi du fichier'; }
    } else { echo 'Le fichier envoyé est trop volumineux'; }
} else { echo 'Formulaire pas encore validé'; }


Mais tu peux simplifier en faisant un seul test si tu n'as pas besoin des détails :
if (isset($_GET['processed']) AND isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
    // le fichier est bien envoyé
} else
{
    // rien n'est envoyé ou le fichier est trop gros
}


Si le paramètre GET existe et que le tableau $_FILES est défini (is set), alors l'utilisateur a bien envoyé un fichier.
Si le paramètre GET existe mais que le tableau $_FILES n'est pas défini, alors l'utilisateur a envoyé un fichier trop gros.
Si le paramètre GET n'existe pas, l'utilisateur n'as pas encore validé le formulaire.
0
letrancheur Messages postés 210 Date d'inscription dimanche 14 juillet 2013 Statut Membre Dernière intervention 25 août 2020 7
Modifié par letrancheur le 4/03/2014 à 13:36
ok je vais tester les 2
mais c'est bizare parsque quand j'ai fait le test avec le 2e code que j'ai mis sur la page et que j'evoyait une image de 2.412.739 octets cela me mettait comme message L'image est trop volumineuse
Alors que dans le premier code cela me mettait une erreur est survenue lors de l'envoye
0