Uploader un fichier depuis un formulaire

Résolu/Fermé
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009 - 15 janv. 2009 à 16:54
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 15 janv. 2009 à 19:12
Bonjour,

Je veux créer un formulaire où le visiteur du site pourra joindre un fichier qui sera envoyé sur un dossier du serveur de mon site.
Pour l'instant, je fais un essai sur mon propre PC où j'ai installé WAMP Server.
J'essaye donc d'envoyer le fichier après vérification dans le dossier "images/" qui se situe au même niveau que mon fichier php.

Voici le code de mon formulaire :

<form action="cible_essai.php" method="post" enctype="multipart/form-data">
<p>
Voici le formulaire d'envoi de fichier :<br/>
<input type="file" name="monfichier" /><br/>
<input type="submit" value="Joindre" />
</p>
</form>


Voici le code de mon fichier "cible_essai.php" :

<?php
if(isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0)
{
	if ($_FILES['monfichier']['size'] <= 1000000)
	{
		$infosfichier = pathinfo($_FILES['monfichier']['name']);
		$extension_upload = $infosfichier['extension'];
		$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
		if (in_array($extensions_upload, $extensions_autorisees))
			{
			move_uploaded_file($_FILES['monfichier']['tmp_name'], 'images/' .basename($_FILES['monfichier']['name']));
			echo "L'envoi a bien été effectué !";
			}
	}
}
?>


Le problème est que lorsque je joins un fichier, le navigateur lance le fichier "cible_essai.php" mais rien ne se passe.
Merci donc de me dire où je me trompe.
A voir également:

13 réponses

Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 janv. 2009 à 18:14
c'est en effet le résultat que j'ai en ce moment, problème avec tes vérifications d'extensions^^
1
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 566
15 janv. 2009 à 16:56
echo $_FILES['monfichier']['error'];

dans ton 2eme fichier
0
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009
15 janv. 2009 à 16:59
Excuse-moi, mais je ne comprends pas ta réponse.
Peux-tu plus préciser ?
Merci d'avance.
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 janv. 2009 à 17:02
il te demande de mettre cette ligne dans la page de traitement du formulaire pour voir l'erreur que ça retourne^^ et comprendre ainsi d'où peut provenir le bug
0
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009
15 janv. 2009 à 17:14
Je viens de faire l'essai en rajouter dans le fichier "cible_essai.php" :
echo $_FILES['monfichier']['error'];

Le navigateur indique maintenant la valeur 0.
Ce qui signifie que le fichier a bien été envoyé.
Le problème est que le fichier joint ne se trouve pas dans le dossier "images/" et que
la page n'affiche pas "L'envoi a bien été effectué".

Il doit y avoir une erreur dans le code plus bas ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 janv. 2009 à 17:21
retire la propriété basename là:

move_uploaded_file($_FILES['monfichier']['tmp_name'], 'images/' .basename($_FILES['monfichier']['name']));
0
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009
15 janv. 2009 à 17:26
Je viens d'essayer :
Si j'enlève : .basename : le navigateur affiche :
Parse error: syntax error, unexpected '(' in C:\Program Files\wamp\www\tests\cible_essai.php on line 13

Si je n'enlève que basename : le navigateur affiche : 0 comme précédemment.

Celà ne doit pas venir de là.
Il y a peut-être des droits à ouvrir pour que PHP puisse mettre le fichier dans le dossier "images/" ?
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 janv. 2009 à 17:30
le chmod doit se faire après l'upload pour les fichiers, mais il vaut mieux vérifier les droits de ton dossier^^

<?php
if(isset($_FILES['monfichier']['tmp']) AND $_FILES['monfichier']['error'] == 0)
{
//if ($_FILES['monfichier']['size'] <= 1000000) {

//$infosfichier = pathinfo($_FILES['monfichier']['name']);
//$extension_upload = $infosfichier['extension'];
//$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
//if (in_array($extensions_upload, $extensions_autorisees))
//{
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'images/' .basename($_FILES['monfichier']['name']));
echo "L'envoi a bien été effectué !";
//}
//}
}
?>

voit avec ça, ça nous permettra de définir si ta commande move est correcte^^
0
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009
15 janv. 2009 à 17:37
Excuse-moi, mais cela n'affiche absolument rien sur mon navigateur.
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 janv. 2009 à 17:41
t'excuse pas^^
je vais faire des tests en local
0
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009
15 janv. 2009 à 17:46
Je viens un test en rajoutant des "else" pour chaque conditions dans mon code.
Je trouve donc une erreur dès le départ à la ligne :
if(isset($_FILES['monfichier']['tmp']) AND $_FILES['monfichier']['error'] == 0)


Vu que j'arrive à avoir une valeur 0 lorsque je fais un echo de $_FILES['monfichier']['error'], l'erreur ne peut
venir que de $_FILES['monfichier']['tmp']

Il y peut-être un manip à faire quand on veut le faire en local ?
0
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009
15 janv. 2009 à 18:00
Je viens de faire un autre essai mais en mettant les fichiers en ligne.
L'erreur vient maintenant de l'extension.
Le fichier arrive donc à passer les 2 premières conditions mais pas la 3ème.

Il y a donc une manip à faire en local si l'on veut travailler sur son pc.

Par contre, si je vuex mettre mon fichier en ligne, j'ai toujours le problème de l'extension.
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 janv. 2009 à 18:24
if(isset($_FILES['monfichier']) AND $_FILES['monfichier']['error'] == 0 )
{
if ( $_FILES['monfichier']['size'] <= 1000000 ) {
$infosfichier = pathinfo($_FILES['monfichier']['name']);
$ext = $infosfichier['extension'];
$extAuth = array('jpg', 'jpeg', 'gif', 'png');
if ( in_array($ext, $extAuth) ) {
move_uploaded_file($_FILES['monfichier']['tmp_name'], 'images/' .basename($_FILES['monfichier']['name']));
echo "L'envoi a bien été effectué !";
}
}
}


ça fonctionne. C'était un problème de nom de variables, le s de la variable qui stocke l'extension du fichier, dans le if, est en trop. Je te recommande de les raccourcir pour ne pas te planter^^
0
jourdanne85 Messages postés 27 Date d'inscription dimanche 14 décembre 2008 Statut Membre Dernière intervention 20 octobre 2009
15 janv. 2009 à 19:10
Je viens de faire la rectif et tu avais raison.
Je te remercie, c'était en faut une erreur stupide de ma part et je t'ais fait perdre un peu de temps.
Tu as raison mes variables sont trop longues, il faut que je les racourcice.
Alors MERCI ENCORE !
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 janv. 2009 à 19:12
pas de soucis :D ça arrive plein de fois^^ bonne résolution pour le raccourcis ;) oublis pas de bien les rendre lisible aussi^^ le s étant la lettre qu'on remarque le moins dans ce genre de cas ;)
0