8791 sujets

Développement web côté serveur, CMS

Bonjour,

Je travaille sur une visionneuse photo xhtml et php. J'ai créé une base de données 'photos' qui regroupent les informations sur chacune des photos (id, titre,url,commentaires, album_photo,...). Pour identifier chacune des photos, la visionneuse utilise l'id des photos.

Là où je rencontre un soucis c'est quand le visiteur souhaite faire défiler les photos d'un album, l'incrémentation de l'id ne fonctionne pas puisque la photo avec l'id '1' peut bien se trouver dans l'album 'Vacances' (par exemple ^^) et la photo avec l'id 2 dans un autre album !

Ce que je souhaiterais c'est trouver un moyen, à partir d'un id de départ, récupérer l'id suivante qui a la même valeur dans le champs 'album_photo' et l'id précédente. Je sais pas si vous me suivez Smiley smile Demandez moi si vous voulez plus de précisions.

Voilà merci ! Cordialement, Clément.
Administrateur
Bonjour,

lorsque tu récupères les enregistrements d'un album_photo (=catégorie) (éventuellement à partir de l'id d'une photo, tu as la catégorie à laquelle elle appartient), tu peux te garder tout ça dans une variable de type tableau puis lorsque tu auras besoin d'afficher les photos parcourir ce tableau.
Quelle est la requête que tu fais au départ? Tu extrais toutes les photos ou bien seulement (clause WHERE) celles de la catégorie voulue?
Hop ...


Deux idées :


Dans ta BDD 'photos' tu peux créer une table pour chaque catégorie... Comme ça pas de soucis les 'id' se suivront...


Sinon tu peux bidouille un truc du genre :
 mysql_query('SELECT * FROM Photos where album_photo='Vacances' ')
Ça sélectionne toute les photos de la catégorie vacances...
Et après faut se démerder pour faire un array avec les 'id' récupérés pour obtenir quelque chose...
Mais là je t'avoue que je panne un peu... C'est juste une piste....


A mon sens je pense que la 1ère semble plus simple... Smiley murf

EDIT : je me suis fait grilled...
EDIT2 : pour les noms des BDD, tables, variables,.. éviter les majuscules et les 's' à la fin... C'est souvent des sources d'erreurs par la suite...
Modifié par Velbain (10 May 2008 - 11:33)
Merci pour vos réponses...

J'ai déjà pensé à créer une table par album mais au final ça va faire beaucoup de table et vu que l'ajout d'un album se fait par formulaire, il faut créer la table par php et ça saoul ^^ et le soucis majeur est que dans ce cas là je peux plus lister les albums Smiley smile .

J'avais pensé aussi à l'array qui stock tous les id des photos qui sont contenus dans le même album mais je n'ai pas trouvé de solution encore. Sinon puisque l'utilisateur sélectionne la photo qu'il veut et qu'il arrive dans une nouvelle page avec son id et la photo qui s'affiche, je peux faire une requête du genre : 'SELECT * FROM photos WHERE id = (id de la photo récupérée)' puis récupérer l'album auquel elle appartient et incrémenter l'id jusqu'à trouver un id qui se trouve dans le même album... Enfin à méditer Smiley smile Je continue mes recherches, n'hésitez pas à me proposer, merci.

Cordialement, Clément
Ouarf ! Bah didonc, que de labeur !

J'ai créé deux fonction : une qui récupère l'id suivant et qui a la même valeur dans le champs 'album_photo' (recup_suiv), et une qui récupère l'id précédent et qui a la même valeur dans le champs 'album_photo' (recup_preced) :

function recup_suiv($id)
	{
		$max_id = mysql_query('SELECT MAX(id) AS max_id FROM photos');
		$donnees_max_id = mysql_fetch_array($max_id);
		$chercher_album_photo = mysql_query('SELECT album_photo FROM photos WHERE id=' . $id);
		$donnees_chercher_album_photo = mysql_fetch_array($chercher_album_photo);
		if($donnees_chercher_album_photo['album_photo'] != NULL)
		{
			$id++;
			$album_photo = mysql_query('SELECT * FROM photos WHERE id=' . $id);
			$donnees_album_photo = mysql_fetch_array($album_photo);
			while($donnees_album_photo['album_photo'] != $donnees_chercher_album_photo['album_photo'])
			{
				$id++;
				if($id > $donnees_max_id['max_id'])
				{
					$id = 1;
				}
				$album_photo = mysql_query('SELECT * FROM photos WHERE id=' . $id);
				$donnees_album_photo = mysql_fetch_array($album_photo);
			}
			return $id;
		}
		else
		{
			$erreur_id = TRUE;
		}
	}
	function recup_preced($id)
	{
		$min_id = mysql_query('SELECT MIN(id) AS min_id FROM photos');
		$donnees_min_id = mysql_fetch_array($min_id);
		$max_id = mysql_query('SELECT MAX(id) AS max_id FROM photos');
		$donnees_max_id = mysql_fetch_array($max_id);
		$chercher_album_photo = mysql_query('SELECT album_photo FROM photos WHERE id=' . $id);
		$donnees_chercher_album_photo = mysql_fetch_array($chercher_album_photo);
		if($donnees_chercher_album_photo['album_photo'] != NULL)
		{
			$id--;
			$album_photo = mysql_query('SELECT * FROM photos WHERE id=' . $id);
			$donnees_album_photo = mysql_fetch_array($album_photo);
			while($donnees_album_photo['album_photo'] != $donnees_chercher_album_photo['album_photo'])
			{
				$id--;
				if($id < $donnees_min_id['min_id'])
				{
					$id = $donnees_max_id['max_id'];
				}
				$album_photo = mysql_query('SELECT * FROM photos WHERE id=' . $id);
				$donnees_album_photo = mysql_fetch_array($album_photo);
			}
			return $id;
		}
		else
		{
			$erreur_id = TRUE;
		}
	}


En fait je procède simplement à une incrémentation ou une décrémentation de l'id de base et je vérifie à chaque si la valeur dans 'album_photo' est la même que pour l'id de départ (photo sélectionner dans une liste). Je cherche aussi l'id max et l'id min pour ne pas incrémenter ou décrémenter jusqu'à perpette Smiley smile

Voilà ! C'est assez barge comme méthode donc si je proposez mieux je suis preneur. Je fais avec ça pour le moment... C'est possible qu'il y est quelque bug, j'ai fais quelques vérifications mais je n'ai pas tout mis en pratique dans mon site Smiley smile Prévenez moi.

Cordialement, Clément !