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

juliekomi Messages postés 6 Statut Membre -  
Alain_42 Messages postés 5413 Statut Membre -
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!

--
Je galère !
Configuration: Windows Vista, Google Chrome + Firefox
Wamp pour le PHP

11 réponses

  1. scriptiz Messages postés 1494 Statut Membre 425
     
    Faut pas travailler sur le $_FILES["photo"] mais sur le $_FILES["photo"]["name"] il me semble ;)

    0
  2. TaKtOuK541 Messages postés 119 Statut Membre
     
    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
  3. juliekomi Messages postés 6 Statut Membre
     
    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
  4. juliekomi Messages postés 6 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. scriptiz Messages postés 1494 Statut Membre 425
     
    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
  7. TaKtOuK541 Messages postés 119 Statut Membre
     
    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
  8. juliekomi Messages postés 6 Statut Membre
     
    J'ai vérifié, l'upload ne se fait pas. Je ne comprends vraiment pas pourquoi alors que le $_POST passe sans souci!
    0
  9. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
  10. juliekomi Messages postés 6 Statut Membre
     
    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
  11. Alain_42 Messages postés 5413 Statut Membre 904
     
    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