probleme d'upload

Mammouth du PHP | 536 Messages

19 juin 2006, 13:44

Voila, mon script permet d'uploader des pdf sur le serveur, il me parait tout a fait correct seulement voila, l'upload ne se fait pas.
Le problème doit venir de la vérification que le champ contenant le chemin d'accès du fichier soit bien rempli car j'ai le message "Vous n'avez pas choisi de fichier".

Voila mon code :
// Récupération du dossier dans lequel le fichier sera uploadé	//
$DESTINATION_FOLDER = "./cv/";      							//
// Taille maximale de fichier, valeur en bytes					//

$MAX_SIZE = 500000;											//
// Récupération de l'url de retour								
//$RETURN_LINK = $_SERVER['HTTP_REFERER'];						//

// Définition des extensions de fichier autorisées (avec le ".")//
$AUTH_EXT = array(".pdf");											//


// Fonction permettant de créer un lien de retour automatique

function createReturnLink(){
	//global $RETURN_LINK;
	echo "<p class=\"Texte2\"><a href=\"../index.php\">Retour à l'espace etudiant</a><br></p>";
}

// Fonction permettant de vérifier si l'extension du fichier est
// autorisée.

function isExtAuthorized($ext){
	global $AUTH_EXT;
	if(in_array($ext, $AUTH_EXT)){
		return true;
	}else{
		return false;
	}
}

// On vérifie que le champs contenant le chemin du fichier soit
// bien rempli.

if(!empty($_FILES["file"]["name"])){
	
	// Nom du fichier choisi:
	$nomFichier = $_FILES["file"]["name"] ;
	// Nom temporaire sur le serveur:
	$nomTemporaire = $_FILES["file"]["tmp_name"] ;
	// Type du fichier choisi:
	$typeFichier = $_FILES["file"]["type"] ;
	// Poids en octets du fichier choisit:
	$poidsFichier = $_FILES["file"]["size"] ;
	// Code de l'erreur si jamais il y en a une:
	$codeErreur = $_FILES["file"]["error"] ;
	// Extension du fichier
	$extension = strrchr($nomFichier, ".");
	
	// Si le poids du fichier est de 0 bytes, le fichier est
	// invalide (ou le chemin incorrect) => message d'erreur
	// sinon, le script continue.
	if($poidsFichier <> 0){
		// Si la taille du fichier est supérieure à la taille
		// maximum spécifiée => message d'erreur
		if($poidsFichier < $MAX_SIZE){
			// On teste ensuite si le fichier a une extension autorisée
			if(isExtAuthorized($extension)){
				// Ensuite, on copie le fichier uploadé ou bon nous semble.
				$uploadOk = move_uploaded_file($nomTemporaire, $DESTINATION_FOLDER.$nomFichier);
				if($uploadOk and $_POST['demande']=='stage'){
					$query = "INSERT INTO cv VALUES ('','$nomFichier','$_SESSION[nom]','$_SESSION[prenom]','1','')";
					$result = mysql_query($query);
					mysql_close($db);
					echo("<p class=\"Texte\">L'upload a réussi !<br><br></p>");
					echo(createReturnLink());
				}
				elseif($uploadOk and $_POST['demande']=='emploi'){
					$query = "INSERT INTO cv VALUES ('','$nomFichier','$_SESSION[nom]','$_SESSION[prenom]','','1')";
					$result = mysql_query($query);
					//mysql_query("INSERT INTO cv VALUES ('','','','','','1')");
					mysql_close($db);
					echo("<p class=\"Texte\">Le téléchargement a réussi !<br><br></p>");
					echo(createReturnLink());
				}				
				else{
					echo("<p class=\"Texte\">Le téléchargement a échoué !<br><br></p>");
					echo(createReturnLink());
				}
			}else{
				echo ("<p class=\"Texte\">Les fichiers avec l'extension $extension ne peuvent pas être téléchargés !<br></p>");
				echo (createReturnLink()."<br>");
			}
		}else{
			$tailleKo = $MAX_SIZE / 1000;
			echo("<p class=\"Texte\">Vous ne pouvez pas télécharger des fichiers dont la taille est supérieure à : $tailleKo Ko.<br></p>");
			echo (createReturnLink()."<br>");
		}		
	}else{
		echo("<p class=\"Texte\">Le fichier choisi est invalide !<br></p>");
		echo (createReturnLink()."<br>");
	}
}else{
	echo("<p class=\"Texte\">Vous n'avez pas choisi de fichier !<br></p>");
	echo (createReturnLink()."<br>");
}
je ne vois pas du tout où est l'erreur
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juin 2006, 13:47

Le problème doit venir de la vérification que le champ contenant le chemin d'accès du fichier soit bien rempli car j'ai le message "Vous n'avez pas choisi de fichier".
C'est bien, tu as situé le problème

Donc si tu as un test qui semble ne pas se comporter comme tu le souhaites, commence déjà par vérifier ce qu'il teste...

Mammouth du PHP | 1353 Messages

19 juin 2006, 13:49

if($poidsFichier <> 0){ 
C'est quoi cette ligne ?

Si tu veux dire si le poid est différent de 0 c est plutot :
if($poidsFichier != 0){
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juin 2006, 13:54

Non les deux existent : http://fr.php.net/manual/fr/language.op ... arison.php

Vu le message retourné il y a déjà un problème au premier if

Mammouth du PHP | 1353 Messages

19 juin 2006, 13:57

Autant pour moi,

déjà j'ignorais l existence de <> en plus je me suis trompé en remontant les accolades :(

Désolé.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Mammouth du PHP | 536 Messages

19 juin 2006, 13:57

oui le problème vient bien du premier if, seulement voila, je ne sais pas pourquoi il considére qu'il y a rien puisqu'un chemin d'accès est bien spécifié
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 134 Messages

19 juin 2006, 14:04

vu que ton if teste sir le champ est vide, il faut verifier au niveau de ton formulaire HTML si les variables sont bonnes

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juin 2006, 14:04

C'est bien, tu as situé le problème

Donc si tu as un test qui semble ne pas se comporter comme tu le souhaites, commence déjà par vérifier ce qu'il teste...
Si tu as ce message, c'est que ta variable est considérée comme vide, et s'il le dit c'est que c'est sûrement vrai
je ne sais pas pourquoi il considére qu'il y a rien puisqu'un chemin d'accès est bien spécifié
Moi non plus je ne le sais pas, et tu pourras relire ton script tant que tu veux, c'est pas comme ça que tu trouveras
Enfin je ne vois pas de quel "chemin d'accès" tu parles, puisque dans le test il n'y a que la variable issue de $FILES...

Alors suis les conseils, vérifie ce que teste la fonction empty() de ton if :
echo $_FILES["file"]["name"];
Tu verras déjà si elle est bien vide, et ainsi de suite des echos de contrôle, pour voir ce qui se passe
C'est long et bête mais c'est comme ça que tu résoudras le problème...

Mammouth du PHP | 536 Messages

19 juin 2006, 14:09

au niveau de mon formulaire, voila comment je fais choisir le fichier :

Code : Tout sélectionner

<input type="file" name="file" size="50"><br></p> <center><input name="submit" type="submit" value="Enregistrer"><input name="reset" type="reset" value="Effacer">
faut-il récupérer cette valeur avec un $_POST ?
car il considère bien ce champ comme vide quand je fais un echo

pourtant ce que je ne comprends pas, c'est que j'ai déjà utiliser ce script d'upload mais seul et ca marchait, là je l'ai fait précédé d'insertions dans des bases et ca ne marche plus.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juin 2006, 14:14

Non c'est bien avec $_FILES

Et s'il s'arrête à ce test, c'est que la variable est vide
Je ne pense pas que tes requêtes suivantes influent

Donc affiche le tableau $_FILES, regarde ce qu'il contient, débug... tu finiras par trouver

Mammouth du PHP | 536 Messages

19 juin 2006, 14:19

j'ai fais un
echo $_FILES['file']['name'];
et rien ne s'affiche
je ne comprends pas pourquoi quand je l'utilisais précédement sans rien avant cela marchait.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juin 2006, 14:23

je ne comprends pas pourquoi quand je l'utilisais précédement sans rien avant cela marchait.
Oui bon ben nous on a compris que tu comprenais pas :roll:

ça sert à rien de répéter ça sans arrêt, maintenant faut faire en sorte de trouver pourquoi

Donc tu ne récupères pas ton tableau $_FILES, vérifie ton formulaire déjà
Si tu as des champs textes associés, est-ce que tu récupères les variables $_POST ?

Mammouth du PHP | 536 Messages

19 juin 2006, 14:25

oui les variables sont bien récupérées car elles sont insérées dans la base.
Modifié en dernier par béka le 19 juin 2006, 14:28, modifié 1 fois.
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

19 juin 2006, 14:28

Alors vérifie le formulaire, regarde dans le tuto si ça correspond bien : http://www.phpfrance.com/forums/voir_sujet-545.php

met des echos, cherche quoi...

Si tu as déjà utilisé ce script et que ça fonctionnait alors cela vient peut-être de ton formulaire qui est mal fait

Mammouth du PHP | 536 Messages

19 juin 2006, 14:31

si je n'avais pas cheché, je n'aurais pas envoyé ce post
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!