Recuperer les images à partir d'un formulaire

Fermé
tankeu - 18 mai 2015 à 01:02
hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 - 18 mai 2015 à 13:45
Bonjour, j'aimerai savoir comment recuperer les images à partir d'un formulaire et l'inserer dans une BD et puis le recuperer et l'afficher



1 réponse

hharchi9 Messages postés 567 Date d'inscription mercredi 18 décembre 2013 Statut Membre Dernière intervention 1 juillet 2015 24
18 mai 2015 à 13:45
Bonjour,

Tout d'abord, il est déconseillé de stocker directement les images dans la base de données. Il suffit de stocker dans la base de données l'adresse de l'image sur le serveur.

Pour que le formulaire supporte le transfert de fichier il faut le déclarer comme ceci :
<code html><form method="post" action="traitement.php" enctype="multipart/form-data">

Ensuite, pour le champ du fichier, il suffit d'utiliser ceci :
<input type="hidden" name="MAX_FILE_SIZE" value="100000" />
<input type="file" name="img" id="img" />
(Taille max : 100 ko)<br /></code>
Le champ hidden permet une première restriction sur la taille de l'image mais il est à savoir qu'elle n'est en aucun cas suffisante : de plus amples vérifications sont requises dans le script php de traitement du formulaire.

Voici un exemple de traitement du fichier envoyé :

$dossier="{$_SERVER['DOCUMENT_ROOT']}/images/"; //Dossier de réception la première partie donne la source du serveur (exemple : /home)
if (!empty($_FILES['img']['size'])) //S'il y a bien un fichier
{
	//On définit les variables :
	$maxsize = 1000000; //Poid de l'image
	$maxwidth = 1000; //Largeur de l'image
	$maxheight = 1000; //Longueur de l'image
	//Liste des extensions valides
	$extensions_valides = array( 'jpg' , 'jpeg' );
				 
	if ($_FILES['img']['error'] > 0) //Si erreur de chargement
	{
		$img_erreur = "Erreur lors du tranfsert de l'img : ";
	}
	if ($_FILES['img']['size'] > $maxsize) //si taille trop grande
	{
	        $i++;
		$img_erreur1 = "Le fichier est trop gros :
		(<strong>".$_FILES['img']['size']." Octets</strong>
		contre <strong>".$maxsize." Octets</strong>)";
	}
				 
	$image_sizes = getimagesize($_FILES['img']['tmp_name']);
	if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
	{
		$i++;
		$img_erreur2 = "Image trop large ou trop longue :
						(<strong>".$image_sizes[0]."x".$image_sizes[1]."</strong> contre
						<strong>".$maxwidth."x".$maxheight."</strong>)";
	}
				 
	$extension_upload = strtolower(substr(  strrchr($_FILES['img']['name'], '.')  ,1));
	if (!in_array($extension_upload,$extensions_valides) )
	{
		$i++;
		$img_erreur3 = "Extension de l'img incorrecte";
	}
        }
	if ($i == 0) // Si $i est vide, il n'y a pas d'erreur
	{
		if(isset($_FILES['img']))
	{ 
	 $chemin=$dossier.$nom_fichier.'.jpg'; //où noom_fichier est le nom que vous donnez au fichier
	if(move_uploaded_file($_FILES['img']['tmp_name'], $chemin)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
	{
		echo 'Upload effectué avec succès vers :<br/>';
		echo $chemin.'<br/>';
	}
	else //Sinon (la fonction renvoie FALSE).
	{
		echo 'Echec de l\'upload vers :<br/>';
		echo $chemin.'<br/>';
	}
	}
	else{
		echo 'pas de fichier à upload !<br/><br/>';
	}
	}
	else{
	        echo'<p>'.$affiche_erreur.'</p>';
		echo'<p>'.$affiche_erreur1.'</p>';
		echo'<p>'.$affiche_erreur2.'</p>';
		echo'<p>'.$affiche_erreur3.'</p>';
	}


Cet exemple (tiré de l'un de mes scripts) affiche le dossier de réception mais vous pouvez très bien vous en passer. Si les images que vous chargez sont issus d'un formulaire rempli par les membres (exemple : avatars...) il faut faire attention aux noms doublons qui écraseront les fichiers déjà présents. Il est donc impératif de faire attention à cela (on peut par exemple faire un hash du nom de fichier concaténé au pseudo du membre...).

Espérant que cela vous aide,

Cordialement,

hharchi9.
0