Upload d'image

Eléphant du PHP | 172 Messages

28 déc. 2005, 22:26

Bonsoir !!

J'ai suivi le tutoriel du site sur l'upload de fichier, mais ça ne fonctionne pas :(

J'ai encore dû faire un truc de travers.
Il n'y a aucun message d'erreur affiché, même lorsque j'essaie de mettre une image supérieur en poids à celui autorisé.

Si quelqu'un pouvait jeter un coup d'oeil à mon code, merci :mrgreen:
<form action="astuces.php?astuce=edition" method="post" enctype="multipart/form-data">
								<input type="hidden" name="MAX_FILE_SIZE" value="80000" />
								<p>
									<label>Veuillez entrez votre pseudo</label>
									<input type="text" name="pseudo" maxlength="12" />
								</p>
								<p>
									<label>Entrez le titre de votre astuce</label>
									<input type="text" name="titre" maxlength="50" />
								</p>
								<p>
									<label>Mettre une image</label>
									<input type="file" name="image" />
								</p>
								<textarea name="desc"></textarea>
								
								<input type="submit" value="apercu" />
						</form>
									
						<?php
				}
				if(isset($_POST['pseudo']) && isset($_POST['titre']) && isset($_POST['desc']))
				{
						if(!empty($_POST['pseudo']) && !empty($_POST['titre']) && !empty($_POST['desc']))
						{
								$pseudo = htmlentities($_POST['pseudo']);
								$titre = htmlentities($_POST['titre']);
								$astuce = nl2br(htmlentities($_POST['desc']));
								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
										}
								}
								if(isset($erreur))
								{
										echo '<p>', $erreur ,'</p>';
								}
						}
				}
		}
Ensuite, j'aurais une question, j'ai déjà vu des sites qui propose plusieurs enregistrement d'images avec le même input, les fichiers s'affichent en dessous au fur et à mesure, comment fait-on cela ?

Ah oui, aussi, questin qui va vous sembler bête, pourquoi utiliser la fonction unset en début de formulaire ?

Merci.

ViPHP
ViPHP | 649 Messages

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.
Image

Eléphant du PHP | 172 Messages

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.

Eléphant du PHP | 172 Messages

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:

ViPHP
ViPHP | 649 Messages

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?
Image

Eléphant du PHP | 172 Messages

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.

ViPHP
fab
ViPHP | 2657 Messages

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é
Seul l'intelligent a le pouvoir de se trouver con
try { work(); } catch(FlemmeExeption $e) { sleep(84600); }

Eléphant du PHP | 172 Messages

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 ?

Mammouth du PHP | 1311 Messages

29 déc. 2005, 23:07

tu a peut etre u probleme de casse

Eléphant du PHP | 172 Messages

29 déc. 2005, 23:15

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

A quel niveau ?

Mammouth du PHP | 1311 Messages

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:

Eléphant du PHP | 172 Messages

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.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

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']) )

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 172 Messages

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:

Eléphant du PHP | 172 Messages

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 ?