Probleme de boucle for

funbidule Messages postés 7 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 14 octobre 2004 - 22 janv. 2004 à 18:14
Tomcube Messages postés 311 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 14 septembre 2004 - 22 janv. 2004 à 22:11
bonjour a tous,
j'ai un petit probleme dans un programme:
<? php
session_start();
echo " fichier: $nom_fichier";

$extention_autorize="jpg|jpe|gif|bmp|pdf|php";
$poids_max_en_octet="20000";
?>
if ($nom_fichier))
{
$nom_origine=$nom_fichier;
$extention_fichier=substr(strrchr($nom_fichier,'.'),1);
$ext=explode("|", $extention_autorize);
for ($cpt=0; $cpt<(count($ext)); $cpt++)
{
if ($extention_fichier==$ext[$cpt])
{
$autorize="ok";
}
else
{
$autorize=" pas ok";
}
}
}

echo" autorisé: $autorize ";
?>

je sais que ca vient de la boucle for mais je sais pas ou!

4 réponses

Tomcube Messages postés 311 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 14 septembre 2004 1
22 janv. 2004 à 18:47
En fait ta boucle est un peu mal faite. En effet, si ton extension est "jpg", après la première analyse (celle du jpg), $autorize va avoir la valeur "ok" mais la boucle continue, et le test va de nouveau s'effectué avec "jpe" mais comme jpg !jpe, $autorize va changer sa valeur en " pas ok" ... donc je te conseille pour pas a devoir changer plus de choses, mettre break; juste en dessous de $autorize "ok".
Ensuite, pour la récupération de l'extension fichier, si ton fichier s'appelle "blabla.autretruc.jpg" le substr va retourner "autretruc.jpg" et le test va être faux ! ^^
JE te conseille donc de récupérer l'extension de la manière suivante :

$nom_fichier_split = explode(".", $nom_fichier);
$extension = array_pop($nom_fichier_split);


-------------------------------
Life is a game, Enjoy ! ^^
0
funbidule Messages postés 7 Date d'inscription mercredi 21 janvier 2004 Statut Membre Dernière intervention 14 octobre 2004
22 janv. 2004 à 19:18
Le fichier ne marche pas toujours mais je suis ok sur les erreurs signalées et je t'en remercie!
Pour t'aider voici le fichier précedent:
<?php
session_start();
?>

<form name="form1" method="post" action="upload.php" enctype="multipart/form-data">





</form>
<?
session_register(nom_fichier);
?>

puis le fichier qui bug:
<?php
session_start();
echo " fichier: $nom_fichier";
header("Cache-Control: no-cache, must-revalidate");
$extention_autorize="jpg|jpe|gif|bmp|pdf|php";
$poids_max_en_octet="20000";
?>
if ($nom_fichier))
{

$nom_origine=$nom_fichier;
$nom_fichier_split = explode(".", $nom_fichier);
$ext= array_pop($nom_fichier_split);

for ($cpt=0; $cpt<(count($ext)); $cpt++)
{
if ($extention_fichier==$ext[$cpt])
{
$autorize="ok";
break;
}
else
{
$autorize=" pas ok";
}
}
}

echo" autorisé: $autorize ";
?>
merci de ton aide en tout cas
0
davwart Messages postés 855 Date d'inscription mardi 19 novembre 2002 Statut Membre Dernière intervention 28 juillet 2009 1
22 janv. 2004 à 20:37
juste une remarque:
ton explode retourne un tableau.
la fonction in_array(element, tableau) permet de tester si element est dans le tableau.

c'est + propre ;)
0
Tomcube Messages postés 311 Date d'inscription vendredi 4 avril 2003 Statut Membre Dernière intervention 14 septembre 2004 1
22 janv. 2004 à 22:11
Le in_array est dangereux pour voir si l'extension est bonne.
par exemple un fichier s'appelant jpg.exe passera ^^ !
Par contre pour que tu refasses le tableau des extensions dispos et que tu réussis à avoir l'extension avec la fonction que je t'ai filé, c'est vrai que c'est plus propre.

Pour un code encore meilleur, utiliser la variable $_FILES["nom_fichier"]["type"] est le must ! Elle contient une valeur de type MIME ("image/gif", "image/jpg" etc ...).

-------------------------------
Life is a game, Enjoy ! ^^
0
Rejoignez-nous