Upload image et extensions

Résolu/Fermé
Sinistrus
Messages postés
1007
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
20 mai 2022
- Modifié par Sinistrus le 16/09/2015 à 13:22
Sinistrus
Messages postés
1007
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
20 mai 2022
- 16 sept. 2015 à 15:20
Bonjour à tous !

J'essaie de poser des conditions à mon upload d'image tout en prenant compte des extension a accepter (ce qui ne fonctionne pas...) :
// Dossier racine
$PathImage = '../../../images/logos/';

// Créer dossier si existe pas
if (!is_dir($PathImage)) {mkdir($PathImage, 0705, true);}

// 1Mo
$MaxSize = 1000000;

// Extension valides
$Ext_Valide = array('.png', '.PNG');

$_FILES['Fr_Image']['name'];
$_FILES['Fr_Image']['type'];
$_FILES['Fr_Image']['size'];
$_FILES['Fr_Image']['tmp_name'];
$_FILES['Fr_Image']['error'];


if ($_FILES['Fr_Image']['error'] > 0) $erreur = "Erreur lors du transfert de l'image.";
if ($_FILES['Fr_Image']['size'] > $MaxSize) $erreur = "Le fichier est trop volumineux.";

$Extension = strrchr($_FILES['Fr_Image']['name'], '.');
if (!in_array($Extension, $Ext_Valide)) {
 $erreur = "Vous devez uploader un fichier de type .PNG";}


$Fr_Marque  = mb_strtoupper($Fr_Marque,'UTF-8');
$Texte  = $Fr_Marque;
$search  = array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ');
$replace = array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y');
$TexteValid = str_replace($search, $replace, $Texte);
$Remplace = preg_replace('/([^.A-Za-z0-9]+)/i', '-', $TexteValid);

$Fr_Lien = strtolower($Remplace);

$Fr_Image = strtolower($Remplace).$Extension;
$Resultat = move_uploaded_file($_FILES['Fr_Image']['tmp_name'], $PathImage.$Fr_Image);



J'ai même essayé avec :
$Extension = pathinfo($_FILES['Fr_Image']['name'], PATHINFO_EXTENSION);
if(!in_array($Extension,$Ext_Valide)) $erreur = "L'extension de l'image est incorrecte.";

Mais ça ne marche pas. Vous avez idée svp ?


3 réponses

Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
543
16 sept. 2015 à 14:29
Salut,

Ta vérification semble correcte. As tu vérifier la valeur de la variable $Extension lors de l'upload d'un fichier ?
0
Sinistrus
Messages postés
1007
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
20 mai 2022
17
16 sept. 2015 à 15:08
Merci Pitet de t'intéresser au poste.

Lorsque je fais un echo à
$Extension = pathinfo($_FILES['Fr_Image']['name'], PATHINFO_EXTENSION);
il me revoit
txt
ou
png
mais garde l'erreur que le fichier soit bon ou pas.

J'ai changé le code de ma page pour essayer de mieux organiser, mais rencontre toujours le même soucis :

if (isset($_POST["action"]) && $_POST["action"] == "send"){


$Ext_Valide 	= "";
$Extension 		= "";
$Fr_Marque 		= "";
$Fr_Lien 		= "";
$Remplace 		= "";
$Texte			= "";


// Récupération des valeurs
$_FILES['Fr_Image']['name'];
$_FILES['Fr_Image']['type'];
$_FILES['Fr_Image']['size'];
$_FILES['Fr_Image']['tmp_name'];
$_FILES['Fr_Image']['error'];

$Fr_Marque		= $_POST["Fr_Marque"];							$Fr_Marque		= stripslashes($Fr_Marque);
$Fr_Pays_CI		= isset($_POST["Fr_Pays_CI"]) ? "1" : "0";		$Fr_Pays_CI		= stripslashes($Fr_Pays_CI);
$Fr_Pays_SN		= isset($_POST["Fr_Pays_SN"]) ? "1" : "0";		$Fr_Pays_SN		= stripslashes($Fr_Pays_SN);


// Dossier racine
$PathImage = '../../../images/logos/';

// Créer dossier si existe pas
if (!is_dir($PathImage)) {mkdir($PathImage, 0705, true);}

// 1Mo
$MaxSize = 1000000;

// Extension valides
$Ext_Valide = array('png', 'PNG');

// Récupère l'extension du fichier uploadé
$Extension = pathinfo($_FILES['Fr_Image']['name'], PATHINFO_EXTENSION);

// Convertis $Marque en majuscule
$Fr_Marque  = mb_strtoupper($Fr_Marque,'UTF-8');
$Texte		= $Fr_Marque;

// Remplace les caractère accentués
$search		= array('À','Á','Â','Ã','Ä','Å','Ç','È','É','Ê','Ë','Ì','Í','Î','Ï','Ò','Ó','Ô','Õ','Ö','Ù','Ú','Û','Ü','à','á','â','ã','ä','å','ç','è','é','ê','ë','ì','í','î','ï','ð','ò','ó','ô','õ','ö','ù','ú','û','ü','ý','ÿ');
$replace	= array('A','A','A','A','A','A','C','E','E','E','E','I','I','I','I','O','O','O','O','O','U','U','U','U','a','a','a','a','a','a','c','e','e','e','e','i','i','i','i','o','o','o','o','o','o','u','u','u','u','y','y');
$TexteValid = str_replace($search, $replace, $Texte);

// Remplace les caractères spéciaux par des '-'
$Remplace	= preg_replace('/([^.A-Za-z0-9]+)/i', '-', $TexteValid);

// Convertis $Remplace en minuscule
$Fr_Lien	= strtolower($Remplace);

// Convertis $Remplace en minuscule et ajoute l'extension
$Fr_Image = strtolower($Remplace).$Extension;



echo 'Ext_Valide: '.$Ext_Valide.'<br />';
echo 'Extension: '.$Extension.'<br />';
echo 'in_array: '.in_array($Ext_Valide);



if($Extension <> in_array($Ext_Valide)) 	{$_GET["msg"] = urlencode("L'extension de l'image est incorrecte. Veuillez choisir un fichier de type .png");}else{
if($_FILES['Fr_Image']['size'] > $MaxSize) 	{$_GET["msg"] = urlencode("Le fichier est trop volumineux.");}else{
if($_FILES["Fr_Image"]["error"] != 0) 		{$_GET["msg"] = urlencode("Veuillez renseigner le champ « <strong>Image</strong> »");}else{
if(empty($Fr_Marque)) 						{$_GET["msg"] = urlencode("Veuillez renseigner le champ « <strong>Marque</strong> »");}else{
if(empty($Fr_Lien)) 						{$_GET["msg"] = urlencode("Veuillez renseigner le champ « <strong>Lien</strong> »");}else{







// Enregistrement dans la base
$req_fr = $pdo->prepare ("INSERT INTO tb_marques (Image, Marque, Lien, CI, SN) VALUES (:Fr_Image, :Fr_Marque, :Fr_Lien, :Fr_Pays_CI, :Fr_Pays_SN)");
$req_fr ->execute(array(
"Fr_Image"			=> $Fr_Image,
"Fr_Marque"			=> $Fr_Marque,
"Fr_Lien"			=> $Fr_Lien.'.php',
"Fr_Pays_CI"		=> $Fr_Pays_CI,
"Fr_Pays_SN"		=> $Fr_Pays_SN ));


// Upload de l'image sur le serveur
$Resultat = move_uploaded_file($_FILES['Fr_Image']['tmp_name'], $PathImage.$Fr_Image);






// Message de confirmation
if($req_fr){echo('<div class="Message">L\'enregistrement a été ajouté avec succès.</div>'.$Renvois_0);
}else{

// Message d'erreur
echo('<div class="Erreur">Une erreur est survenue lors de l\'enregistrement.</div>'.$Renvois_0);}exit();}
}}}
}}

// Mon message d'erreur
if (!empty($_GET["msg"])){$msg = urldecode($_GET["msg"]); $msg = stripslashes($msg); echo('<div class="Erreur">'.$msg.'</div>'.$Renvois_0);}


$Renvois_1 = '<script type="text/javascript">window.setTimeout("location=(\'index.php\');",5000)</script>';
$Renvois_2 = '<script type="text/javascript">window.setTimeout("location=(\'ajouter.php\');",5000)</script>';
0
Sinistrus
Messages postés
1007
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
20 mai 2022
17
16 sept. 2015 à 15:20
J'ai trouvé ^^

Il suffisait de remplacer :
if($Extension <> in_array($Ext_Valide)) 	{$_GET["msg"] = urlencode("L'extension de l'image est incorrecte. Veuillez choisir un fichier de type .png");}else{

par :
if(!in_array($Extension, $Ext_Valide))	 	{$_GET["msg"] = urlencode("L'extension de l'image est incorrecte. Veuillez choisir un fichier de type .png");}else{


Donc mettre les deux variables dans le
in_array
o'

Merci Pitet pour ton aide, tu vois j'évolue :p
0