problème d'affichage avec preg_match

problème d'affichage avec preg_match - PHP - Programmation

Marsh Posté le 07-05-2006 à 23:50:04    

Bonsoir,  
je voudrais faire un script qui vérifie l'extension d'une image avec preg_match, et qui utilise le résultat pour afficher l'extension utilisée.
Le probleme est que ca fonctionne avec seulement 3 des 4 extensions, et je vois absolument pas pourquoi  :??:  
 

Code :
  1. ...
  2. if (!isset($_POST['image']) || $_POST['image'] == "" )
  3. {
  4. echo'<h4>Veuillez rentrer le nom d\'une image</h4>';
  5. }
  6. else
  7. {
  8. $chaine = "/^[\S\s]+\.jpg|jpeg|png|gif$/i"; 
  9. $image = $_POST['image'];
  10. if (preg_match($chaine, $image, $tab))
  11. {
  12.  $chaine2 = "/^\.+jpg|jpeg|gif|png$/i";
  13.  preg_match($chaine2, $image, $tab2);
  14.  echo 'Votre image a pour extension&nbsp;'.strtolower($tab2[0]);
  15. }
  16. else
  17. {
  18.  echo'Votre image n\'a pas d\'extension connue :o';
  19. }
  20. ...


 
les bouts tronqués consernent la mise en page.
 
La seule extension qui ne marche pas est le jpg (la premiere dans la chaine).
 
L'erreur affichée :

Citation :

Notice: Undefined offset: 0 in k:\public_html\test_img2.php on line 20
Votre image a pour extension


 
Merci d'avance pour votre aide  :)

Reply

Marsh Posté le 07-05-2006 à 23:50:04   

Reply

Marsh Posté le 08-05-2006 à 00:32:09    

$extension = pathinfo($_POST['image'], PATHINFO_EXTENSION);


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 08-05-2006 à 00:42:50    

Merci, mais le problème est que ce soit limité aux images, et avec l'utilisation de preg_match (devoir a rendre et je trouve pas la solution :cry: )
 
Mais merci pour l'astuce, ça me servira tantôt  :D

Reply

Marsh Posté le 08-05-2006 à 00:49:07    

Ben tu peux faire qqchose du style :

Code :
  1. $allowed_image_extensions = array('jpg', 'jpeg', 'png', 'gif');
  2. if (in_array($extension, $allowed_image_extensions)) {
  3.   // Bonne extension
  4. }
  5. else {
  6.   // Mauvaise extension
  7. }


 
Sinon pour ta regexp, déjà a priori si tu veux dire jpg OU jpeg OU... gif il faut des parenthèses autour de jpg|jpeg|png|gif (rajoute "?:" en début de parenthèse si tu ne veux pas capturer celle-ci).
 
Ah et puis à ce que je sache, [\s\S] est équivalent à '.' (n'importe quel caractère).


Message édité par sielfried le 08-05-2006 à 00:49:29

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 08-05-2006 à 09:53:06    

PleT a écrit :

Merci, mais le problème est que ce soit limité aux images, et avec l'utilisation de preg_match (devoir a rendre et je trouve pas la solution :cry: )
 
Mais merci pour l'astuce, ça me servira tantôt  :D


 
Dis à ton prof que c'est un mongole et qu'on utilise pas preg_match pour ça. C'est quoi ce devoir débile franchement... C'est pas les utilisations justifiées des expreg qui manquent pourtant.  :heink:  
 
Sinon la soluce de sielfried est bonne sauf que c'est '.jpg', '.gif' etc... qu'il faut chercher. [:petrus75]

Reply

Marsh Posté le 08-05-2006 à 10:23:45    

Hermes le Messager a écrit :


Sinon la soluce de sielfried est bonne sauf que c'est '.jpg', '.gif' etc... qu'il faut chercher. [:petrus75]


 
Il me semble que pathinfo renvoie l'extension sans le point. [:figti]


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 08-05-2006 à 10:29:10    

sielfried a écrit :

Il me semble que pathinfo renvoie l'extension sans le point. [:figti]


Relis le sujet.
 
Il veut chopper le nom complet des files et afficher l'extension.  :o  
 
Sinon, évidemment qu'il peut chopper directement l'extension.  :D

Reply

Marsh Posté le 08-05-2006 à 10:36:14    

De toutes manières : list($width, $height, $type, $attr) = getimagesize("img/flag.jpg" );

Reply

Marsh Posté le 08-05-2006 à 10:37:12    

Ben le nom complet il l'a direct dans $_POST['image'] a priori, y'a pas à le chopper. [:autobot]  
 
Bon j'ai dû louper un truc, bref. :o (il est super tôt là, je suis pas réveillé [:dawa])


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 08-05-2006 à 13:45:58    

Oui le nom complet je l'ai, mais le probleme c'est que je dois faire ça avec un preg_*  :(  
 
Sinon le code marche, mais pour seulement 3 des extensions, celle qui est placée en premier dans la chaine ne fonctionne pas.  :sweat:  
 
Et quand je mets des parenthèses comme ca :
 

Code :
  1. $chaine2 = "/^\.+(jpg|jpeg|gif|png)$/i";


ou

Code :
  1. $chaine2 = "/^\.+?:(jpg|jpeg|gif|png)$/i";


ou

Code :
  1. $chaine2 = "/^\.+?\(jpg|jpeg|gif|png)$/i";


ou

Code :
  1. $chaine2 = "/^\.+?(jpg|jpeg|gif|png)$/i";


 
rien ne marche  :sweat:

Reply

Marsh Posté le 08-05-2006 à 13:45:58   

Reply

Marsh Posté le 08-05-2006 à 15:03:57    

Code :
  1. $pattern = '#\.(jpe?g|gif|png)$#i';
  2.  
  3. if (preg_match($pattern, $image, $matches) == 1)    {  
  4.     $extension = $matches[1];
  5.     echo 'Votre image a pour extension ' . strtolower($extension) . '.';    
  6. }    
  7. else {
  8.     echo 'Votre image n\'a pas d\'extension connue.';
  9. }


---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 08-05-2006 à 21:16:44    

Merci beaucoup!! Ca marche c'est magnifique je sais pas pourquoi j'ai voulu compliquer, c'est toujours ce qu'il y a de plus simple qui marche  [:dawa]  
Merci encore :jap:

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed