[PHP] Enregistrement d'un champ type 'file'

Fermé
juliekomi Messages postés 6 Date d'inscription samedi 2 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010 - 2 janv. 2010 à 16:28
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 3 janv. 2010 à 21:09
Bonjour,

Voici mon code avec commentaires :

fichier d'interface (formulaire où je charge mon fichier type 'file')

<?php // accès direct interdit
  defined('RACINE') or die('accès direct interdit');
?>


<form action="traitements/inserer.php" method="post" enctype='multipart/form-data'>

	<table>

		<tr>
			<th>Description</th>
				<td><input type='text' name='description'/></td>
		</tr>

		<tr>
			<th>Photo 1</th>
				<td><input type='file' name='photo'/></td>
		</tr>

		<!--<tr>
			<td>Photo 2</td>
				<td><input type='file' name='photo2'/></td>
		</tr>-->

	</table>

		<tr>
			<td>Pour enregister :</td>
			<td><INPUT type="submit" value="Click click !"></td>
		</tr>

</form>


fichier de traitement (où je reçois les données du formulaire)

<?php

//on definit la constante 'RACINE' :
define('RACINE', '../../../');

require(RACINE.'modules/admin/parametres/autorisation_admin.php');
//require(RACINE.'modules/admin/parametres/fonctions.php');

// on récupère les variables crée dans le formulaire
	if (isset($_FILES["photo"])) $photo=$_FILES["photo"]; else $photo='';
	//if (isset($_FILES["photo2"])) $photo2=$_FILES["photo2"]; else $photo2='';
	if (isset($_POST ["description"])) $description=$_POST["description"]; else $description='';
	
	//on enregistre la photo sur le serveur si elle existe:
	if(isset($photo) && is_uploaded_file($photo['tmp_name']))
		{
			//on crée le nom du fichier
			$photo_name=$photo['name'];

			//on écrit le fichier sur le serveur
			$origine=$photo['tmp_name'];
			$destination=dirname($_SERVER['SCRIPT_FILENAME']).'/../images/'.$photo_name;
			move_uploaded_file($origine,$destination);
		}
	else 
		{
			$photo_name='visiteur.jpg';
		}
		

//on se connecte à la base de données en appelant la connexion:
require(RACINE.'parametres/connexion.php');

//on indique la requête SQL désirée:
$sql="INSERT INTO colliers(photo,description) VALUES ('$photo_name','$description')";

// ça donne un resultat :
mysql_query($sql);

//fermeture de la connexion
mysql_close($liendb);

//on retourne versla page afficher:
header("Location:".RACINE."composants/colliers/afficher.php");
echo $sql;
?>



Le problème : on dirait que mon fichier de traitement ne récupère pas la donnée type 'file' et donc on ne rentre pas dans le 'if' qui permet d'enregistrer le fichier.
--

Pouvez vous me dire d'où cela provient?
Merci de votre aide, espérant avoir été claire et pas trop vague. Je suis very novice!
A voir également:

11 réponses

scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
2 janv. 2010 à 18:34
Faut pas travailler sur le $_FILES["photo"] mais sur le $_FILES["photo"]["name"] il me semble ;)

0
TaKtOuK541 Messages postés 97 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 26 octobre 2010
2 janv. 2010 à 21:35
oui ce se que je pense si non tu crée un variable $photo=$_FILES["photo"]["name"] et ensuite tu peut just utiliser $photo["name"] ou $photo["tmp_name"], $photo["size"]..
0
juliekomi Messages postés 6 Date d'inscription samedi 2 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010
3 janv. 2010 à 09:33
j'ai essayé de mettre $_FILES['photo']['name'] à la place de $_FILES['photo'] mais ça ne marche pas non plus. je ne comprends pas pourquoi le traitement arrive à récupérer le $_POST['description'] et pas le $_FILES['photo'] !

:-(
0
juliekomi Messages postés 6 Date d'inscription samedi 2 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010
3 janv. 2010 à 12:53
Merci scriptiz.

Je suis le tutoriel, comment puis je : "Première chose à faire, vérifier que l'opération s'est bien passée en vérifiant la présence du fichier dans le dossier temporaire; pour cela, nous avons à notre disposition la fonction is_uploaded_file(). " ? Je ne sais pas comment utiliser la fonction pr vérifier?
0

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

Posez votre question
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
3 janv. 2010 à 14:12
Lis le tuto en entier il y a un exemple de code où il montre comment utiliser le is_uploaded_file() plus bas.

En gros lit tout 2-3 fois avant de poser des questions ^^

0
TaKtOuK541 Messages postés 97 Date d'inscription dimanche 18 octobre 2009 Statut Membre Dernière intervention 26 octobre 2010
3 janv. 2010 à 16:22
vérifiant la présence du fichier dans le dossier temporaire

tu faire echo $_FILE['photo']['tmp_name']
si le nom s'affiche (.tmp) c'est a dire que le chargement a été bel et bien effectué, si non..
0
juliekomi Messages postés 6 Date d'inscription samedi 2 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010
3 janv. 2010 à 17:01
J'ai vérifié, l'upload ne se fait pas. Je ne comprends vraiment pas pourquoi alors que le $_POST passe sans souci!
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
3 janv. 2010 à 17:29
qqs commentaires et rectifssur une partie de ton code:

// on récupère les variables crée dans le formulaire
	if (isset($_FILES["photo"])) $photo=$_FILES["photo"]; else $photo='';
	//if (isset($_FILES["photo2"])) $photo2=$_FILES["photo2"]; else $photo2='';
	if (isset($_POST ["description"])) $description=$_POST["description"]; else $description='';
	
	//on enregistre la photo sur le serveur si elle existe:
	///////if(isset($photo) && is_uploaded_file($photo['tmp_name']))
	//la tu testes si la variable $photo existe hors elle existe dans tous les cas puisque 3 lignes plus haut tu lui donnes une valeur par defaut même si $_FILES n'existe pas
		//donc mets plutot:
		if($photo!='' && is_uploaded_file($photo['tmp_name']))
		{
			//on crée le nom du fichier
			$photo_name=$photo['name'];

			//on écrit le fichier sur le serveur
			$origine=$photo['tmp_name'];
			$destination=dirname($_SERVER['SCRIPT_FILENAME']).'/../images/'.$photo_name;
			////// move_uploaded_file($origine,$destination); //la d'ou vient $destination ?
			move_uploaded_file($origine,$photo_name);
			
		}
	else 
		{
			$photo_name='visiteur.jpg'; //la je ne vois pas ce que tu en fait après
		}
0
juliekomi Messages postés 6 Date d'inscription samedi 2 janvier 2010 Statut Membre Dernière intervention 3 janvier 2010
3 janv. 2010 à 18:56
alain_42, merci de prendre le temps de me lire !

donc le $destination est défini ici :
$destination=dirname($_SERVER['SCRIPT_FILENAME']).'/../images/'.$photo_name;


et après je dis que si le $photo existe pas et qu'il est pas uploadé dans le 'tmp_name' alors je l'appelle visiteur.jpg.

je sais pas si c'est très clair, je ne fais que recopier ce qu'on m'apprend en cours.
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
3 janv. 2010 à 21:09
houps excuses j'avais pas vu $destination deux lignes au dessus

mais la variable $phot_name chargée par défaut plus bas ne sera pas prises en compte dans $destination
0
scriptiz Messages postés 1424 Date d'inscription dimanche 21 décembre 2008 Statut Membre Dernière intervention 14 septembre 2023 425
3 janv. 2010 à 09:42
Je t'invite à suivre ce tutoriel :
http://phpcodeur.net/articles/php/upload

Ainsi tu auras tous les détails pour réussir ton upload.

-1