Upload image et extensions

Résolu/Fermé
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - Modifié par Sinistrus le 16/09/2015 à 13:22
Sinistrus Messages postés 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 - 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 ?


A voir également:

3 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
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 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 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 1010 Date d'inscription mercredi 12 décembre 2007 Statut Membre Dernière intervention 6 juin 2023 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