8796 sujets

Développement web côté serveur, CMS

bonjour !
Je récupère tous les docs d'une table et les affiche.
Dans ces données je récupère un champ qui se présente toujours sous la forme : monfichier.ext
et je voudrais tester .extension pour afficher selon le resultat une image(genre word, ppt, excel, pdf etc....)
et donc je me disais : fait un switch et gère tous les cas générals et mais une image en default

oui mais voila XD :
switch ($ligne['chemin']){    
   case '%.txt':     echo '<img src="img/txt.jpg" width="60px" style="float: left"/>';   
   break;    
   case '%.docx':    echo '<img src="img/word.jpg" width="60px" style="float: left"/>';   
   break;    
   case '%.pptx':    echo '<img src="img/ppt.jpg" width="60px" style="float: left"/>';   
   break;    
   case '%.pdf':      echo '<img src="img/pdf.jpg" width="60px" style="float: left"/>';   
   break;    
} 


et bien sur çà ne marche pas XD donc je me dis c'est genre une * à la place du % donc je cherche un peu sur le net et je trouve rien, du coup je commence à me demander si ce que je veux faire et réellement réalisable ou est ce que je vais devoir m'amuser avec des if ??


Solution apporté par Poppyto :

$path=pathinfo($ligne['chemin']);
switch ($path['extension']){    
	   case 'txt': echo '<img src="img/txt.jpg" width="60px" style="float: left"/>';   
	   break;    
	   case 'docx': echo '<img src="img/word.jpg" width="60px" style="float: left"/>';   
	   break;    
	   case 'pptx': echo '<img src="img/ppt.jpg" width="60px" style="float: left"/>';   
	   break;    
	   case 'pdf': echo '<img src="img/pdf.jpg" width="60px" style="float: left"/>';   
	   break;    
}  

Modifié par mini-truc (04 May 2011 - 10:03)
le switch teste une égalité, il n'y a pas de notion d'* ou de %

grosso modo le premier test sera


if($ligne['chemin']=='%.txt')
         echo '<img src="img/txt.jpg" width="60px" style="float: left"/>';  


Autant te dire que ça ne marchera jamais ^^.

Le mieux à faire est de récupérer d'abord ton extension de chemin, le .XXX et d'appliquer le switch/case après :


switch (pathinfo($ligne['chemin'])['extension']){     
   case 'txt':     echo '<img src="img/txt.jpg" width="60px" style="float: left"/>';    
   break;     
   case 'docx':    echo '<img src="img/word.jpg" width="60px" style="float: left"/>';    
   break;     
   case 'pptx':    echo '<img src="img/ppt.jpg" width="60px" style="float: left"/>';    
   break;     
   case 'pdf':      echo '<img src="img/pdf.jpg" width="60px" style="float: left"/>';    
   break;     
} 



a écrit :
Pas sûr que ça fonctionne je n'ai pas PHP sous la main
Si le champ fichier se présent systèmatiquement sous la forme "blabla.ext" je ferais un explode() sur ce champ puis le switch() :


$temp = explode('.', $ligne['chemin'])
$ext = $temp[1];

switch($ext) {
   case 'txt':     echo '<img src="img/txt.jpg" width="60px" style="float: left"/>';     
   break;      
   case 'docx':    echo '<img src="img/word.jpg" width="60px" style="float: left"/>';     
   break;      
   case 'pptx':    echo '<img src="img/ppt.jpg" width="60px" style="float: left"/>';     
   break;      
   case 'pdf':      echo '<img src="img/pdf.jpg" width="60px" style="float: left"/>';     
   break;
}


On aurait pu faire utiliser substr() mais comme l'extension peut avoir un nombre variable de caractères (3 ou 4) autant être sûr Smiley smile
merci Nukleo j'aurais utilisé également un explode.

et merci Poppyto, petite rectification sur le code, mais sinon çà marche nickel !

$path=pathinfo($ligne['chemin']);
switch ($path['extension']){    
	   case 'txt': echo '<img src="img/txt.jpg" width="60px" style="float: left"/>';   
	   break;    
	   case 'docx': echo '<img src="img/word.jpg" width="60px" style="float: left"/>';   
	   break;    
	   case 'pptx': echo '<img src="img/ppt.jpg" width="60px" style="float: left"/>';   
	   break;    
	   case 'pdf': echo '<img src="img/pdf.jpg" width="60px" style="float: left"/>';   
	   break;    
}  


et merci à Libratoi pour le petit conseil sur pathinfo() si tu me l'avait pas dit je pense que j'aurais utilisé explode() car je le connaissais déjà, du coup çà m'a forcé à aller faire un tour sur PHP Manual ;p
Je pensais qu'il fallait un path complet pour pathinfo... cool j'ai appris quelquechose aujourd'hui Smiley smile