[RESOLU] Coup de main pour ma fonction upload

Eléphanteau du PHP | 19 Messages

15 mai 2013, 10:49

Je suis actuellement sur un projet, et j'ai besoin pour celui ci d'une page upload, avec plusieurs champ d'upload celle-ci fonctionne parfaitement seul petit bémol dans l'état actuel je suis obligé de remplir tous les champs d'upload si je veux que ma fonction fonctionne .
Je ne suis pas un expert en php et j'apprend un peu sur le tas mais là il y a se petit détail qui m’embête et j'ai pas trop le temps de me pencher dessus si vous pouvez me mettre sur la voie ça serai sympa.
Voici un morceau de ma fonction, je crois que le problème vient de la le double && doit être un et strict se qui m’empêche de laisser un champs vide mais je suis pas sûre et je sais pas par quoi le remplacer
Code :Sélectionner tout - Visualiser dans une fenêtre à part
if (upload('cv', $prenomauditeur, $nomauditeur) && upload('carte', $prenomauditeur, $nomauditeur) && upload('cartevitale', $prenomauditeur, $nomauditeur) && upload('rib', $prenomauditeur, $nomauditeur) && upload('bac', $prenomauditeur, $nomauditeur) && upload('lettre', $prenomauditeur, $nomauditeur) && upload('contrat', $prenomauditeur, $nomauditeur))
Merci

Mammouth du PHP | 1966 Messages

15 mai 2013, 11:12

Ce bout de code ne nous aide pas beaucoup sans savoir ce qu'il y a dans la fonction upload et ce qu'il y a après le if

Si je suppose que la fonction upload fait tout ce qu'il faut pour uploader ton fichier et renvoi true si tout est bon et false sinon tu devrais pouvoir différencier un false du à un champs d'upload vide à celui d'une erreur (extension erronée, taille trop grande ...)et ainsi tu pourra considérer les false du à un champs vide comme des TRUE
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 19 Messages

15 mai 2013, 11:17

Je met le code complet si ça aide a voir se que je veux faire en gros j'ai des élèves que je dois ajouter dans une bdd nom prénom photocopie du cv carte vitale... quand j'insère un élève un répertoire est créé au nom de l'élève ou son stocké toutes les photocopie et les données sont rentrés dans la bdd avec le chemin d’accès de chaque image je sais pas si c'est clair j'arrive a tous faire mais quand je laisse un champ d'upload vide l'insertion dans la bdd ne fonctionne pas


<?php 
	function upload($fichier, $prenomauditeur, $nomauditeur)
{

	$nom = "auditeur/".$nomauditeur."_".$prenomauditeur."/";

	// vérifie si le répertoire existe pas :
		if (!is_dir($nom)) 
		{
			mkdir($nom);
		}

	$fcv = basename($_FILES[$fichier]['name']);
	$taille_maxi = 100000;
	$taille = filesize($_FILES[$fichier]['tmp_name']);
	$extensions = array('.png', '.gif', '.jpg', '.jpeg');
	$extension = strrchr($_FILES[$fichier]['name'], '.'); 
	//Début des vérifications de sécurité...
	
		if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
		{
			$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
		}
		
		if($taille>$taille_maxi)
		{
			$erreur = 'Le fichier est trop gros...';
		}
		
		if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
		{
			//On formate le nom du fichier ici...
			$fcv = strtr($fcv, 
			  'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
			  'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
			$cv = preg_replace('/([^.a-z0-9]+)/i', '-', $fcv);
			if(move_uploaded_file($_FILES[$fichier]['tmp_name'], $nom . $fcv)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
				{
					return true;
				}
			else
				{
					return false;
				}

		}
}

//récupération des valeurs des champs:
//nom:
	$nomauditeur     = $_POST["nomauditeur"] ;
//prenom:
	$prenomauditeur = $_POST["prenomauditeur"] ;
//code:
	$codeauditeur = $_POST["codeauditeur"] ;

if (upload('cv', $prenomauditeur, $nomauditeur) && upload('carte', $prenomauditeur, $nomauditeur) && upload('cartevitale', $prenomauditeur, $nomauditeur) && upload('rib', $prenomauditeur, $nomauditeur) && upload('bac', $prenomauditeur, $nomauditeur) && upload('lettre', $prenomauditeur, $nomauditeur) && upload('contrat', $prenomauditeur, $nomauditeur)) 
	{
		//connection au serveur
			$cnx = mysql_connect( "localhost", "root", "" ) ;
 
		//sélection de la base de données:
			$db  = mysql_select_db( "dematerialisation" ) ;
 
		//récupération des valeurs des champs:
		
		
		// Fichier auditeur
		$fcv = basename($_FILES['cv']['name']);
		$cv = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcv; 
		
		$fcarte = basename($_FILES['carte']['name']);
		$carte = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcarte; 
		
		$fcartevit = basename($_FILES['cartevitale']['name']);
		$cartevitale = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcartevit;
		
		$frib = basename($_FILES['rib']['name']);
		$rib = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$frib;
		
		$fresultat = basename($_FILES['bac']['name']);
		$bac = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fresultat;
		
		$flettre = basename($_FILES['lettre']['name']);
		$lettre = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$flettre;
		
		$fcontrat = basename($_FILES['contrat']['name']);
		$contrat = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcontrat;
		
		$chemin = "auditeur/".$nomauditeur."_".$prenomauditeur."/";
		// on encapsule le répertoire et le nom du fichier pour avoir le chemin complet
			

 
		//création de la requête SQL:
			$sql = "INSERT  INTO auditeur (nomauditeur, prenomauditeur, codeauditeur, cv, carteidentite, cartevital, rib, resultatbac, lettremotivation, contratpro, chemin)  
					VALUES ( '$nomauditeur', '$prenomauditeur', '$codeauditeur', '$cv', '$carte', '$cartevitale', '$rib', '$bac', '$lettre', '$contrat', '$chemin') " ; // On oublie pas de l'inserer
 
		//exécution de la requête SQL:
			$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
 
		//affichage des résultats, pour savoir si l'insertion a marchée:
			if($requete)
				{
					echo("Insertion éffectué") ;
				}	
			else
				{
					echo("L'insertion à échouée</br>") ;
				}
		//fin insertion auditeur et début création d'un répertoire 
		
	}
		
?>

Mammouth du PHP | 1966 Messages

15 mai 2013, 11:28

en début de fonction upload, je mettrais un test pour voir si le champs est vide. Si c'est le cas ta fonction retourne TRUE et by-pass le reste des vérification.

Comme elle retourne TRUE, ton if le recevra comme si l'upload était validé et donc ta requète sera éxecuté.

A vérifier, mais un simple
if (empty($FILES[$fichier])) return true
devrait suffire en début de fonction
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Mammouth du PHP | 619 Messages

15 mai 2013, 11:35

Bonjour,

pourquoi pas séparer les champs pour les check 1 par 1 ?

Eléphanteau du PHP | 19 Messages

15 mai 2013, 11:41

Merci pour ta réponse

De mon côté j'ai essayer de remplacer les && par des xor d'une certaine manière ça a marché dans la bdd il n'y a pas l'insertion des chemins des images mais a la place le chemin du répertoire de l'élève.
Puis j'ai essayer ta solution et ça donne exactement le même résultat qu'avec ma solution des xor

Mammouth du PHP | 619 Messages

15 mai 2013, 12:12

Re,

j'ai regarder vite fais le code mais je vois pas ou tu verifie si le champ et vide ou non ?

exemple
if (isset($_FILES['cv']['name']) and !empty($_FILES['cv']['name'])){

}

Mammouth du PHP | 1966 Messages

15 mai 2013, 13:26

c'est normal quand tu vois ton code dans le if,

pour chaque champ d'upload tu recupère le nom de fichier et tu concatène le repertoire avec le nom de fichier.
pour un champ vide le nom du fichier est vide et donc il ne reste que le répertoire.

si tu teste de nouveau si ton champs est vide avant la préparation de l'entrée en base, tu pourras avoir une entrée vide si il n'y a pas de fichier

Mais je plussoie l'idée de diviser chaque traitement, ce serait plus lisible

Pour chaque champs, tu vérifie si il est rempli, puis si il est correcte et enfin tu prépare ta requète.
après tous les traitements, si aucune erreur n'est présente tu envoie ta requète.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 19 Messages

15 mai 2013, 14:23

oui je comprend le problème maintenant faut que j'arrive a le faire merci de votre aide

Mammouth du PHP | 619 Messages

15 mai 2013, 14:24

pas de probleme essaie si cela marche pas ou que tu as du mal poste l'erreur et le code on pourra continue de d'aider :)

Eléphanteau du PHP | 19 Messages

15 mai 2013, 16:28

Je m'approche du but j'ai quelques erreur mais il fait bien l'insertion dans la base de donnée en laissant vide les champs non rempli par contre la création de répertoire ne fonctionne plus je vais continuer mes expériences :D

Eléphanteau du PHP | 19 Messages

16 mai 2013, 09:22

Je fais bien l'insertion dans la bdd et il laisser bien bien les champs vide ou je n'ai pas mis d'image par contre le répertoire n'est plus créer et il aime pas ma ligne 149 alors que je l'ai pas touché
<?php 
	function upload($fichier, $prenomauditeur, $nomauditeur)
{

	

	$nom = "auditeur/".$nomauditeur."_".$prenomauditeur."/";
	
	if (empty($FILES[$fichier])) 
		{
		return true;
		}
	
	
	
	// vérifie si le répertoire existe pas :
		if (!is_dir($nom)) 
		{
			mkdir($nom);
		}
		
	

	$fcv = basename($_FILES[$fichier]['name']);
	$taille_maxi = 100000;
	$taille = filesize($_FILES[$fichier]['tmp_name']);
	$extensions = array('.png', '.gif', '.jpg', '.jpeg');
	$extension = strrchr($_FILES[$fichier]['name'], '.'); 
	//Début des vérifications de sécurité...
	
		if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau
		{
			$erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...';
		}
		
		if($taille>$taille_maxi)
		{
			$erreur = 'Le fichier est trop gros...';
		}
		
		if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload
		{
			//On formate le nom du fichier ici...
			$fcv = strtr($fcv, 
			  'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
			  'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
			$cv = preg_replace('/([^.a-z0-9]+)/i', '-', $fcv);
			if(move_uploaded_file($_FILES[$fichier]['tmp_name'], $nom . $fcv)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné...
				{
					return true;
				}
			else
				{
					return false;
				}

		}
}



//récupération des valeurs des champs:
//nom:
	$nomauditeur     = $_POST["nomauditeur"] ;
//prenom:
	$prenomauditeur = $_POST["prenomauditeur"] ;
//code:
	$codeauditeur = $_POST["codeauditeur"] ;

if (upload('cv', $prenomauditeur, $nomauditeur) && upload('carte', $prenomauditeur, $nomauditeur) && upload('cartevitale', $prenomauditeur, $nomauditeur) && upload('rib', $prenomauditeur, $nomauditeur) && upload('bac', $prenomauditeur, $nomauditeur) && upload('lettre', $prenomauditeur, $nomauditeur) && upload('contrat', $prenomauditeur, $nomauditeur)) 
	{
		//connection au serveur
			$cnx = mysql_connect( "localhost", "root", "" ) ;
 
		//sélection de la base de données:
			$db  = mysql_select_db( "dematerialisation" ) ;
 
		//récupération des valeurs des champs:
		
		
		// Fichier auditeur
		
	if (isset($_FILES['cv']['name']) and !empty($_FILES['cv']['name']))
		{
		$fcv = basename($_FILES['cv']['name']);
		$cv = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcv; 
		}	
		
	if (isset($_FILES['carte']['name']) and !empty($_FILES['carte']['name']))
		{
		$fcarte = basename($_FILES['carte']['name']);
		$carte = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcarte; 
		}
		
		if (isset($_FILES['cartevitale']['name']) and !empty($_FILES['cartevitale']['name']))
			{
			$fcartevit = basename($_FILES['cartevitale']['name']);
			$cartevitale = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcartevit;
			}
		
		if (isset($_FILES['rib']['name']) and !empty($_FILES['rib']['name']))
			{
			$frib = basename($_FILES['rib']['name']);
			$rib = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$frib;
			}
		
		if (isset($_FILES['bac']['name']) and !empty($_FILES['bac']['name']))
			{
			$fresultat = basename($_FILES['bac']['name']);
			$bac = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fresultat;
			}
		
		if (isset($_FILES['lettre']['name']) and !empty($_FILES['lettre']['name']))
			{
			$flettre = basename($_FILES['lettre']['name']);
			$lettre = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$flettre;
			}
		
		if (isset($_FILES['contrat']['name']) and !empty($_FILES['contrat']['name']))
			{
			$fcontrat = basename($_FILES['contrat']['name']);
			$contrat = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcontrat;
			}
			
			$chemin = "auditeur/".$nomauditeur."_".$prenomauditeur."/";
		// on encapsule le répertoire et le nom du fichier pour avoir le chemin complet
			

 
		//création de la requête SQL:
			$sql = "INSERT  INTO auditeur (nomauditeur, prenomauditeur, codeauditeur, cv, carteidentite, cartevital, rib, resultatbac, lettremotivation, contratpro, chemin)  
					VALUES ( '$nomauditeur', '$prenomauditeur', '$codeauditeur', '$cv', '$carte', '$cartevitale', '$rib', '$bac', '$lettre', '$contrat', '$chemin') " ; // On oublie pas de l'inserer
 
		//exécution de la requête SQL:
			$requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
 
		//affichage des résultats, pour savoir si l'insertion a marchée:
			if($requete)
				{
					echo("Insertion éffectué") ;
				}	
			else
				{
					echo("L'insertion à échouée</br>") ;
				}
		//fin insertion auditeur et début création d'un répertoire 
		
	}
		
?>

Mammouth du PHP | 1966 Messages

16 mai 2013, 11:20

c'est laquelle la 149 ?
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 19 Messages

16 mai 2013, 11:23

c'est la requête sql et je suis sûre qu'elle est bonne elle fonctionnait très bien avant

Mammouth du PHP | 619 Messages

16 mai 2013, 11:34

Bonjour,

vous ne declarer pas vos variables

if (isset($_FILES['cv']['name']) and !empty($_FILES['cv']['name']))
{
$fcv = basename($_FILES['cv']['name']);
$cv = "auditeur/".$nomauditeur."_".$prenomauditeur."/".$fcv;
}

else{
$fcv='';
$cv='';
}

je pense que cela vient de la car la variable n’existe pas