Précédent   Forum du club des développeurs et IT Pro > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/10/2012, 10h23   #1
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 76
Points : 76
Par défaut Récupérer une image en variable de session

Bonjour à toutes et à tous,

Objectif : Récupérer en tant que variable de session une image présente sur mon serveur.
Je souhaite afficher l'image récupérée sur le serveur suite à un upload que j'ai effectué.

Code :
1
2
3
4
5
6
7
8
9
10
11
 
<?php
	//session_start(); 
	/** script traitant la récupération et l'affichage de la vignette. Nous affichons les vignettes dans la div ayant l'id ajoutPhotos
		Rappel : Nous sommes dans la zone du producteur ayant uploadé la vignette.
	*/
 
	//print_r($_SESSION['picture'][$_SESSION['id']]);
	$dossier='vignettes/';
	print '<img src="'.$dossier.$_SESSION['picture'][$_SESSION['id']].'">';	 
?>
Code :
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
 
<?php
	//session_start(); //A session had already been started - ignoring session_start() in ..../zone_producteur.php
	/** script permettant l'insertion dans la zone producteur des vignettes uploadées sur le serveur de base de données.
		Objectif : Suite à l'insertion en base des vignettes uploadées, le producteur doit voir s'afficher la vignette
					dans son espace. Les vignettes sont présentes physiquement dans un répertoire vignettes sur le serveur.
					Il faut donc parcourir ce répertoire pour afficher la vignette en fonction du producteur, en effet chaque
					nom de vignette est précédé d'un entier représentant l'id du producteur (e.g : 1_img5.jpg qui représente
					une vignette uploadée par le producteur ayant l'id 1 dans la table des producteurs.)
 
	 */	
	// création d'une structure de données vide pour stocker les vignettes
	$container = array(); 
	$dossier = "vignettes/"; // le répertoire contenant les vignettes uploadées
	$dir = opendir($dossier); // on ouvre le répertoire contenant les vignettes
	// TRAVERSER le répertoire en lecture
	/* Explication du test conditionnel de la boucle while()
		1 - Chaque vignette lue est placée dans une variable $vignettes afin qu'elle ne soit pas perdue
			Rappel : un résultat qui n'est pas mis dans une variable est perdue !
		2 - On compare ce qui est extrait de la lecture avec la valeur false (ce qui est pertinent !)
		3 - On utilise l'opérateur de comparaison !== (différent)
		On test que le contenu extrait est différent de false donc vaut true ! 
	 */
 
	while(false !== ($vignettes = readdir($dir))) {
		// si le fichier n'est pas le répertoire courant et le répertoire parent 
		if($vignettes != '.' && $vignettes != '..') { 
			// alors je remplis le tableau avec les vignettes présentes dans le répertoire 
			$container[] = $vignettes;
		}
	} // fin while()
	closedir($dir); // on ferme le répertoire	 
	sort($container); // on trie le tableau ... mais ce n'est peut-être pas utile !
	// on crée une variable de session pour pouvoir récupérer toutes les vignettes sans distinction
	$_SESSION['picture'] = $container;
 
	/* Explication du principe de récupération des vignettes
		Si nous avons récupéré la variable de session $_SESSION['id'] (e.g ?id=2)
		nous parcourons le tableau pour trouver toutes les vignettes ayant un nom préfixé par l'entier 
		représentant l'id du producteur.		 
	*/ 
 
	// si la variable $_SESSION est récupérée 
	if(isset($_SESSION['id'])) {
		//$count = sizeof($container); // récupérer le nombre d'élément du tableau
		$id = intval($_SESSION['id']); // on veut la valeur numérique entière
		// PARCOURIR LE TABLEAU
		// Astuce : La boucle foreach est recommandée pour parcourir un tableau en assignant chaque paire clé:valeur
		// La clé correspond à l'identifiant de la vignette dans le tableau et la valeur au nom de la vignette		
		foreach($container as $cle=>$valeur) {			
		// on récupère le 1er caractère du nom de la vignette et on le compare à l'identifiant de session
			$prCarVignette = substr($container[$cle],0,1);
			if($prCarVignette == $id) {
			// on crée une variable de session pour pouvoir récupérer les vignettes correspondant aux vignettes du producteur
			// on se base sur l'identifiant de session qui correspond au premier caractère du nom du fichier 
			$_SESSION['picture'][$_SESSION['id']] = $prCarVignette;
			//echo "<a href=\"gallery-image.php?img=$cle\">$valeur</a></br>";
			include 'ajout_publierPhotos.php';
			}			
		} // fin foreach()
	} // fin if()
	/*
	// pour le debogage
	echo '<pre>';
	print_r($_SESSION['picture'][$_SESSION['id']]);
	echo '</pre>';
	*/
 
?>
Merci d'avance,
Transact.
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2012, 11h29   #2
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 76
Points : 76
J'ai rajouté la ligne suivante dans mon script
Code :
header ("Content-type: image/jpeg");
J'ai le message suivant :
L'image "...." ne peut être affichée car elles contient des erreurs.
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2012, 12h11   #3
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 76
Points : 76
Citation:
Envoyé par transact Voir le message
J'ai rajouté la ligne suivante dans mon script
Code :
header ("Content-type: image/jpeg");
J'ai le message suivant :
L'image "...." ne peut être affichée car elles contient des erreurs.
La bibliothèque GD est bien activée sur le serveur.
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2012, 16h06   #4
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 76
Points : 76
En regardant bien mon code, il faudrait concevoir une expression régulière :
Le premier caractère serait le résultat de la variable $premierChar suivi d'un _ de caractères alphanumériques et de .jpg, png
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2012, 16h32   #5
transact
Membre régulier
 
Avatar de transact
 
Homme
Inscription : décembre 2008
Messages : 275
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France, Gironde (Aquitaine)

Informations forums :
Inscription : décembre 2008
Messages : 275
Points : 76
Points : 76
[Résolu]
Il fallait modifier le code de récupération des vignettes de la sorte :

Code :
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
 
/* Explication du principe de récupération des vignettes
		Si nous avons récupéré la variable de session $_SESSION['id'] (e.g ?id=2)
		nous parcourons le tableau pour trouver toutes les vignettes ayant un nom préfixé par l'entier 
		représentant l'id du producteur.		 
	*/ 
	// si la variable $_SESSION est récupérée 
	if(isset($_SESSION['id']) && isset($_FILES)) {
		//$count = sizeof($container); // récupérer le nombre d'élément du tableau
		$id = intval($_SESSION['id']); // on veut la valeur numérique entière
		// PARCOURIR LE TABLEAU
		// Astuce : La boucle foreach est recommandée pour parcourir un tableau en assignant chaque paire clé:valeur
		// La clé correspond à l'identifiant de la vignette dans le tableau et la valeur au nom de la vignette		
		foreach($container as $cle=>$valeur) {			
		// on récupère le 1er caractère du nom de la vignette et on le compare à l'identifiant de session
			$premierChar = substr($container[$cle],0,1);
			// si le premier caractère correspond à l'identifiant de session alors			
			if($premierChar == $id) {
			// on met les valeurs (nom des vignettes avec extension) dans la variable $_SESSION['picture'] 						
			$_SESSION['picture'] = $valeur;
			// on affiche les vignettes			
			print '<img src="'.$dossier.$_SESSION['picture'].'">';							
			}		
		} // fin foreach()
	} // fin if()
transact est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h14.


 
 
 
 
Partenaires

Hébergement Web