Upload image et extensions [Résolu/Fermé]

Signaler
Messages postés
996
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
12 septembre 2020
-
Messages postés
996
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
12 septembre 2020
-
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

Messages postés
2370
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
10 mars 2020
431
Salut,

Ta vérification semble correcte. As tu vérifier la valeur de la variable $Extension lors de l'upload d'un fichier ?
Messages postés
996
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
12 septembre 2020
15
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>';
Messages postés
996
Date d'inscription
mercredi 12 décembre 2007
Statut
Membre
Dernière intervention
12 septembre 2020
15
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