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 :

Problème avec $_FILES


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Par défaut Problème avec $_FILES
    Bonjour,

    J'utilise la variable $_FILES pour uploader des images, on peut poster un titre, du contenu et une image et lorsque je poste que du titre et du contenu logiquement je devrai avoir un message me disant que je n'ai pas choisi d'image et il me dit que l'extension est pas bonne alors que j'ai pas choisi de fichier...

    Voici mon code :

    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
     
    <?php
    if(isset($_POST['titre']) && isset($_POST['message']) && !empty($_POST['titre']) && !empty($_POST['message']))
        {
    		if(isset($_FILES['image']))
    		{
    			$dossier = '../../uploads/';
    			$fichier = basename($_FILES['image']['name']);
    			$taille_maxi = 2097152;
    			$taille = filesize($_FILES['image']['tmp_name']);
    			$extensions = array('.png', '.gif', '.jpg', '.jpeg');
    			$extension = strrchr($_FILES['image']['name'], '.'); 
    			//Début des vérifications de sécurité...
    			if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
    			{
    				 $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg';
    			}
    			if($taille>$taille_maxi)
    			{
    				 $erreur = 'Le fichier est trop gros.';
    			}
    			if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
    			{
    				 //On formate le nom du fichier ici...
    				 $fichier = strtr($fichier, 
    					  'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
    					  'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
    				 $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier);
    				 if(move_uploaded_file($_FILES['image']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
    				 {
    					  echo 'Upload effectué avec succès !';
    				 }
    				 else //Sinon (la fonction renvoie FALSE).
    				 {
    					  echo 'Echec de l\'upload !';
    				 }
    			}
    			else
    			{
    				 echo $erreur;
    			}
    		}
    		else if($_FILES['image']['name'] == '')
    		{
    			echo 'aucune image';
    		}
    ?>
    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(isset($_FILES['image']))
    		{
    ...
    		}
    		else if($_FILES['image']['name'] == '')
    		{
    			echo 'aucune image';
    		}
    Tu ne peux pas aller dans ton else : $_FILES est défini à partir du moment où tu as un formulaire avec un champ file.

    Tu l'as bien compris dans ton else, il faut checker que $_FILES['image']['name'] est rempli, donc essaye plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if(isset($_FILES['image'], $_FILES['image']['name']) && $_FILES['image']['name'] != '')
    		{
    ...
    		}
    		else
    		{
    			echo 'aucune image';
    		}
    par exemple

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Par défaut
    Une virgule dans une condition :o ?

    Et pour vérifier que mes champs titre et message sont posté comment je fais ? Il faut obligatoirement que je vérifie si c'est vide ou pas donc je vois pas trop comment faire.

  4. #4
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut
    la virgule ne concerne pas la condition, mais le isset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    isset($var1,$var2,$var3...); // retourne vrai si TOUTES les variables sont définies
    Sinon pour tes champs titres, ce que tu as fait était correct
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(isset($_POST['titre']) && isset($_POST['message']) && !empty($_POST['titre']) && !empty($_POST['message']))
    {
        if(isset($_FILES['image'], $_FILES['image']['name']) && $_FILES['image']['name'] != '')
        {
    ...
    ou si tu veux grouper dans un isset :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    if(
    	isset(
    		$_POST['titre']
    		,$_POST['message']
    		,$_FILES['image']
    		,$_FILES['image']['name']) 
    	&& !empty($_POST['titre']) 
    	&& !empty($_POST['message']))
    	&& !empty($_FILES['image']['name']))
    {

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 91
    Par défaut
    J'essaye ça se soir et je te tiens au courant

  6. #6
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    Je ne connaissais pas le coup de la virgule. C'est cool, le code est allégé.

    Et pour alléger un peu plus, il est bon aussi d'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $variable = (condition) ? "vrai" : "faux" ;
    qui affecte une valeur par défaut.

    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
    <?php
    $titre=(isset($_POST['titre']))?rawurldecode(trim((string)$_POST['titre'])):'';
    $message=(isset($_POST['message']))?rawurldecode(trim((string)$_POST['message'])):'';
    if(@get_magic_quotes_gpc()){
    	$titre=stripslashes($titre);
    	$message=stripslashes($message);
    }
    $fichier=((isset($_FILES['image']),$_FILES['image']['name']))?$_FILES['image']['name']:'';
     
    $erreur=array[];
    if($titre==='')$erreur[]='Pas de titre';
    if($message==='')$message[]='Pas de message';
    if($fichier==='')$erreur[]='Pas d\'image';
     
    if(count($erreur)>0)
    	// Traitement Erreur(s)
    else{
    	// Ok, on continue
    }
    ?>

  7. #7
    Rédacteur
    Avatar de Halleck
    Homme Profil pro
    Consultant PHP
    Inscrit en
    Mars 2003
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Consultant PHP

    Informations forums :
    Inscription : Mars 2003
    Messages : 597
    Par défaut
    Les opérateurs ternaires allègent mais ne facilitent pas la compréhension quand on débute :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $titre=(isset($_POST['titre']))?rawurldecode(trim((string)$_POST['titre'])):'';
    // on ne comprend pas au premier coup d'oeil
    Enchainer opérateur ternaire + imbriquer deux fonctions, on ne peut pas dire que ce soit une bonne pratique à mon avis...

    par ailleurs:
    Ce n'est pas du PHP

    Sinon oui on pourrait avoir à prendre en compte les magic_quote, mais autant ne pas trop embrouiller sliverman

Discussions similaires

  1. Problème avec if(isset($_FILES['monfichier']))
    Par delux450 dans le forum Langage
    Réponses: 2
    Dernier message: 15/06/2008, 23h32
  2. Problème de poids avec $_FILES
    Par taly dans le forum Langage
    Réponses: 2
    Dernier message: 27/06/2006, 13h12
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 19h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 17h10

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