Problème d'upload de photo

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 : Problème d'upload de photo

par deborah » 04 avr. 2007, 15:07

Youyou ca marche merci merci merci \:D/ \:D/ \:D/ :agenouille: :agenouille:

par deborah » 04 avr. 2007, 14:14

merci je vais tester

par Ryle » 04 avr. 2007, 14:13

Il te suffit juste de mettre un flag $erreur à vrai en cas d'erreur (taille, extension, etc.) et de le tester avec un if() avant de déplacer le fichier ou d'inserer tes données en bases, pour savoir si tu as eu des erreurs ou pas ;)

par deborah » 04 avr. 2007, 13:45

Bonjour,

Je vous recontacte pour encore un petit problème sur mon uploader de photo

$id = $_POST['id'];
		$_FILES['photo']['name'];     //Le nom original du fichier, comme sur le disque du visiteur.
		$_FILES['photo']['type'];     //Le type du fichier. Par exemple, cela peut être "image/png".
		$_FILES['photo']['size'];     //La taille du fichier en octets.
		$_FILES['photo']['tmp_name']; //L'adresse vers le fichier uploadé dans le répertoire temporaire.
		$_FILES['photo']['error'];
		$maxsize =$_POST['MAX_FILE_SIZE'];
		$maxwidth = "600";
		$maxheight= "400";
		$nompage = $_POST['nom'];
	

		$tab_select = adminDAO :: select($id);
		$extensions_valides = array('jpg', 'jpeg', 'gif', 'png');
	
	//Vérification de l'extension de la photo
		$extensions_upload = substr(strrchr($_FILES['photo']['name'], '.'),1);
	
	//Récupération des dimension de la photo	
		$images_sizes = getimagesize($_FILES['photo']['tmp_name']);
	//Générateur d'un mot de passe pour pouvoir le mettre a la fin du nom de la 
	//photo afin d'éviter d'écraser les autres photos d'un même hotel
		$Cara = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXY0123456789"; // Caractére possible
		$Nbrcara = 5; // Nombre de caractére dans le mod de passe
		$Mdp="";
		srand((double)microtime()*1000000);
		for($i=0; $i<$Nbrcara;$i++){ 
		$Mdp.= $Cara[rand()%strlen($Cara)]; 
		} 
	
	
	//Vérification du transfert de la photo vers le tmp
			
	if($_FILES['photo']['error']>0)
	{		
		//Si il y a une erreur et si le nom de la page est norm
		if($nompage == "norm")
		{
			VueAdmin :: Erreur_transfert($id);
		}
		//Si il y a une erreur et si le nom de la page est supe
		else
		{
			VueSupeUser :: Erreur_transfert($id);
		}
	}
	//Vérification du poids de la photo
	else 
		if($_FILES['photo']['size']== 0)
		{
			if($nompage == "norm")
			{
				VueAdmin :: Erreur_poids($id);
			}
			else
			{
				VueSupeUser :: Erreur_poids($id);
			}
		}
		//Vérification de l'extension de la photo
		else 
			if (($images_sizes[0] > $maxwidth OR $images_sizes[1] > $maxheight) ||($images_sizes[0] ==NULL OR $images_sizes[1] ==NULL) )
				{
					if($nompage == "norm")
					{
						VueAdmin :: Erreur_taille($id);
					}
					else
					{
						VueSupeUser :: Erreur_taille($id);
					}
				}
				else
					if(in_array($extensions_upload,$extensions_valides))
					{
						//Récupération du nom de la photo avant l'extension
						$name = explode('.',$_FILES['photo']['name']);
						$nom_photo = $name[0];
					}
					else
					{
						if($nompage == "norm")
						{
							VueAdmin :: Erreur_extension($id);
						}
						else
						{
							VueSupeUser :: Erreur_extension($id);
						}
					}	
			
			$nom_photo = $name[0].$Mdp;
			$nom = "../HTML/images/photo".$tab_select['0']['Nom_Hotel'].$Mdp.$_FILES['photo']['name'];
			
		
		$resultat = move_uploaded_file($_FILES['photo']['tmp_name'],$nom);
		$tab_ajout = adminDAO::ajout_photo($id,$nom_photo, $extensions_upload);
		
		if($nompage == "norm")
		VueAdmin :: Ajouter();
		else
		VueSupeUser :: Ajouter();
		


En fait mon probleme se situe avant l'insertion dans la base de données
Je voudrais que lorsqu'il rencontre un des problèmes (poids, taille, extension etc...) il me renvoye une erreur sans qu'il passe par l'ajout dans la base

Merci d'avance
Débo

par Ryle » 02 avr. 2007, 14:40

la variable $_FILES['photo']['tmp_name'] contient uniquement le nom temporaire du fichier, mais ne connait pas le chemin du dossier temporaire ou celui-ci est stocké.
La fonction move_uploaded_file() connait ce dossier et va chercher le fichier directement dedans. Mais si tu veux t'y substituer, il te faut spécifier explicitement l'emplacement du fichier (tu peux retrouver le chemin du dossier temp dans les variables de $_SERVER)

Il est donc normal que getimagesize($_FILES['photo']['tmp_name']) ne te retourne rien ;)

par deborah » 02 avr. 2007, 14:07

Re bonjour,

Bon voilà mon upload un coup il marche un coup il marche pas, la moi plus rien comprendre :
$_FILES['photo']['name'];     //Le nom original du fichier, comme sur le disque du visiteur.
		$_FILES['photo']['type'];     //Le type du fichier. Par exemple, cela peut être "image/png".
		$_FILES['photo']['size'];     //La taille du fichier en octets.
		$_FILES['photo']['tmp_name']; //L'adresse vers le fichier uploadé dans le répertoire temporaire.
		$_FILES['photo']['error'];
		$maxsize =$_POST['MAX_FILE_SIZE'];
		$maxwidth = "600";
		$maxheight= "400";
		$nompage = $_POST['nom'];
	
	echo $maxsize."<br>"; 
	echo $_FILES['photo']['size'];
	
	
		$tab_select = adminDAO :: select($id);
	
		
		if ($_FILES['photo']['error']> 0) 
		{
			$erreur = "Erreur lors du tranfsert";
		}
		else if ($_FILES['photo']['size'] > $maxsize) 
		{
			$erreur = "Le fichier est trop gros";
		}
		$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
		$extension_upload = substr(strrchr($_FILES['photo']['name'],'.'),1);
		echo $extension_upload;	
		if ( in_array($extension_upload,$extensions_valides) ) 
		{
	
		$name = explode('.',$_FILES['photo']['name']);
		$nom_photo = $name[0];
		}
		else 
		{
			if($nompage =="norm" )
			{
				VueAdmin :: Erreur_extension($id);
			}
			else
			{
				VueSupeUser :: Erreur_extension($id);
			}
		}		
		$image_sizes = getimagesize($_FILES['photo']['tmp_name']);
		echo $image_sizes[0]."<br>";
		echo $image_sizes[1]."<br>";
		echo $maxwidth;
		echo $maxheight ;
		if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight)
			echo "prout";
	{
			if($nompage == "norm")
			{
				VueAdmin :: Erreur_taille($id);	
			}	
			else{
				VueSupeUser :: Erreur_taille($id);		
			}
		  
		}
		else
		{
			
		$Cara = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXY0123456789";  //Caractére possible
		$Nbrcara = 5; // Nombre de caractére dans le mod de passe
		$Mdp="";
		srand((double)microtime()*1000000);
		for($i=0; $i<$Nbrcara;$i++){ 
		$Mdp.= $Cara[rand()%strlen($Cara)]; 
		} 
		$nom_photo =$name[0].$Mdp;
		$nom = "../HTML/images/photo/".$tab_select['0']['Nom_Hotel'].'-'.$Mdp.''.$_FILES['photo']['name'];
		
		$resultat = move_uploaded_file($_FILES['photo']['tmp_name'],$nom);
		$tab_ajout = adminDAO::ajout_photo($id,$nom_photo, $extension_upload);
		
		if($nompage == "norm")
		VueAdmin :: Ajouter();
		else
		VueSupeUser :: Ajouter();
	}
	
	}
1- il ne récpère pas la taille de ma photo
2- il refuse de passer dans mes boucles pour la taille puisqu'il ne m'affiche rien au au niveau $image_sizes[0]

Merci de votre gentil coup de pouce :priere: :priere:

par Ryle » 30 mars 2007, 12:11

Ben c'est pour ça qu'elle est considéré comme incorrecte :) (quoi ca t'avance pas ? ;))

Aller, un peu de debuggage... testons dans l'ordre, affiche les valeurs de :
- $_FILES['icone']['name']
- strrchr($_FILES['icone']['name'], '.')
- substr(strrchr($_FILES['icone']['name'], '.'), 1)


Tu réaliseras tout de suite ce qui ne va pas, et en regardant la doc associée, tu verras normalement comment le rectifier ;)

par deborah » 30 mars 2007, 12:07

justement elle est vide

par Ryle » 30 mars 2007, 12:06

Quelle est la valeur de $extension_upload ?

N'aurais tu pas un soucis de majuscule par exemple qui ferait que la chaine n'est pas trouvée dans le tableau ?

Problème d'upload de photo

par deborah » 30 mars 2007, 12:01

Bonjour,

Voilà j'ai un petit problème sur la vérification de mon extension avant de l'uploader
		$_FILES['icone']['name'];     //Le nom original du fichier, comme sur le disque du visiteur.
		$_FILES['icone']['type'];     //Le type du fichier. Par exemple, cela peut être "image/png".
		$_FILES['icone']['size'];     //La taille du fichier en octets.
		$_FILES['icone']['tmp_name']; //L'adresse vers le fichier uploadé dans le répertoire temporaire.
		$_FILES['icone']['error'];
		$maxsize =$_POST['MAX_FILE_SIZE'];
		$maxwidth = '600';
		$maxheight= '400';
		
		
		if ($_FILES['icone']['error']> 0) $erreur = "Erreur lors du tranfsert";
		else echo "bon transfert<br>";
		if ($_FILES['icone']['size'] > $maxsize) $erreur = "Le fichier est trop gros";
		else echo "taille du fichier bonne<br>";
		$extensions_valides = array( 'jpg' , 'jpeg' , 'gif' , 'png' );
		$extension_upload = substr(strrchr($_FILES['icone']['name'],'.'),1);
		echo $extension_upload."<br>";
		if ( in_array($extension_upload,$extensions_valides) ) echo "Extension correcte";
		else echo "extension incorrecte<br>";
		
		$image_sizes = getimagesize($_FILES['icone']['tmp_name']);
		if ($image_sizes[0] > $maxwidth OR $image_sizes[1] > $maxheight) $erreur = "Image trop grande";

 		$nom = microtime();
		$nom = "mes_fichiers/".str_replace(' ','',$nom);
		$resultat = move_uploaded_file($_FILES['icone']['tmp_name'],$nom);
		if ($resultat) echo "Transfert réussi";
Voila il s'arrête à l'extension et me di mauvaise extension.
Si je pouvai avoir un coup de pouce ca vraiment gentil de votre part
Merci d'avance Débo