Page 1 sur 1

script upload image, image par défaut

Posté : 02 mai 2010, 18:00
par spidercrash
bonjour a tous,

J'ai script d'upload d'image qui est traité suite a un formulaire.

cepedant je souhaiterai que si la personne renseigne pas d'image, une image par défaut sera prédéfini.

Pouvez vous m'aider svp.merci d'avance.

Voici mon script
//dossier ou seront stocket les miniature et les images
$dir = getcwd()."/pics";
$dir_mini = getcwd()."/mini";



//recuperation du post du formulaire
if (isset($_POST['ok'])) {
// on teste si le champ permettant de soumettre un fichier est vide ou non
	if (empty($_FILES['mon_image']['tmp_name'])) {
		
		$erreur = 'Aucun fichier envoyé.';
	}
			else {
			
			
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier		
		$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
		if ($tableau == FALSE) {
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur 			
			unlink($_FILES['mon_image']['tmp_name']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}

	
		else {
		

		
			if ($tableau[2] == 2) {
				
				if (is_file('.pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];
				

// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille 				
				copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);
				
				if ($tableau[2] == 2) {
// on crée une image à partir de notre grande image à l'aide de la librairie GD 					
					$src = imagecreatefromjpeg($dir.'/'.$file_upload);
					$NouvelleLargeur = 120; //Largeur choisie à 350px mais modifiable
					$NouvelleHauteur = 100;
					$NouvelleLargeurpaysage = 120;
					$NouvelleHauteurpaysage = 100;
					
					
// on teste si notre image est de type paysage ou portrait 					
					if ($tableau[0] > $tableau[1]) {
						$im = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");
						imagecopyresampled($im , $src  , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $tableau[0],$tableau[1]);
					}
					else {
						$im = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");
						imagecopyresampled($im , $src  , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $tableau[0],$tableau[1]);

					}
 // on copie notre fichier généré dans le répertoire des miniatures 					
					imagejpeg ($im, $dir_mini.'/'.$file_upload);
				
			
				}
				
			include ('connect.php');			
			
                
                        $sql2 = "INSERT INTO annonces (categorie,typeannonce,souscategorie,titreannonce,descriptionannonce,prix,date,departement,region,NUMUTILISATEURS) VALUES ('$categorie','$typeannonce','$souscategorie','$titreannonce','$descriptionannonce','$prix','".date("Y-m-d H:i:s")."','$departement','$region','$NUMUTILISATEURS')";
                        $req = mysql_query($sql2)or die(mysql_error());
			
							$nom = "/{$_FILES['mon_image']['name']}";
							$image = $dir.$nom;
							$miniature = $dir_mini.$nom;
							$numannonce=mysql_insert_id();
							$sql3 = "INSERT INTO images (image,miniature,numannonce) VALUES ('$image','$miniature','$numannonce')";       
							$req = mysql_query($sql3)or die(mysql_error());

			  
			 header('Location: ../mesannonces.php');
			
			
			
									}
			else {
// si notre image n'est pas de type jpeg				
				unlink($_FILES['mon_image']['tmp_name']);
				$erreur = 'Votre image est d\'un format non supporté.';
			}
		}
	}
	
}

Re: script upload image, image par défaut

Posté : 03 mai 2010, 10:41
par visualight
Salut,

Dans ton code tu as :
$nom = "/{$_FILES['mon_image']['name']}";
$image = $dir.$nom;
$miniature = $dir_mini.$nom;

Il suffit de tester si $_FILES est renvoyé.
if (isset($_FILES['mon_image'])) {
$nom = "/{$_FILES['mon_image']['name']}";
$image = $dir.$nom;
$miniature = $dir_mini.$nom;
} else {
$nom = "/imagepardefaut.jpg";
$image = $dir.$nom;
$miniature = $dir_mini.$nom;
}
A+ ;)

Re: script upload image, image par défaut

Posté : 03 mai 2010, 18:07
par spidercrash
merci pour ta reponse je viens d'essayer cela
//dossier ou seront stocket les miniature et les images
$dir = getcwd()."/pics";
$dir_mini = getcwd()."/mini";



//recuperation du post du formulaire
if (isset($_POST['ok'])) {
// on teste si le champ permettant de soumettre un fichier est vide ou non
	if (empty($_FILES['mon_image']['tmp_name'])) {
		
		$erreur = 'Aucun fichier envoyé.';
	}
			else {
			
			
// on examine le fichier uploadé en récupérant de nombreuses informations sur ce fichier		
		$tableau = @getimagesize($_FILES['mon_image']['tmp_name']);
		if ($tableau == FALSE) {
// si le fichier uploadé n'est pas une image, on efface le fichier uploadé et on affiche un petit message d'erreur 			
			unlink($_FILES['mon_image']['tmp_name']);
			$erreur = 'Votre fichier n\'est pas une image.';
		}

	
		else {
		

		
			if ($tableau[2] == 2) {
				
				if (is_file('.pics/'.$_FILES['mon_image']['name'])) $file_upload = '_'.$_FILES['mon_image']['name'];
				else $file_upload = $_FILES['mon_image']['name'];
				

// on copie le fichier que l'on vient d'uploader dans le répertoire des images de grande taille 				
				copy ($_FILES['mon_image']['tmp_name'], $dir.'/'.$file_upload);
				
				if ($tableau[2] == 2) {
// on crée une image à partir de notre grande image à l'aide de la librairie GD 					
					$src = imagecreatefromjpeg($dir.'/'.$file_upload);
					$NouvelleLargeur = 120; //Largeur choisie à 350px mais modifiable
					$NouvelleHauteur = 100;
					$NouvelleLargeurpaysage = 120;
					$NouvelleHauteurpaysage = 100;
					
					
// on teste si notre image est de type paysage ou portrait 					
					if ($tableau[0] > $tableau[1]) {
						$im = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");
						imagecopyresampled($im , $src  , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $tableau[0],$tableau[1]);
					}
					else {
						$im = imagecreatetruecolor($NouvelleLargeur , $NouvelleHauteur) or die ("Erreur");
						imagecopyresampled($im , $src  , 0,0, 0,0, $NouvelleLargeur, $NouvelleHauteur, $tableau[0],$tableau[1]);

					}
 // on copie notre fichier généré dans le répertoire des miniatures 					
					imagejpeg ($im, $dir_mini.'/'.$file_upload);
				
			
				}
				
			include ('connect.php');			
			
                
                        $sql2 = "INSERT INTO annonces (categorie,typeannonce,souscategorie,titreannonce,descriptionannonce,prix,date,departement,region,NUMUTILISATEURS) VALUES ('$categorie','$typeannonce','$souscategorie','$titreannonce','$descriptionannonce','$prix','".date("Y-m-d H:i:s")."','$departement','$region','$NUMUTILISATEURS')";
                        $req = mysql_query($sql2)or die(mysql_error());
			
						if (isset($_FILES['mon_image'])) {
							$nom = "/{$_FILES['mon_image']['name']}";
							$image = $dir.$nom;
							$miniature = $dir_mini.$nom;
						} else {
							$nom = "/e.jpg";
							$image = $dir.$nom;
							$miniature = $dir_mini.$nom;
								}
							$numannonce=mysql_insert_id();
							$sql3 = "INSERT INTO images (image,miniature,numannonce) VALUES ('$image','$miniature','$numannonce')";       
							$req = mysql_query($sql3)or die(mysql_error());

			  
			 header('Location: ../mesannonces.php');
			
			
			
									}
			else {
// si notre image n'est pas de type jpeg				
				unlink($_FILES['mon_image']['tmp_name']);
				$erreur = 'Votre image est d\'un format non supporté.';
			}
		}
	}
	
}
} else {
        echo '<br>Vous n\'avez pas les droits pour regarder cette page...<br><br>';
        echo '<a href="index.php">Retour</a>';
}

?>
mais quand je ne met rien dans le champs image et que je valide j'arrive alors sur une page blanche pas de message d'erreur rien et l'enregistrement ne se fait pas

Re: script upload image, image par défaut

Posté : 03 mai 2010, 23:00
par visualight
OOooops .... Oui, en effet #-o
$_FILES['xxx'] existera toujours : que l'internaute envoie un fichier ou non par le formulaire, la fonction isset renverra donc toujours vrai.

Il faut faire :
if ($_FILES['mon_image']['error'] == UPLOAD_ERR_OK) {

// Moi j'écrirai : $nom = '/'.$_FILES['mon_image']['name'];
$nom = "/{$_FILES['mon_image']['name']}";

} else {
$nom = "/imagepardefaut.jpg";
}

$image = $dir.$nom;
$miniature = $dir_mini.$nom;

// TESTE AUSSI SI $NOM, $IMAGE et $MINIATURE SONT BIEN DEFINIS
echo 'nom: '.$nom.'<br />';
echo 'image_dir: '.$image.'<br />';
echo 'mini_dir: '.$miniature;

// On ajoute die(); pour afficher simplement les résultats des echo ci-dessus sans exécuter le reste du code plus bas
die();
Dans le cas d'un système d'upload, je te conseille de tester les erreurs d'upload (du moins les afficher pour savoir ce qui se passe).
Voici un exemple pour traiter les erreurs :
if ($_FILES['mon_image']['error']) {

switch ($_FILES['mon_image']['error']){

case 1: // UPLOAD_ERR_INI_SIZE
echo"Le fichier dépasse la limite autorisée par le serveur (voir fichier php.ini)";
break;

case 2: // UPLOAD_ERR_FORM_SIZE
echo "Le fichier dépasse la limite autorisée dans le formulaire");
break;

case 3: // UPLOAD_ERR_PARTIAL
echo "L'envoi du fichier a été interrompu pendant le transfert";
break;

case 4: // UPLOAD_ERR_NO_FILE
echo "La taille du fichier envoyé est égale à 0 (null)");
break;
}
} else {
 // $_FILES['mon_image']['error'] vaut 0 soit UPLOAD_ERR_OK
 // ce qui signifie qu'il n'y a eu aucune erreur
}