8791 sujets

Développement web côté serveur, CMS

Bonjour à tous.

J'ai un GROS problème pour réaliser ce que je veux.

Je vous explique:

J'ai 2 BDD (users / images_users) qui se présentent sous cette forme
users:
upload/25609-tableusers.jpg

images_users:
upload/25609-tableusers.jpg

Notez que ce n'est qu'une partie des bases, j'ai d'autres colonnes dans "user" mais elles ne servent à rien pour la compréhension de la problematique.

A la lecture de la BDD 1 (users) on peut lire que:
- user 1 et 2 ont posté dans la rubrique 1
- user 3 à posté dans la rubrique 2 et le 4 dans la rubrique 3

A la lecture de la BDD 2 (images_users) on peut lire que:
- user1 a posté 2 images
- user 2 a posté 1 image et user3 a posté 3 images

A partir de ça je voudrais pouvoir afficher les resultats de cette façon
upload/25609-resultat.jpg
sachant qu'une rubrique peut contenir X images...

Je sais que c'est compliqué mais j'espere que vous pourrez m'aider.
Merci davance
Modifié par pareto (18 Mar 2010 - 19:00)
Re',

pour commencer users et images_users ne sont pas des BDDs (bases de données) mais des tables contenues dans une base de donnée.

Ensuite tu as posté 2 fois la même image (en fait c'est certainement dû au script d'upload d'Alsacréations qui génère un nom d'image automatique en limitant le nombre de caractères : donc si les 2 images avaient le même début de nom la seconde écrase la première). Quoi qu'il en soit ce forum est également destiné aux utilisateurs de lecteurs d'écran donc ce serait de toutes façons mieux d'écrire en clair les champs de chaque table.

Pour finir ce que tu veux faire n'est absolument pas clair. Smiley langue
Modifié par Heyoan (18 Mar 2010 - 18:16)
Ok, je reprends, je vais tenter de faire plus clair.
J'ai 2 tables (users /users_images)
`users` (
  `id_user` int(10) unsigned NOT NULL auto_increment,
`nom_user` text NOT NULL, 
`prenom_user` text NOT NULL,
`email_user` text NOT NULL,
`rubrique_user` text NOT NULL,

PRIMARY KEY  (`id_user`)

et users_images
`users_images` (
  `id_image` int(10) unsigned NOT NULL auto_increment,
`id_user` int(10) unsigned NOT NULL,
  `chemin_image` text NOT NULL,
`rubrique_user` text NOT NULL,
PRIMARY KEY  (`id_image`),
  KEY `id_user` (`id_user`)


A partir des données des 2 tables, je voudrais afficher un tableau de X lignes sur 3 colonnes pour afficher 1 images illustrant chaque rubrique (1 image/rubrique). L'idée c'est d'avoir :

1 image qui illustre la 1ere rubrique/ 1 image qui illustre la 2e / 1 image qui illustre la 3e

1 image qui illustre la 4e / 1 image qui illustre la 5e / 1 image qui illustre la 6e pour un nombre de rubrique définie au préalable (25)

J'espère que j'ai été plus clair que la premiere fois et que tu vois ce que je cherche a faire
Modifié par pareto (18 Mar 2010 - 19:00)
Il manque encore :
* la description de la table 'catégories'
* quelle table (users ou users_images) contient le champ id_categorie ?
Modifié par Heyoan (18 Mar 2010 - 19:20)
oui je viens de le voir (rubrique_user est dans la table users). il faut que j'ajoute une colonne rubrique_user dans la 2eme table, c'est bien ça ?

`users` (
  `id_user` int(10) unsigned NOT NULL auto_increment,
`nom_user` text NOT NULL, 
`prenom_user` text NOT NULL,
`email_user` text NOT NULL,
`rubrique_user` text NOT NULL,

PRIMARY KEY  (`id_user`)



CREATE TABLE IF NOT EXISTS `users_images` (
  `id_image` int(10) unsigned NOT NULL auto_increment,
  `id_user` int(10) unsigned NOT NULL,
  `chemin_image` text NOT NULL,
  `rubrique_user` text NOT NULL,
  PRIMARY KEY  (`id_image`),
  KEY `id_user` (`id_user`)
)  ; 


je viens d'ajouter rubrique_user qui reprend l'id de la catégorie à laquelle l'image correspond.
Modifié par pareto (22 Mar 2010 - 09:36)
pareto a écrit :
il faut que j'ajoute une colonne rubrique_user dans la 2eme table, c'est bien ça ?
Ben non. Puisqu'un user a une et une seule catégorie on peut retrouver facilement le lien entre les images d'un user et la catégorie.

Par contre je te demandais la structure de la table categories (ou plutôt rubriques ?)...
Modifié par Heyoan (18 Mar 2010 - 19:13)
Je n'ai pas de table rubrique_user à part, le champ rubrique_user est inclus dans la table users.

`users` (`id_user` int(10) unsigned NOT NULL auto_increment, 
`nom_user` text NOT NULL,  `prenom_user` text NOT NULL, 
`email_user` text NOT NULL, 
`rubrique_user` text NOT NULL,  
PRIMARY KEY  (`id_user`)
Il me semblait t'avoir déjà parlé de normalisation des tables. Quoi qu'il en soit tu devrais avoir une table rubriques :
* id_rubrique INT auto_increment
* libelle_rubrique

et le champ dans la table users être une clef étrangère de cette table : id_rubrique


Edit: cela permet notamment lors de la création d'un user de sélectionner la rubrique dans un SELECT sans avoir à la ressaisir à la main (d'autant plus que ça évite une quelconque erreur de saisie).
Modifié par Heyoan (18 Mar 2010 - 19:25)
Ça pourrait donner :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Rubriques</title> 
<style type="text/css" media="screen"> 
#rubriques {
	margin: 0;
	padding: 0;
	width: 312px;
	list-style: none;
	overflow: hidden;
}
#rubriques li {
	float: left;
	width: 100px;
	margin: 2px;
}
#rubriques img {
	display: block;
	width: 100px;
	height: 100px;
}
</style> 
</head> 
<body>
<?php 
require('connexion.inc.php');
// Récupération des rubriques
$sql_rub = 'Select id_rubrique, nom_rubrique From rubriques Order By nom_rubrique';
$result_rub = mysql_query($sql_rub) or die(mysql_error());
if(mysql_num_rows($result_rub) > 0) {
	echo '<ul id="rubriques">'."\n";
	while($row_rub = mysql_fetch_assoc($result_rub)) {
		$sql_img = 'Select chemin_image From users_images Natural Join users Where id_rubrique='.$row_rub['id_rubrique'].' Order By Rand() Limit 1';
		$result_img = mysql_query($sql_img);
		$row_img = mysql_fetch_row($result_img);
		echo "\t".'<li><img src="'.$row_img[0].'" alt="" /><p>'.$row_rub['nom_rubrique']."</p></li>\n";
	}
	echo '</ul>'."\n";
} else {
	echo '<p>Pas de rubrique !</p>';
}
?> 
</body> 
</html>
A noter que pour bien faire il faudrait, au moment de l'upload d'une image, générer en même temps une miniature qui servirait pour cet affichage. Voir pour un exemple ce sujet.