Comparer l'extension d'une url avec un tableau

  • Auteur de la discussion Auteur de la discussion tryan
  • Date de début Date de début
WRInaute passionné
Bonsoir,

J'essaye de comparer l'extension d'une url insérée dans un formulaire avec des extensions contenues dans un tableau mais ça buggggg et ça m'énerve :? !!!

Dans mon code, $lechamp5 correspond à une url.
$suffixe correspond à l'extension de l'url.
Code:
else if {...}
else if(!empty($lechamp5)){
	//on verifie l'extention du fichier
	$ok = ereg("^(.+)\.(.+)$", $lechamp5, $items);
	$suffixe=$items[2] ;//ici l'extension du fichier
	//Extensions autorisées
	$extensions = array("png","gif","jpg","jpeg","JPG","bmp");
	//On boucle
	foreach ($extensions AS $variable_au_pif)
	{
		//Si l'extension de l'url est différente  des extensions du tableau
		if($suffixe != $variable_au_pif)
		{ 
			$alerte5 ='<div class="erreur"><a name="ok"></a>L\'extension '.$suffixe.' n\'est pas autorisé!</div>';
		}
	}
}
else if {...}
Quelque soit l'extension, bonne ou mauvaise, j'ai toujours mon erreur "$alerte5" qui s'affiche et je ne pige pas pourquoi ..?

Un petit coup de neurone serait bienvenu :mrgreen:
Merci
 
WRInaute passionné
Merci de ta réponse Julia41 :D ,

Je viens de tester avec la fonction in_array et ça fonctionne (youpiii^^).
Code:
else if {...}
else if(!empty($lechamp5)){
   //on verifie l'extention du fichier
   $ok = ereg("^(.+)\.(.+)$", $lechamp5, $items);
   $suffixe=$items[2] ;//ici l'extension du fichier
   //Extensions autorisées
   $extensions = array("png","gif","jpg","jpeg","JPG","bmp");
		//$comparaison renvoie 1 (TRUE) si l'extension est trouvé dans le tableau
		$comparaison=in_array($suffixe, $extensions);
		if ($comparaison != 1) 
		{
			$alerte5 ='<div class="erreur"><a name="ok"></a>L\'extension '.$suffixe.' n\'est pas autorisé!</div>';
		}
}
else if {...}
Cependant ... si l'extension est OK (ne retourne pas d'erreur), mon code ne veut plus passer au else if {...} suivant :x (saloperie de PHP) et la je sèche encore !!
Une suggestion ?
 
WRInaute impliqué
tryan a dit:
Cependant ... si l'extension est OK (ne retourne pas d'erreur), mon code ne veut plus passer au else if {...} suivant :x (saloperie de PHP) et la je sèche encore !!
Une suggestion ?
Mieux structurer ton code ?!

Si tu passes dans une conditon, forcément tu passes pas dans le "else" de cette condition, sinon y'a plus aucun interet.
Rien à voir avec PHP là, c'est de l'algo.
 
WRInaute passionné
FloBaoti a dit:
Mieux structurer ton code ?!
Effectivement ... je m'en suis rendu compte en déplacent une partie du code en dehors des conditions pour y laisser justement et uniquement les conditions elles mêmes :roll:

Allé, je m'auto flagelle sur ce coup la ^^.

Merci de ta réponse
 
WRInaute accro
A la place de
Code:
//$comparaison renvoie 1 (TRUE) si l'extension est trouvé dans le tableau
		$comparaison=in_array($suffixe, $extensions);
		if ($comparaison != 1) 
		{
			$alerte5 ='<div class="erreur"><a name="ok"></a>L\'extension '.$suffixe.' n\'est pas autorisé!</div>';
		}
Tu fais :
Code:
//$comparaison renvoie 1 (TRUE) si l'extension est trouvé dans le tableau
		if (!(in_array($suffixe, $extensions)))$alerte5 ='<div class="erreur"><a name="ok"></a>L\'extension '.$suffixe.' n\'est pas autorisé!</div>';
C'est pareil et moins chargé.

;-)
 
WRInaute accro
ta méthode pour récupérer fonctionne toujours sui un fichier à un point dans son nom? j'en doute..teste avec "mon.fichier.test.gif" par exemple... pour récupérer l'extension je partirai du bout de la chaine pour trouver le point.
 
WRInaute passionné
Merci Rod la Kox et effectivement, c'est plus mieux :mrgreen: .
@bproductiv : cette méthode fonctionne également si le fichier contient 1 ou plusieurs points. J'ai testé avec une image nommée "mon.fichier.test.gif" et il me trouve bien "gif".
 
WRInaute passionné
Et pour récupérer l'extension, tu as la fonction pathinfo qui te sort un jolie array
Code:
$var = 'wfkdjklsd.plop.avi';
$f = pathinfo($var);
return $f['extension'];
et un peu plus performant (je pense)
Code:
return pathinfo($var, PATHINFO_EXTENSION);
(pas testé si ça retourné un array ou une string
 
Discussions similaires
Haut