Problème d'upload d'avatar

Fermé
Forumeur - 5 nov. 2012 à 17:44
 Forumeur - 5 nov. 2012 à 18:22
Bonjour,

Je travaille sur un espace membre avec possibilité d'uploader une image pour le profil. Le problème est que une fois l'image uploadée, je ne peux la changer que si la nouvelle image porte la même extension. C'est embêtant car je souhaite accepter les jpg, gif et png.

J'ai beau chercher, je ne vois pas d'où vient le problème :

// Upload de l'image
// Constantes						
define('TARGET', 'avatars/');
define('MAX_SIZE',230000);
define('WIDTH_MAX', 800);
define('HEIGHT_MAX', 800);
// Tableaux de données
$tabExt = array('jpg','gif','png','jpeg','JPG','GIF','PNG','JPEG');
$infosImg = array();
// Variables
$extension = '';
$message = '';
$nomImage = '';

if(!empty($_POST))
{
// On verifie si le champ est rempli
if( !empty($_FILES['avatar']['name']) )
{
// Recuperation de l'extension de l'image et mise en minuscule
$extension = pathinfo($_FILES['avatar']['name'], PATHINFO_EXTENSION);
$extension = strtolower(substr($_FILES['avatar']['name'],-3));
// On verifie l'extension du fichier
if(in_array(strtolower($extension),$tabExt))
{
// On recupere les dimensions du fichier
@$infosImg = getimagesize($_FILES['avatar']['tmp_name']);
if (empty($infosImg))
    echo '<br/><div><h3>Your image is too large. You can change it.</h3><br /></div>';
else
    echo '<br/><div></div>';


// On verifie le type de l'image
if($infosImg[2] >= 1 && $infosImg[2] <= 14)
{

// On verifie si l'image est dans les dimensions
if (($infosImg[0] <= WIDTH_MAX or $infosImg[0] > WIDTH_MAX) && ($infosImg[1] <= HEIGHT_MAX or $infosImg[1] > HEIGHT_MAX) && (filesize($_FILES['avatar']['tmp_name']) <= MAX_SIZE))

//on redimensionne limage
$x = 150;

$y = 150; # Taille en pixel de l'image redimensionnée

if ($infosImg['mime']=='image/jpeg' ) {
$img_big = imagecreatefromjpeg($_FILES['avatar']['tmp_name']); # On ouvre l'image d'origine
@$img_new = imagecreate($x, $y);
# création de la miniature
@$img_mini = imagecreatetruecolor($x, $y)
or @$img_mini = imagecreate($x, $y);

// copie de l'image, avec le redimensionnement.
@imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);

@imagejpeg($img_mini,$_FILES['avatar']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/jpg' ) {
$img_big = imagecreatefrompng($_FILES['avatar']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);

// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);

imagepng($img_mini,$_FILES['avatar']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/png' ) {
$img_big = imagecreatefrompng($_FILES['avatar']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);

// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);

imagepng($img_mini,$_FILES['avatar']['tmp_name'] );
}
elseif ($infosImg['mime']=='image/gif' ) {
$img_big = imagecreatefromgif($_FILES['avatar']['tmp_name']); # On ouvre l'image d'origine
$img_new = imagecreate($x, $y);
# création de la miniature
$img_mini = imagecreatetruecolor($x, $y)
or $img_mini = imagecreate($x, $y);

// copie de l'image, avec le redimensionnement.
imagecopyresized($img_mini,$img_big,0,0,0,0,$x,$y,$infosImg[0],$infosImg[1]);

imagegif($img_mini,$_FILES['avatar']['tmp_name'] );
}
{
// Parcours du tableau d'erreurs
if(isset($_FILES['avatar']['error'])
&& UPLOAD_ERR_OK === $_FILES['avatar']['error'])
{
// On renomme le fichier
$nomImage = $username.'.'.$extension;
// Si c'est OK, on teste l'upload
if(move_uploaded_file($_FILES['avatar']['tmp_name'], TARGET.$nomImage))
{
$requete=mysql_query('insert into 1_validavatar(id, url_avatar, username) values ('.$_SESSION['userid'].', "'.TARGET.$nomImage.'", "'.$username.'")');
A voir également:

1 réponse

Il est possible que le problème vienne de ma requête pour mettre à jour la base de données :

$requete2 = 'UPDATE inscrits SET avatar = ' . TARGET.$nomImage . ' where id="'.mysql_real_escape_string($_SESSION['userid']).'"';
0