Upload d'image

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Upload d'image

par dogawaf » 16 janv. 2006, 21:27

Pour l'exemple, un site avec plusieurs iput d'image, c'est eBay, quand on crée une nouvelle annonce de vente.

Voilou...

par spirou » 07 janv. 2006, 15:36

Bonjour !!

J'ai encore un petit problème concernant l'affichage du message d'erreur concernant le poids de l'image.

Pourquoi lorsque je retire le champ :

Code : Tout sélectionner

<input type="hidden" name="MAX_FILE_SIZE" value="50000" />
de mon formulaire, le message s'affiche, par contre si je le laisse, il ne s'affiche plus ?

Est-ce que cet <input> dans le formulaire est vraiment optionnel ?
J'ai un peu recherché sur google, et j'ai vu des avis contraires.

Ensuite, donc en ayant enlevé, ce champ caché de mon formulaire, le message ne s'affiche plus non plus lorsque la taille de l'image est en méga-octets, j'ai essayé sur l'exemple du tuto du site, et pareil, plus d'affichage du message d'erreur, comment fait-on pour l'afficher, même si la taille est exprimée autrement qu'en kilo-octets ?

par spirou » 30 déc. 2005, 00:19

C'est ça, ça fonctionne parfaitement :langue:

C'est tellement logique, ce que tu m'as fait comprendre que je me demande à quoi je pense des fois :roll:

Encore une fois merci à vous deux jeff et Truc

:wink:

par Truc » 29 déc. 2005, 23:59

C'est quand je valide mon formulaire, mais justement sans envoyer d'image, c'est là qu'il m'affiche ce message d'erreur, et je ne comprends pas puisque le code est dans une condition avec un isset.
la variable $_FILES['image'] existe lors de la validation du formulaire meme si elle est vide.

essaie avec un test comme ça:
if(isset($_FILES['image'])  && !empty($_FILES['image']['tmp_name']) )

par spirou » 29 déc. 2005, 23:29

Ah oui tiens, j'avais pas pensé à ça, je vais modifier pour transformer tout en miniscule :o
Merci.

Mais en fait, j'ai dû mal m'expliquer, le problème n'est pas quand j'envoi une image et qu'ensuite je valide le formulaire, là je 'ai pas d'erreur.

C'est quand je valide mon formulaire, mais justement sans envoyer d'image, c'est là qu'il m'affiche ce message d'erreur, et je ne comprends pas puisque le code est dans une condition avec un isset.

par jeff » 29 déc. 2005, 23:18

tu a un tableau qui contient les noms d'extentions celles sont toutes en miniscules, donc si tu envoi un fichier avec par exemeple monimage.JPG
il va y avoir un probleme :wink:

par spirou » 29 déc. 2005, 23:15

Qu'entends tu par un problème de casse ?

A quel niveau ?

par jeff » 29 déc. 2005, 23:07

tu a peut etre u probleme de casse

par spirou » 29 déc. 2005, 23:05

Bonsoir,

J'ai encore un petit problème avec mon code, même lorsque je n'upload pas d'image quand j'envoi le formulaire, il m'affiche tout de même un message d'erreur :

Votre image doit-être de type png, jpeg ou jpg.

J'arrive pas à trouver pourquoi.

Je remet le code, mais c'est le même :
if(isset($_FILES['image']))
{
		unset($erreur);
		$extension_tolere = array('png', 'jpg', 'jpeg');		// extension d'images autorisées
		$poids_max = 80000;
		$dossier_upload = "../images/upload/";
		if( !in_array( substr(strrchr($_FILES['image']['name'], '.'), 1), $extension_tolere ) )		// si l'extension n'est pas de type $extension_tolere
		{
				$erreur = 'Votre image doit-être de type png, jpeg ou jpg.';
		}
		elseif( file_exists($_FILES['image']['tmp_name'])		// si le fichier existe 
		&& filesize($_FILES['image']['tmp_name']) > $poids_max)	 // et si son poids est supérieur à poids_max
		{
				$erreur = 'Votre image doit être inférieure à 80Ko !';
		}
		if(!isset($erreur))		// s'il n'y pas d'erreur 
		{
				$dest_img = basename($_FILES['image']['name']);		// name signifie le nom de l'image sur la machine du visiteur
				$dest_img = strtr($dest_img,
				'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
				'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');		// remplace les caractères spéciaux
				$dest_img = preg_replace('/([^.a-z0-9]+)/i', '_', $dest_img);		// remplace les autres caractères spéciaux
				move_uploaded_file($_FILES['image']['tmp_name'], $dossier_upload . $dest_img);		// tmp_name chemin temporaire du fichier
				$chemin = $dossier_upload . $dest_img;
		}
		if(isset($erreur))
		{
				echo '<p>' . $erreur .'</p>';
		}
}
Avez vous une idée ?

par fab » 29 déc. 2005, 00:07

ça doit etre du javascript qui rajoute un input a chaque fois qu'un fichier est envoyé sinon je vois pas sauf peut etre avec activeX mais là merci pour la compatibilité

par spirou » 28 déc. 2005, 23:32

Bah en fait, je ne sais plus sur quel site j'avais vu ça, mais ça existe, j'en suis sûr, les fichiers s'affichent sous forme de liens en dessous de l'input au fur et à mesure, c'est peut-être fait avec du javascript.

Si je retrouve un lien, je le montrerais.

par alexbad » 28 déc. 2005, 23:16

Personnellement, j'ai jamais vu ça. Si on prend par exemple le webftp de lycos ou tout autre système d'upload sur le web, on voit bien qu'ils utilisent plusieurs upload... tu peux dire où tu as vu ça?

par spirou » 28 déc. 2005, 23:03

Je viens de trouver, j'avais fais une erreur dans le chemin de mon répertoire, j'avais omis de mettre un slash à la fin :oops: désolé.

Par contre si quelqu'un sait comment on le fait pour plusieur fichiers sans mettre plusieurs input, ça m'interresse :D

Merci alexbad :wink:

par spirou » 28 déc. 2005, 22:40

Merci.

Voilà ce que ça donne :
array(5) { ["name"]=>  string(10) "france.jpg" ["type"]=>  string(10) "image/jpeg" ["tmp_name"]=>  string(38) "C:/Logiciels/EasyPHP1-8\tmp\php5EE.tmp" ["error"]=>  int(0) ["size"]=>  int(34699) }
Mais je ne sais pas trop comment l'analyser.

par alexbad » 28 déc. 2005, 22:30

Fais un var_dump sur la variable $_FILES et affiche le résultat.

Pour le unset(), je crois que c'est simplement pour s'assurer que la variable est à zéro, simple protection.