afficher une info de bd

Petit nouveau ! | 3 Messages

05 janv. 2013, 16:16

slt a tous
je viens de créer un espace membre sur mon site , mais je voudrai lorsque la personne s incrit et qu il atteris dans la base de donnée pouvoir rajouter un fichier.
je m explique avec détails:
client s'inscrit, il se connecte, lorsqu il se connecte je veux lui afficher un liens vers un fichier ou une page réservé a cette utilisateur (exemple afficher ses prix perso).

comment integré ce liens dans la base?
et comment afficher se liens sur l espace de chaque client puisqu il sera different pour tous?

merci d'avance

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

05 janv. 2013, 16:43

salut,


Pour te répondre il faut savoir comme tu souhaite stocker les données.

Par exemple, imaginons que ton espace membre est basé sur une table que je vais appeler membres (parce qu'après tous elle peux contenir autre chose des clients, ça peux être des fournisseurs, ton staff etc etc).
la table membre est relativement simple
idmembre : entier, c'est la clef primaire de la table
nom : varchar(50), c'est le nom
prenom : varchar(50)
email : varchar(255) (pour la taille faudrait vérifier auprès de la rfc qui va bien mais bon 255 caractères au total c'est déja pas mal ;)).
motdepasse varchar(182)

tous ces champs ne peuvent être null.
globalement ta table actuelle doit ressembler à ça ?

ensuite, quelque soit ce que tu veux afficher, il faut lier les autres table avec celle ci.

par exemple tu gère un site marchand, tu va avoir au minimum :
- une table produits (idproduit : pk, nom varchar, prix decimal(5,2))
- une table commandes (idcommande ; pk c'est le numéro de commande, la date et l'id du membre)
- une table detailsCommande (idcommande, idproduit, quantite).

avec ces tables on a ce que l'on appel des jointures entre les tables.
une jointure entre commande et membre parce que l'on va stocker l'id du membre qui commande dans la table commande. celui ci va nous permettre par la suite de récupérer facilement les commandes qui appartient à un membre précis très simplement.
dans notre cas un simple : select * from commandes where idmembre=xxx
le xx c'est l'id du membre qui est connecté (généralement stocké en session).
donc en php quelque chose comme ça
<?php
$ret = mysql_query('select * from commandes where idmembre='.$_SESSION['idmembre']); 
ta requête sera toujours la même mais en fonction du membre connecté tu n'affichera pas la même chose (juste les commandes liées au membre qui affiche la page).
le principe est le même pour le détails des commandes la jointure permet de récupérer les infos produits lorsque l'on sélectionne le détails d'un commande.
Par exemple
select * from detailscommande join produits using (idproduit) where idcommande=412
avec ça tu as toutes les lignes de la commande 412 (idcommande=412) avec la quantité et les infos produit ;)


je conseil de regarder des infos sur les jointures SQL (par exemple sur http://sqlpro.developpez.com afin de mieux comprendre la chose).

Ton système se base sur ce principe de liaison entre les tables.
si tu veux faire référence à un fichier, une table avec l’emplacement du fichier sur le disque et l'idmembre peux t'y aider ;)


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

05 janv. 2013, 16:50

oui pour la table c'est ca
par contre je n ai pas d autre table
car je ne c la structurer car chaque client a une remise generale et des prix nets
donc c'est ca que je ne sais comment le retranscrire et surtout demandé d'afficher lorsque le client arrive sur son espace membre

notre site www.automatismes-sud-distribution.fr

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

06 janv. 2013, 12:56

je part donc du principe que tu as une liste de produit (verrin, barrière etc) chaque produits à un prix (un prix de base pour tous le monde viendront ensuite s'appliquer les remise par client). ;

pour faire quelques chose de propre on peu, rapidement, partir sur un MDC de ce type
Image

MLD correspondant
Image

avec cette modélisation tu as :
- des clients : tables existantes pour ce connecter je l'ai reprise pour la compréhension de la chose, j'ai ajouté un champ remise ( inférieur ou égale à 1, par exemple 0.5 pour 50%). ce champ est dans cette table puisque la remise est "générale". i tu veux des remise par produit et client c'est une relation (que tu peux appeler remise) entre la table client et produit (similaire a la relation detailscommande ;) ).
- des marques (parce que tu ne vend peux être pas qu'une seule marque, j'imagine que les portes ne sont pas forcément faites par ceux qui font des interphones :mrgreen: )
- des catégories (de produit) ça te permet de trouver rapidement les portes ou les bornes. c'est un bon point le dynamisme de ton site tu pourra ainsi alimenter tes pages juste en insérant des données dans la base ;)
- des produits qui ont une une catégorie, une marque, un nom, un prix etc
- des commandes
- des produits dans les commandes (detailscommande)

les relations sont simple, une fleche va de la table à laquelle on fait référence vers la table qui référence (un produit à une marque et une marque a des produits, donc dans la table produits on ajoute une référence à la marque, via la clef primaire de la table, ici idproduit).

le code SQL correspondant
CREATE TABLE produits(
        idproduit              int(11) unsigned Auto_increment  NOT NULL ,
        nom                    Varchar(100) NOT NULL ,
        refConstructeur        Varchar(50) NOT NULL ,
        idcategorie 		int(11) unsigned NOT NULL ,
        idmarque	       	int(11) unsigned NOT NULL ,
		prix                   decimal (9,2) NOT NULL ,
        PRIMARY KEY (idproduit)
)ENGINE=InnoDB;

CREATE TABLE marques(
        idmarque int(11) unsigned Auto_increment  NOT NULL ,
        nom      Varchar(25) NOT NULL ,
        PRIMARY KEY (idMarque)
)ENGINE=InnoDB;

CREATE TABLE categories(
        idcategorie int(11) unsigned Auto_increment  NOT NULL ,
        nom         Varchar(50) NOT NULL ,
        description Varchar(250) NOT NULL ,
        PRIMARY KEY (idcategorie)
)ENGINE=InnoDB;

CREATE TABLE clients(
        idclient   int(11) unsigned Auto_increment  NOT NULL ,
        nom        Varchar(25) NOT NULL ,
        prenom     Varchar(25) NOT NULL ,
        email      Varchar(255) NOT NULL ,
        motdepasse Varchar(128) NOT NULL ,
        remise     Decimal (3,2) NOT NULL default 1.00,
        PRIMARY KEY (idclient),
        UNIQUE (email)
)ENGINE=InnoDB;

CREATE TABLE commandes(
        idCommande       int(11) unsigned Auto_increment  NOT NULL ,
        datecmd          Datetime NOT NULL ,
        montanttotal     Decimal (9,2) NOT NULL ,
        idclient 	int(11) unsigned NOT NULL ,
        PRIMARY KEY (idCommande)
)ENGINE=InnoDB;

CREATE TABLE detailsCommande(
        quantite             Int not null,
        idproduit   int(11) unsigned NOT NULL ,
        idcommande int(11) unsigned NOT NULL ,
        PRIMARY KEY (idproduit,idCommande)
)ENGINE=InnoDB;

ALTER TABLE produits ADD CONSTRAINT FK_produits_idcategorie_categories FOREIGN KEY (idcategorie) REFERENCES categories(idcategorie);
ALTER TABLE produits ADD CONSTRAINT FK_produits_idMarque_marques FOREIGN KEY (idmarque) REFERENCES marques(idmarque);
ALTER TABLE commandes ADD CONSTRAINT FK_commandes_idclient_clients FOREIGN KEY (idclient) REFERENCES clients(idclient);
ALTER TABLE detailsCommande ADD CONSTRAINT FK_detailsCommande_idproduit_produits FOREIGN KEY (idproduit) REFERENCES produits(idproduit);
ALTER TABLE detailsCommande ADD CONSTRAINT FK_detailsCommande_idCommande_commandes FOREIGN KEY (idcommande) REFERENCES commandes(idcommande);
quand tu veux afficher les produits avec les prix déjà remisé, pour un client connecté, c'est assez simple tu récupère le taux de remise (table clients colonne remise) et soit à l'afficgae, soit dans la requête (mieux) tu applique la remise sur le prix.

en considérant qu'a la connexion tu garde en session le taux de remise (histoire d'éviter des requêtes sql) :
select idproduit, produits.nom as nomprod, refconstructeur, prix*0.5 as px, categories.nom as nomcat , marques.nom as nommarque
from produits
join categories using(idcategorie)
join marques using(idmarque)
le 0.5 étant fixé par concaténation en php, par exemple (si la remise est dans $_SESSION['user']['remise']).
<?php
$sql = 'select idproduit, produits.nom as nomprod, refconstructeur, prix * '.$_SESSION['user']['remise'].' as px, categories.nom as nomcat , marques.nom as nommarque
from produits
join categories using(idcategorie)
join marques using(idmarque)';
?>
en une seule requête avec l'id du client en session
SELECT idproduit, produits.nom AS nomprod, refconstructeur,prix * (
	SELECT remise
	FROM clients
	WHERE idclient = 412) AS px, 
categories.nom AS nomcat, marques.nom AS nommarque
FROM produits
JOIN categories USING(idcategorie)
JOIN marques USING(idmarque)
Où 412 est l'idclient qui se trouve en session (même utilisation que mon premier exemple).

ainsi l'affichage ne dépends que la personne qui est connecté et tu n'as qu'une page.

si tu veux un exemple du principe : http://www.lephpfacile.com/howto/1-comm ... rum-en-php c'est le même principe que l'affichage des sujets d'un forum en fonction de la catégorie.


@+
Il en faut peu pour être heureux ......

Petit nouveau ! | 3 Messages

07 janv. 2013, 09:27

ouahouu quel boulot,
merci beaucoup mais j en demande pas autant en fait, je demande juste comme je dois mettre une info dans la base de donnée sous forme de liens de page
qui afficherai en fonction du client les bonnes données.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

07 janv. 2013, 10:24

ben je l'ai expliqué en donnant des infos parce que tu n'en donne pas assez.

a priori tu n'as pas de structure de définie tu en a une pour baser ton dev :)

Comme indiqué sur mon dernier post ce que tu cherche à faire est similaire à l'utilisation d'un forum, ou afficher les infos d'un membre pour modification par celui ci etc etc.


@+
Il en faut peu pour être heureux ......