Téléchargement
illégal
Posez votre question Signaler

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

juliekomi 6Messages postés 2 janvier 2010Date d'inscription - Dernière réponse le 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!
Lire la suite 

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

11 réponses
Réponse
+0
moins plus
Faut pas travailler sur le $_FILES["photo"] mais sur le $_FILES["photo"]["name"] il me semble ;)

Ajouter un commentaire
Réponse
+0
moins plus
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"]..
Ajouter un commentaire
Réponse
+0
moins plus
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'] !

:-(
Ajouter un commentaire
Réponse
+0
moins plus
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?
Ajouter un commentaire
Réponse
+0
moins plus
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 ^^

Ajouter un commentaire
Réponse
+0
moins plus
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..
Ajouter un commentaire
Réponse
+0
moins plus
J'ai vérifié, l'upload ne se fait pas. Je ne comprends vraiment pas pourquoi alors que le $_POST passe sans souci!
Ajouter un commentaire
Réponse
+0
moins plus
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
		}
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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
Ajouter un commentaire
Réponse
-1
moins plus
Je t'invite à suivre ce tutoriel :
http://phpcodeur.net/articles/php/upload

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

Ajouter un commentaire
Ce document intitulé « [PHP] Enregistrement d'un champ type 'file' » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?