IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Upload des fichiers ne s'effectue pas


Sujet :

Langage PHP

  1. #1
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut Upload des fichiers ne s'effectue pas
    Bonjour à toutes et à tous,

    Je souhaite effectuer l'upload de 4 fichiers sur le serveur web, mais aucun fichier n'est uploadé.

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
     
    <?php
    	/** 
    		Script effectuant le traitement de l'insertion dans la table des annonces de l'annonce publiée depuis le formulaire par le membre 		
    		Il faudra par ailleurs envoyer un email au membre afin de lui communiquer la réception puis la validation ou pas de son annonce.
    		Il faudra également vérifier la validité des autres informations saisis par l'utilisateur
    	**/	
    	session_start();
    	error_reporting(E_ALL); ini_set('display_errors', 1);	
    	//echo "<pre>" . PHP_EOL;
     
    	require_once 'includes/inc_connexion.php'; // pour se connecter à la Base de données
    	include 'includes/inc_identification.php'; // pour accéder à l'identifiant de connexion
    	$conn=opendb_conn(); // on se connecte à la Base de données	
     
    	// variables correspondant aux champs présents en base
    	// utilisation de l'opérateur ternaire ?: pour assigner les variables aux valeurs des champs du formulaire
    	$id = (isset($_SESSION['id']))?$_SESSION['id']:null; // id du producteur stocké en base
    	$titre = !(empty($_POST['titre']))?$_POST['titre']:null; // pour tester l'existence et que le champ est non vide
    	$description = !(empty($_POST['description']))?$_POST['description']:null;
    	$taille =  !(empty($_POST['taille']))?$_POST['taille']:null;
    	$marque =  !(empty($_POST['marque']))?$_POST['marque']:null;
    	$couleur =  !(empty($_POST['couleur']))?$_POST['couleur']:null;
    	$prix =  !(empty($_POST['prix']))?$_POST['prix']:null;
    	$valide = 0; // l'annonce n'est pas encore validée
     
    	// nous effectuons un test sur l'envoi du fichier avec la variable superglobale $_FILES
    	// Attention : $_FILES[][] est un tableau et non une fonction 
    	//mkdir('photos_annonces', 0777, true); // création d'un répertoire où seront stockées les vignettes et la photo principale 
    	$uploads_dir = 'photos'; // affectation du répertoire crée 
    	// création des variables permettant d'envoyer la photo et les vignettes sur le serveur
    	$photo_blob = '';
    	$photo_taille = 0; // on initialise la taille de la photo
    	$photo_type = '';
    	//$photo_nom = '';
    	$taille_max = 300000; // taille maximale de la photo
     
    	// si les variables envoyées sont vides
    	if(empty($_POST)) {
    		echo 'erreur'; // utilisé comme callback dans firebug
    	}
     
    	//	si toutes les variables envoyées ne sont pas vides et ont été initialisées
    	if(isset($_POST)){
    	// requête pour l'insertion de l'annonce en base
    		$req = 
    			"insert into annonces(annonce_id,titre,description,taille,marque,couleur,prix,valide,id_membre)
    				values(null,:titre,:description,:taille,:marque,:couleur,:prix,:valide,:id_membre)";
    		// on prépare le traitement de la requête
    		$stm=$conn->prepare($req);
    		// Tentative d'insertion en base d'une (nouvelle) publication en utilisant le mode transactionnel
    		// bloc try ... catch()
    		try {
    			$conn->beginTransaction();	
    			// on associe les marqueurs nommés avec les variables crées plus haut
    			$stm->bindParam(':titre', $titre, PDO::PARAM_STR);
    			$stm->bindParam(':description', $description, PDO::PARAM_STR);
    			$stm->bindParam(':taille', $taille, PDO::PARAM_STR);
    			$stm->bindParam(':marque', $marque, PDO::PARAM_STR);
    			$stm->bindParam(':couleur', $couleur, PDO::PARAM_STR);
    			$stm->bindParam(':prix', $prix, PDO::PARAM_INT);
    			$stm->bindParam(':valide', $valide, PDO::PARAM_INT);
    			$stm->bindParam(':id_membre', $id, PDO::PARAM_INT);
    			// exécution de la requête
    			$stm->execute();			
    			// on commit
    			$conn->commit();
    			echo 'enregistré';	// utilisé comme callback dans firebug					
    		} catch(PDOException $e) {
    			// on rollback si cela se passe mal
    			$conn->rollback();
    			// on affiche un message d'erreur
    			print '</br>';
    			print "Erreur lors de l'insertion en base !: " . $e->getMessage() . "</br>";
    		} // fin bloc try ... catch()			
     
    		// on récupére l'id de l'annonce insérée avec succès par le membre, cet id nous servira comme nom de répertoire
    		$sql = "select annonce_id from annonces where id_membre ='".$id."'"; 
    		// on prépare le traitement de la requête
    		$stmt=$conn->prepare($sql);
    		// exécution de la requête
    		$stmt->execute();		
    		// creation de la variable $result recuperant la ligne et la retournant EN TANT QU'OBJET
    		$result=$stmt->fetch(PDO::FETCH_OBJ);		
    		$annonce_id=$result->annonce_id; //récupération de la valeur de l'id de l'annonce en base
    		$stmt->closeCursor(); // fermeture du curseur 		
    	} // fin if(isset($_POST))
     
    	// Traitement de l'upload des images de l'annonce
    	if(!empty($_FILES) && isset($_FILES)) {
    		/** 
    			objectif : 
    				Lors de l'upload des images (photo principale + vignettes) nous voulons que les images soient
    				stockées dans un répertoire qui aura pour nom l'id de l'annonce.							 		
    		**/					
    		// on vérifie qu'il s'agit bien d'une image donc avec l'extension adéquate et non d'un fichier quelconque
    		$photo_principale = $_FILES['photoPrincipale']['name']; // le nom du fichier qui sera uploadé
    		$photo_add1 = $_FILES['photo_add1']['name'];
    		$photo_add2 = $_FILES['photo_add2']['name'];
    		$photo_add3 = $_FILES['photo_add3']['name'];				
    		// on récupère l'extension du fichier uploadé et on la met en minuscule		
    		// on stockera toutes ces extensions dans un tableau
    		$ext = array();
    		array_push($ext, strtolower(substr($photo_principale,-3)), strtolower(substr($photo_add1,-3)),
    			 strtolower(substr($photo_add2,-3)), strtolower(substr($photo_add3,-3)));
    		// on place les extensions dans un tableau
    		$allow_ext = array("jpg", "png", "gif");
    		// si l'extension du fichier uploadée est dans le tableau
    		if(in_array($ext, $allow_ext)) {
    			// alors on déplace sur le serveur tous les fichiers uploadés l'un après l'autre 
    			$photo_principale = move_uploaded_file($_FILES['photoPrincipale']['tmp_name'], "$uploads_dir/$annonce_id");
    			$photo_add1 = move_uploaded_file($_FILES['photo_add1']['tmp_name'], "$uploads_dir/$annonce_id");
    			$photo_add2 = move_uploaded_file($_FILES['photo_add2']['tmp_name'], "$uploads_dir/$annonce_id");
    			$photo_add3 = move_uploaded_file($_FILES['photo_add3']['tmp_name'], "$uploads_dir/$annonce_id");			
    		} else {
    			// on affiche un message d'erreur qui sera utilisé dans le fichier afficherZonePhotos.js
    			echo 'erreur';
    		} // fin if() ... else	
    		// on vérifie que le répertoire d'upload n'est pas vide donc que les fichiers ont bien été uploadés
    		include_once('includes/inc_dossierEstVide.php');		
    		if(is_empty_dir('$uploads_dir/$annonce_id')) {
    			echo 'Problème de transfert des images !';	
    			//header('Location: http://localhost/clothesBusiness/index.php'); // on reste sur la page 
    		} else {
    			// la photo a bien été reçue, on réaffecte la valeur de la taille des images
    			$photoPrinc_taille = $_FILES['photoPrincipale']['size'];
    			$photoAdd1_taille = $_FILES['photo_add1']['size'];
    			$photoAdd2_taille = $_FILES['photo_add2']['size'];
    			$photoAdd3_taille = $_FILES['photo_add3']['size'];
    			// on vérifie la taille de la photo
    			if(($photoPrinc_taille || $photoAdd1_taille || $photoAdd2_taille || $photoAdd3_taille) > $taille_max) {
    				echo 'Les photos sont trop volumineuses, vérifiez le poids des photos !';
    			}
    			// on affecte le type de la photo
    			$photoPrinc_type = $_FILES['photoPrincipale']['type'];
    			$photoAdd1_type = $_FILES['photo_add1']['type'];
    			$photoAdd2_type = $_FILES['photo_add2']['type'];
    			$photoAdd3_type = $_FILES['photo_add3']['type'];
    			// on utilise la fonction file_get_contents() permettant de passer le contenu du fichier
    			// directement dans une variable
    			$photoPrinc_blob = file_get_contents ("$uploads_dir/$photo_principale");
    			$photoPrinc_blob = addslashes($photoPrinc_blob); // on échappe le contenu binaire du fichier
    			$photoAdd1_blob = file_get_contents ("$uploads_dir/$photo_add1");
    			$photoAdd1_blob = addslashes($photoAdd1_blob);
    			$photoAdd2_blob = file_get_contents ("$uploads_dir/$photo_add2");
    			$photoAdd2_blob = addslashes($photoAdd2_blob);
    			$photoAdd3_blob = file_get_contents ("$uploads_dir/$photo_add3");
    			$photoAdd3_blob = addslashes($photoAdd3_blob);
    		}			
    	} // fin if(!empty($_FILES) && isset($_FILES)
     
    	//pour les tests
     
    	print '<pre>';	
    	print_r($_FILES);
    	print_r($_POST); // pour le débogage
    	print_r($_SESSION);
    	print '</pre>';
     
     
     
    ?>


    Merci d'avance.
    Transact.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Que renvoient tes print_r ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Bonjour sabotage,

    print_r($_POST) me renvoi toutes les variables concernant les champs du formulaire.
    print_r($_SESSION) me renvoi la variable de session id du membre
    par contre $_FILES ne me renvoi rien.

    Transact.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ta déclaration de formulaire ressemble bien à ca ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <form method="post" action="page.php" enctype="multipart/form-data">
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Oui voici à quoi elle ressemble
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    <form name="ajoutAnnonce" id="annonceForm" enctype="multipart/form-data" action="ajout_annonceArticle.php" method="post">

    J'ai modifié mon script, en effet j'ai dissocié la partie injection SQL et celle uploadant les images sur le serveur.
    Dans le fichier ajout_annonceArticle.php j'ai rajouté
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    include_once('upload_images.php');

  6. #6
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Voici ce que me renvoi un print_r($_FILES) :
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    Upload: <br>Type: <br>Size: 0 kB<br>Stored in:

    Voici le code
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if ($photo_error > 0) {
      			echo "Error: " . $photo_error . "<br>";
       		} else {
    		   echo "Upload: " . $photo_nom . "<br>";
    		   echo "Type: " . $photo_type . "<br>";
    		   echo "Size: " . ($photo_size / 1024) . " kB<br>";
    		   echo "Stored in: " . $photo_tmp;
       		}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Upload des fichier avec AJAX
    Par Pedro Varela dans le forum ASP.NET
    Réponses: 6
    Dernier message: 23/01/2007, 07h52
  2. download et upload des fichier avec JSP & mysql
    Par MSM_007 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 17/07/2006, 15h20
  3. upload des fichiers dans mon serveur
    Par abdou.sahraoui dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/05/2006, 09h32
  4. upload des fichiers
    Par abdou.sahraoui dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 19/04/2006, 07h02
  5. Uploader des fichiers via ssh
    Par Michaël dans le forum Réseau
    Réponses: 3
    Dernier message: 13/05/2005, 20h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo