Bonjour à toutes et à tous,

J'ai crée une fonction utilisateur permettant de récupérer en Base de données une photo publiée par un producteur.
L'objectif est de placer la photo extraite dans une div, mais je ne vois pas où placer l'appel de la focntion permettant d'effectuer cette action.
En effet en plaçant l'appel de la fonction dans la div le code HTML s'affiche lors de la soumission du formulaire.

#ajout_publierPhotos.php
Code : 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
 
<?php
 
	function ajoutPublierPhotos() {
		// script intégrant dans l'espace membre du producteur la photo qui vient d'être uploadée. 
		//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
 
		// si l'identifiant de connexion passé en GET comme paramètre à l'url est récupéré
		if($_GET['id']) {
			$id = intval($_GET['id']); 
 
			// requête pour l'extraction de la photo publiée par le producteur en base
			$req =
				"SELECT photo_id, photo_type, photo_blob 
				FROM photos 
				WHERE idproducteur = ".$id."
				ORDER BY photo_id DESC LIMIT 0,1";	
 
			// on prépare le traitement de la requête
			$stm=$conn->prepare($req);
			// Tentative d'insertion en base d'une nouvelle photo du producteur en utilisant le mode transactionnel
			// bloc try ... catch()
			try {
				// on exécute la requête
				$stm->execute();
				// récupération de la ligne du jeu de résultat
				$result = $stm->fetch(PDO::FETCH_OBJ);
				// si le jeu de résultat n'est pas vide; donc au moins une photo
				if(!empty($result)) {
				// alors on envoie alors l'entête Content-type puisque nous voulons afficher une photo
					header("Content-type: ".$stm->photo_type); 
					print($stm->photo_blob);
				} 
			} catch(PDOException $e) {			
				// on affiche un message d'erreur
				print "Erreur lors de l'extraction en base !: " . $e->getMessage() . "</br>";
				header( "refresh:0.5;url=http://localhost/zone_producteur.php" ); // on rafraîchit simplement la page
			} // fin bloc try ... catch()
 
		} else {
			echo "Identifiant de la photo n'existe pas !";
		} // fin if($_GET['id']) ... else
 
	} // fin function ajoutPublierPhotos {}	
 
?>
# persist_photosPublier.php
Code : 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
 
<?php 
	session_start(); // on veut récupérer l'identifiant de connexion
	error_reporting(E_ALL); ini_set('display_errors', 1);	
	echo "<pre>" . PHP_EOL;
	/** script permettant de transférer la photo envoyée depuis le navigateur du client sur le serveur de Base de données.
		Il faut vérifier que le fichier est bien sur le serveur et qu'il ne dépasse pas la taille max. */
 
		// création des variables permettant d'envoyer la photo 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
 
		// nous effectuons un test sur l'envoi du fichier avec la variable superglobale $_FILES
		// Attention : $_FILES[][] est un tableau et non une fonction 		
		//mkdir('fichiers', 0777, true); // création d'un répertoire où seront stockées les photos											
		$uploads_dir = 'fichiers'; // affectation du répertoire crée 
		$photo_nom = $_FILES["photo"]["name"]; // le nom du fichier qui sera uploadé
 
		// si la variable de session SESSION['id'] est initialisé 
		if(isset($_SESSION['id'])) {
			$id = $_SESSION['id'];			
			$photo_nom = $id.'_'.$photo_nom; // on place l'identifiant du producteur devant le nom du fichier	
			//	si toutes les variables envoyées ne sont pas vides et ont été initialisées
			if(!empty($_FILES) && isset($_FILES) && isset($_POST) && !empty($_POST)){
				$photo_desc = $_POST['photo_desc'];
				// alors on déplace sur le serveur le fichier uploadé 
				$resultat = move_uploaded_file($_FILES['photo']['tmp_name'], "$uploads_dir/$photo_nom");
				// on vérifie que le fichier a bien été uploadé et déplacé sur le serveur avant de l'envoyer en base
				if(!$resultat) {
					echo 'Problème de transfert de la photo';	
				} else {
					// la photo a bien été reçue, on réaffecte la valeur de la taille de la photo
					$photo_taille = $_FILES['photo']['size'];
					// on vérifie la taille de la photo
					if($photo_taille > $taille_max) {
						echo 'La photo est trop volumineuse !';
					} 
					// on affecte le type de la photo
					$photo_type = $_FILES['photo']['type'];	
					// on utilise la fonction file_get_contents() permettant de passer le contenu du fichier
					// directement dans une variable
					$photo_blob = file_get_contents ("$uploads_dir/$photo_nom");
					$photo_blob = addslashes($photo_blob); // on échappe le contenu binaire du fichier
 
					// on inclus le script de connexion à la base de données
					include_once 'includes/inc_connexion.php'; 
					$conn=opendb_conn(); // on se connecte à la Base de données							
					/** partie traitant l'insertion des photos dans la table des photos **/
					// création de la requête 
					$req = 
					"insert into photos(photo_id,photo_nom,photo_taille,photo_type,photo_desc,photo_blob,idproducteur) 
						values('',:photo_nom,:photo_taille,:photo_type,:photo_desc,:photo_blob,:idproducteur)";
 
					// on prépare le traitement de la requête
					$stm=$conn->prepare($req);
					// Tentative d'insertion en base d'une photo 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(':photo_nom', $photo_nom, PDO::PARAM_STR);
						$stm->bindParam(':photo_taille', $photo_taille, PDO::PARAM_STR);
						$stm->bindParam(':photo_type', $photo_type, PDO::PARAM_STR);
						$stm->bindParam(':photo_desc', $photo_desc, PDO::PARAM_STR);
						$stm->bindParam(':photo_blob', $photo_blob, PDO::PARAM_STR);
						$stm->bindParam(':idproducteur', $id, PDO::PARAM_INT);
						// exécution de la requête
						$stm->execute();			
						// on commit
						$conn->commit();				
						/** rappelle-toi : une variable ne passe d'une page à une autre que par les superglobales. 
							Dans ton cas, tu définis $id, et hop, tu changes de page, 
							(donc de script, et donc d'exécution). Dommage, ta variable est perdue. */
						// il faut effectuer un refresh de la page pour rester sur celle-ci, et non un Location qui nous envoi sur le script ci-présent
						header('refresh:0.5;url=http://localhost/zone_producteur.php?id='.$id); // il faut passer en GET pour récupérer la variable de session $id																																							
					} 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()								
				} // fin if(!$resultat) ... else
			} else {
				echo 'Tous les champs ne sont pas parvenus';
			} // fin if(!empty()) ... else												
		} // fin if(isset($_SESSION['id']))
 
		/*	pour les tests		
		print '<pre>';	
		print_r($_FILES);
		print_r($_POST); // pour le débogage
		print_r($_SESSION);
		print '</pre>';
		*/
?>
#zone_producteur.php
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
require 'ajout_publierPhotos.php';
// code 
<div id="ajoutPhotos"><?php ajoutPublierPhotos(); ?></div> <!-- div pour ajout des photos après envoi au serveur -->
Merci d'avance,
Transact.