Vous n'êtes pas identifié(e).
Pages :: 1
Bonjour,
j'ai qques problemes avec un script d'upload d'image.
Mes controles pour verifier que c'est bien une image qui est uploadée via mon formulaire ne fonctionnent pas. Du coup, n'importe quel fichier peut etre uploadé, ce qui est évidemment hors de question...
Voici le code, pourtant vraiment simple :
// gestion des erreurs, c'est ca qui ne marche pas
if (($_FILES['image']['size'] > $taille_max) || ($_FILES['image']['type'] != "image/png") || ($_FILES['image']['type'] != "image/x-png") || ($_FILES['image']['type'] != "image/jpeg") || ($_FILES['image']['type'] != "image/jpg") || ($_FILES['image']['type'] != "image/pjpg") || ($_FILES['image']['type'] != "image/pjpeg"))
{
$erreur = "<span class='warning'>L'image doit etre un fichier jpeg ou png d'un poids inférieur à 20 Mo !</span>";
}
//
if (!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['name']);
$dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
$dest_fichier = strtolower($dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
$lienimage = "images/actualites/$dest_fichier";
}
}
else lienimage = "";
?>
Quelle est l'erreur ? et sinon, avez-vous une autre solution que de controler les type mime pour m'assurer que c'est bien une image jpg ou png de moins de 20 Mo qui est uploadée ? Merci
Hors ligne
Merci de ta réponse mais...
tu veux dire si j'ecris ca :
Ca veut dire : si "la taille est sup à 20 Mo" ET QUE "le type mime n'est pas jpeg" ET QUE ""...
Donc si j'ai un fichier jpeg ou png qui fait une taille superieure a 20 Mo l'erreur ne sera pas gérée. Alors qu'avec des || je gère chaque cas. Non ? J'ai faux ?
Et puis ca ne me dit pas pourquoi les controles marchent pas. Je viens encore de tester et ca ne marche effectivement pas. Si je les enleve, tout le script s'execute bien. Sinon, non seulement n'importe quel type de fichier est uploadé, mais en plus, le lien dans la table ne s'écrit pas... heeelp !
Hors ligne
Hum disons que j'ai aussi faux que toi.
J'ai du mal à raisonner à la négative, mais tes OU de base ne peuvent fonctionner.
Simplifions la condition en : "n'est pas du png" OU "n'est pas du jpeg" OU "taille incorrecte"
Tu rentres dans ta condition si tu as du png car tu rends le second test vrai.
Tu rentres dans ton condition si tu as du jpeg car tu rends le premier test vrai.
C'est donc ici qu'il faut mettre des ET (mais pas avec la vérification de la taille). En gros si tu n'arrives pas à déterminer le type (parcours de toutes les conditions via les ET) c'est que le type est mauvais donc la condition doit être bonne.
Voici une solution pour simplifier l'écriture et la compréhension :
Hors ligne
Oui je vais tester ca !
Bon, j'ai fait du debug et j'avance... un peu. Mais cette verification de type mime me pose encore des problemes. Voila le code de ma fonction complete. J'ai veriufié et la gestion d'erreur de taille fonctionne. Par contre avec ce code, j'ai toujours l'erreur de type mime, c'est a dire qu'aucun fichier ne passe. J'ai mis des !== mais je suis pas sur...
if (isset($_FILES['image']))
{
$taille_max = 20000000; // taille limitée à 20 Mo - A voir avec le param max_file_size du serveur
$dest_dossier = '/homez.325/meretmed/www/webdev/standis/images/actualites/'; // realpath du dossier de l'image a parametrer
if ($_FILES['image']['size'] > $taille_max)
{ $erreur = "<span class='warning'>L'image doit etre un fichier jpeg ou png d'un poids inférieur à 20 Mo !</span>"; }
elseif (($_FILES['image']['type'] !== "image/png") || ($_FILES['image']['type'] !== "image/x-png") || ($_FILES['image']['type'] !== "image/jpeg") || ($_FILES['image']['type'] !== "image/jpg") || ($_FILES['image']['type'] !== "image/pjpg") || ($_FILES['image']['type'] !== "image/pjpeg"))
{ $erreur = "<span class='warning'>L'image doit etre un fichier jpeg ou png !</span>"; }
if (!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['name']);
$dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
$dest_fichier = strtolower($dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
$lienimage = "images/actualites/$dest_fichier";
// Resize
$imgaredim="/homez.325/meretmed/www/webdev/standis/images/actualites/".$dest_fichier; // realpath du dossier de l'image a parametrer
$img_size = getimagesize($imgaredim);
$W_Src = $img_size[0];
$H_Src = $img_size[1];
$W_max = 150;
$W = $W_max;
$H = $W * ($H_Src / $W_Src);
$size = getimagesize($imgaredim);
if (($size['mime']=='image/jpeg') || ($size['mime']=='image/jpg') || ($size['mime']=='image/pjpg') || ($size['mime']=='image/pjpeg')) {
$img_big = imagecreatefromjpeg($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H);
imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagejpeg($img_mini,$imgaredim);
}
elseif (($size['mime']=='image/png') || ($size['mime']=='image/x-png')) {
$img_big = imagecreatefrompng($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H)
or $img_mini = imagecreate($W, $H);
imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagepng($img_mini,$imgaredim);
}
}
}
else {
$lienimage = "";
}
if (!isset($erreur)) {
require "cfg_config.php";
$db = mysql_connect($cfgHote, $cfgUser, $cfgPass) or die ("Impossible de se connecter : " . mysql_error());
mysql_select_db($cfgBase,$db);
$query = "INSERT INTO actualites (texteFR,texteEN,lienimage,altimageFR,altimageEN,datecreation,statut) VALUES('$texteFR','$texteEN','$lienimage','$altimageFR','$altimageEN','$datecreation','1')";
mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());
echo "<span class='success'>Votre actualité a été publiée avec succès.</span>";
mysql_close($db);
return (0);
}
else echo $erreur;
}
}
Hors ligne
euh... la deuxieme fonction n'est pas a prendre en compte... petite erreur de copier-coller
C'est réparé et colorisé
MK
Hors ligne
Merci millie fois. Avec ta solution, ca marche.
Donc je repose la fonction qui marche au cas ou ca puisse servir a d'autres ...
if (isset($_FILES['image']))
{
$taille_max = 20000000; // taille limitée à 20 Mo - A voir avec le param max_file_size du serveur
$dest_dossier = '/homez.325/meretmed/www/webdev/standis/images/actualites/'; // realpath du dossier de l'image a parametrer
$typeimage = array("image/png", "image/x-png", "image/jpeg", "image/jpg", "image/pjpg", "image/pjpeg", );
if ($_FILES['image']['size'] > $taille_max)
{ $erreur = "<span class='warning'>L'image doit etre un fichier jpeg ou png d'un poids inférieur à 20 Mo !</span>"; }
elseif (!in_array($_FILES['image']['type'], $typeimage))
{ $erreur = "<span class='warning'>L'image doit etre un fichier jpeg ou png !</span>"; }
if (!isset($erreur))
{
$dest_fichier = basename($_FILES['image']['name']);
$dest_fichier = strtr($dest_fichier,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$dest_fichier = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_fichier);
$dest_fichier = strtolower($dest_fichier);
// copie du fichier
move_uploaded_file($_FILES['image']['tmp_name'], $dest_dossier . $dest_fichier);
$lienimage = "images/actualites/$dest_fichier";
// Resize
$imgaredim="/homez.325/meretmed/www/webdev/standis/images/actualites/".$dest_fichier; // realpath du dossier de l'image a parametrer
$img_size = getimagesize($imgaredim);
$W_Src = $img_size[0];
$H_Src = $img_size[1];
$W_max = 150;
$W = $W_max;
$H = $W * ($H_Src / $W_Src);
$size = getimagesize($imgaredim);
if (($size['mime']=='image/jpeg') || ($size['mime']=='image/jpg') || ($size['mime']=='image/pjpg') || ($size['mime']=='image/pjpeg')) {
$img_big = imagecreatefromjpeg($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H);
imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagejpeg($img_mini,$imgaredim);
}
elseif (($size['mime']=='image/png') || ($size['mime']=='image/x-png')) {
$img_big = imagecreatefrompng($imgaredim);
$img_new = imagecreate($W, $H);
$img_mini = imagecreatetruecolor($W, $H)
or $img_mini = imagecreate($W, $H);
imagecopyresized($img_mini,$img_big,0,0,0,0,$W,$H,$size[0],$size[1]);
imagepng($img_mini,$imgaredim);
}
require "cfg_config.php";
$db = mysql_connect($cfgHote, $cfgUser, $cfgPass) or die ("Impossible de se connecter : " . mysql_error());
mysql_select_db($cfgBase,$db);
$query = "INSERT INTO actualites (texteFR,texteEN,lienimage,altimageFR,altimageEN,datecreation,statut) VALUES('$texteFR','$texteEN','$lienimage','$altimageFR','$altimageEN','$datecreation','1')";
mysql_query($query) or die('Erreur SQL !<br />'.$query.'<br />'.mysql_error());
echo "<span class='success'>Votre actualité a été publiée avec succès.</span>";
mysql_close($db);
return (0);
}
else {
echo $erreur;
$lienimage = "";
}
}
}
?>
Hors ligne
Pages :: 1