Bonne utilisation "enctype" pour formulaire

WRInaute accro
Bonjour,
Je permets via un formulaire d'uploader sa photo puis j'en fais une redimension. Jusqu'à là, c'est parfait mais via l'interface de mon espace membre, mes abonnés peuvent modifier leur photo mais c'est là que ça veut pas marcher!!! :twisted:
Je me suis pris la tête à comprendre pourquoi ça marche pas et donc je me suis mis à éliminer temporairement diffèrentes parties du scripot pour localiser l'erreur et en faite, je me suis apperçu qu'en faisant un "echo" sur mes variables de sorties et bien, elles n'affichaient rien!!!
Donc j'en ai conclus que cela venait de mon formulaire de modification qui ne transmettait pas mes données en "POST.
Le voici:
Code:
<tr><form method="POST" action="modifier-annonce-listing2.php" enctype="multipart/form-data" name="formulairePhoto">
<td style="background-color:rgb(172,0,172);color:white;font-weight:bolder;"><center>MODIFICATION DE VOTRE PHOTO </center></td>
</tr>
<tr>
<td><center><label>Photo : (format .jpg, .png et .gif)<br/><input name='upfile' type='file' /></label></center></td>
</tr>
<tr>
	<td><center>L'image ne peut dépasser 500 Koctets.</center></td>
</tr>
<tr>
	<td><br/><center><input type='submit' name="boolform" value='Modifier votre photo' onclick='boolform.value=1' /></center></td>
</tr></form>
Je comprends pas car il est trés simple...mais est-ce un problème de "enctype" du fait que je ne fais qu'un upload de photo???
Merci

P.S: Je précise que lorsque je fais un essai de modif. ....je vais voir sur mon serveur et aucune photo n'a été chargé par ce biais!
 
WRInaute passionné
Fais un
print_r($_FILES);
sur modifier-annonce-listing2.php.

(et les <center> c'est à éviter, tout comme le onclick='boolform.value=1' que tu devrais peut être remplacer par this.value)
D'ailleur je vois pas à quoi ça te sert de changer la valeur d'un bouton...
 
WRInaute discret
Comme l'a signalé Bacteries, pas vraiment d'intérêt (à moins que !!!) de modifier la valeur du submit.

Ensuite comment récupères-tu le fichier exactement ??? Le transfert en méthode POST du FILE crée un fichier temporaire que tu peux déplacer tout simplement avec move_uploaded_file.

Lorsque tu essaies de lire les variables est-ce bien la variable type $_POST['upfile']['name'].

Sinon j'ai déjà eu un petit problème de ce genre : il y a bug lorsque le nom du fichier comporte une apostrophe. Pas très logique l'apostrophe dans le nom d'un fichier mais malheureusement Window est trop permissif !!!

En espérant avoir donné quelques infos qui t'aideront.

Petit Edit : en regardant à nouveau ton compte tes balises ne sont pas dans le bon ordre <tr><form> et tu as ensuite </tr></form> au lieu de </form></tr>. Mais je ne suis pas sûr que cela résolve ton problème. A voir.
 
WRInaute passionné
Non mais à mon avis le problème vient de $_POST au lieu de $_FILES, enfin d'après la description de passion.
 
WRInaute discret
Bacteries a dit:
Non mais à mon avis le problème vient de $_POST au lieu de $_FILES, enfin d'après la description de passion.

J'ai répondu trop vite. Merci Bacteries. En effet pour le input file c'est $_FILES et non $_POST.

A voir maintenant s'il n'a pas fait la même erreur que celle que je viens de faire.
 
WRInaute accro
Bonjour,
Excusez-moi pour cette absence d'informations complémentaires (occupé à reprendre mon site ) mais en tout cas, je vous remercie pour votre intérêt!

En faite, j'ai suivi votre conseil de faire un print $_FILES pour voir ce qu'il disait...donc voici:
Code:
Array ( [upfile] => Array ( [name] => essai3.jpg [type] => image/jpeg [tmp_name] => /tmp/phptmshwr [error] => 0 [size] => 22030 ) ) Erreur
Et sur cette exemple, j'ai vérifié si ma photo avait été chargé-->RIEN !!

Voici ma page qui reçoit les données:
Code:
$upfile=$_POST['upfile'];
	{
$message="";
$maxsize=500*1024; //Taille maximale des fichiers qui seront uploadés (en octet)
$ex1="jpg";
$ex2="JPG";
$ex3="png";
$ex4="PNG";
$ex5="gif";
$ex6="GIF";
//extraction de n caractères d'une chaine en partant de la droite
	function right($str,$nbr)
	{ 
		return substr($str,-$nbr); 
	}
	
	//extraction de n caractères d'une chaine en partant de la gauche
	function left($str,$nbr)
	{ 
		return substr($str,0,$nbr); 
	}

			if (!empty($upfile))
			{
				//vérifie que l'upload s'est bien passé
				if (is_uploaded_file($upfile))
				{
					//vérifie que le fichier est non vide
					if ($upfile_size>0)
					{	
						//vérifie si la taille du fichier ne dépasse pas la limite
						if ($upfile_size>$maxsize)
						{
							//fichier trop grand
							$message="Le fichier a une taille supérieure à la limite autorisée!";
						}
						else
						{
							//taille correcte, vérification du type de fichier
							$type=right($upfile_name,3);

							if ($type=="$ex1" OR $type=="$ex2" OR $type=="$ex3" OR $type=="$ex4" OR $type=="$ex5" OR $type=="$ex6")
							{
								//on va chercher la date de la journée sous la forme annéemoisjourheureminuteseconde (ex : 200361015159)
								$tmp=getdate();
								$jour=$tmp['mday'];
								$mois=$tmp['mon'];
								$annee=$tmp['year'];
								$h=$tmp['hours'];
								$m=$tmp['minutes'];
								$s=$tmp['seconds'];
								$tout="$annee$mois$jour$h$m$s"; 
//on calcule le nombre de lettres avant le premier point
$res = strpos("$upfile_name",".");
//on extrait le nombre de lettre avant le point
								$type2=left($upfile_name,$res);
  //sauvegarde du fichier uploadé
									$savefile=$type2.".".$tout.".".$type;
									move_uploaded_file($upfile, $savefile);
									
$message="<img src=\"$savefile\" />";
$largeurDestination = 80;
$hauteurDestination = 80;
$im = ImageCreateTrueColor ($largeurDestination, $hauteurDestination) or die ("Erreur lors de la création de l'image");  
  $source = ImageCreateFromJpeg($savefile);
								    
  $largeurSource = imagesx($source);
 $hauteurSource = imagesy($source);
									
									ImageCopyResampled($im, $source, 0, 0, 0, 0, $largeurDestination, $hauteurDestination, $largeurSource, $hauteurSource);
    
$miniature = "mini_$savefile";
   ImageJpeg ($im, $miniature); 
								
	}
	else
	{
$message="Ce type de fichier n'est pas autorisé!";


							}
						}
					}
				}
				else
				{
					//erreur
					print_r($_FILES);
				}
			}

		
						
							if ($message!="")
								{
									echo "$message";
								}
							else 
								{
									echo "Erreur";
								}
												}
Voilà, merci!! :D
 
Discussions similaires
Haut