mettre une condition dans un if

logtt
Invité n'ayant pas de compte PHPfrance

02 juin 2011, 14:01

bonjour

mon idéal serait le code suivant :
if (file_exists($chemindudossier . $id . '_1.' . (('jpg') or ('jpeg')) ))
{echo 'sisi c la win';}			
mais dans les faits ca ne marche pas vraiment du au " (('jpg') or ('jpeg')) " :s

mon problème est que je voudrais supprimer des fichiers mais je ne sais pas forcément quelle extension il a (il peut avoir les différents format d'une photo :jpg / jpeg and co).
donc je souhaiterais avoir une condition dans le if pour rentrer tout les formats possibles comme ca si la condition trouve l'un d'entre eux : paf dans la suite de mon code je peux le delete !

ou alors si vous avez une astuce pour que le code fasse abstraction de l'extension j'achète :)

logtt
Invité n'ayant pas de compte PHPfrance

02 juin 2011, 15:52

dsl j'ai inversé titre et nom utlisateur si un admin peut modif :s

j'réfléchis au foreach et while, ce qui me donne :

$extension = array ('jpg','jpeg','gif','png');

foreach $extension{

if (file_exists($chemin . $id . '_1.' . $extension ))
{echo 'ca marche';}
else echo 'raté';
}

et
$extension = array ('jpg','jpeg','gif','png');

while($ext=$extension){

if (file_exists($chemin . $id . '_1.' . $ext ))
{echo 'ca marche';}
else echo 'raté';
}
mais non ca morche po :/

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 juin 2011, 17:06

Pourquoi ne pas stocker le nom ou l'extension du fichier à l'endroit ou tu stockes l'id, tu pourrais ainsi être sur de supprimer le bon fichier.. ce serait ainsi plus efficace :)

Sinon, tu peux essayer ainsi :
if (file_exists($chemindudossier . $id . '_1.' . 'jpg') || file_exists($chemindudossier . $id . '_1.' . 'jpeg') )
Mais il faut ensuite savoir lequel était vrai pour le supprimer...

Ton idée de tableau et de foreach peut fonctionner, il faut juste rectifier la syntaxe du foreach :
$extension = array ('jpg','jpeg','gif','png');

foreach ($extension as $ext) {
   if (file_exists($chemin . $id . '_1.' . $ext ))
      echo 'ca marche';
   else 
      echo 'raté';
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

logtt
Invité n'ayant pas de compte PHPfrance

02 juin 2011, 19:00

sauvegarder l'extension serait pas une bonne solution car ca reviendrait à créer une colonne dans ma bdd juste pour ca :s

par contre la correction du foreach est la solution qui me convient merci pour ta rectification....

après pour la suppression (pour information si ca peut aider) je me tracasse pas je lance un unlike en reprennant le array ... ce qui fait que je vais suprimer id_1.jpg / id_1.jpeg / id_1.gif etc. et dans le tas j'ai le bon et les autre suppressions qui n'auront servit à rien (car le fichier n'existera tout simplement pas) ne me renvoi pas d'erreur

par conséquent je choisis l'option de l'élimination de masse :D

petite question au passage je pense (car j'ai plusieurs variables dans le registre des extensions) faire :

une cascade de foreach en trois niveau :

foreach (id demandé) :

________{ foreach (photo_possible par id) :

_____________{foreach (extension par photo possible) :

if exists ....
{unlike ....}
}}}

théoriquement ca devrait marcher mais vue qu'il y a 4, 4 et 8 conditions par foreach est-ce que php va pas me bouder et me ralentir la page ?

logtt
Invité n'ayant pas de compte PHPfrance

02 juin 2011, 19:14

j'ai fais le calcul lorsque le visiteur valide ca fait donc un total de 160 possibilités à la fin :D
en contre partie c'est pas une option qui sera utilisé 10 fois par minute.
verdict c'est quand même trop !D ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 juin 2011, 21:07

Disons que ce n'est pas ce qu'il y a de plus optimisé (même si tu auras moins d'itérations que cela puisque une fois le fichier trouvé, il n'est pas utile de continuer avec les autres extensions et tu pourras ajouter un break après le unlink :))

Par contre, je ne vois pas trop quels sont tes trois foreach, à priori une boucle pour tes ids, et une boucle pour tes extensions devraient suffire non ?

Code : Tout sélectionner

TANT QUE tu as des id TANT QUE tu as des extensions SI le fichier id_extension existe Supprime le fichier Arrête la boucle des extensions FIN SI FIN TANT QUE FIN TANT QUE
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

logtt
Invité n'ayant pas de compte PHPfrance

02 juin 2011, 23:12

bon j'ai fais mon code ca a le mérite de marcher
pr les trois foreach c que j'en ai rajouté un petit :)


le premier "supp" c'est que je donne quatre champs pour rentrer des identifiants. du coups le visiteur peut supprimer 4 fiches d'un coup si y veut :
foreach ($suppression as $supp)				                // pr chaque id demandé : vérifier chaque numéro de photo possible avec toute les expenssions possibles.
		{
			foreach ($num_photo as $num)                          // donc la photo 1 photo 2 photo 3 ou photo 4
				{
					foreach ($extension as $ext) // et la les diff extentions