Sondage :

Publicité




Partenaires




Jmax-Hardware

mxdev.net

feedburner
donate.gif


395 visiteur(s) en ligne
Forums d'entraide informatique - Les forums de PCW
[Résolu] [PHP] Besoin d'aide sur un script de gestion d'offres - Version imprimable

+- Forums d'entraide informatique - Les forums de PCW (http://forum.pcinfo-web.com)
+-- Forum : Forum Informatique (/forumdisplay.php?fid=39)
+--- Forum : Internet - Navigation -Programmation - Scripts - Developpement (/forumdisplay.php?fid=8)
+--- Discussion : [Résolu] [PHP] Besoin d'aide sur un script de gestion d'offres (/showthread.php?tid=5265)

Pages : 1 2


[PHP] Besoin d'aide sur un script de gestion d'offres - Quentin - 01-01-2012 14:18 PM

Salut tout le monde,

Aujourd'hui je viens car j'ai besoin de votre aide en php (je suis pas très doué dans ce code).
Voilà mon problème :
J'ai une page "gestion.php" et dessus j'aimerais afficher l'offre du client en fonction de son id
En effet j'ai une table "users" qui contient les clients et dedans une colonne "offre" qui contient le nom de l'offre
Il faudrait que sur cette page j'arrive à afficher l'offre du client connecté.
Ex : Je me connecte avec l'username Cyboulette sur la page j'obtiens l'offre que Cyboulette a.
Je me connecte avec l'username Test sur la page j'obtiens l'offre que Test possède.

Voici la structure :


--
-- Structure de la table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` bigint(20) NOT NULL,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`avatar` text NOT NULL,
`offre` varchar(255) NOT NULL,
`dir` varchar(255) NOT NULL,
`signup_date` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Et le code de ma page gestion.php :


<?php
//On récupère l'offre de l'utilisateur en fonction de son id
$req = mysql_query('select username, email, offre from users WHERE id=id');
while($dnn = mysql_fetch_assoc($req))
{
?>
Vous disposez de l'offre : <?php echo $dnn['offre']; ?> <br/>

En espérant que vous puissiez m'aider Smile Merci d'avance !


RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Troll - 01-01-2012 14:28 PM

Salut Quentin,

Le code PHP que tu utilises est le bon.

Le problème ici est que, telle que ta base de données est conçue, tu ne peux stocker qu'une seule offre par client.

Je m'explique :

Premièrement, dans ta table "users" il manque une clé primaire. En règle général, il faut une clé primaire dans une table (sauf quelques très rares cas, compliqués à expliquer ici).

En l'occurence, pour une table stockant les utilisateurs, la clé primaire sera logiquement l'identifiant de l'utilisateur car il est unique.

Cependant, une clé primaire est "unique" elle ne peut pas avoir, pour deux lignes différentes de ta base de données, la même valeur.

Ce qui implique de ne pas dupliquer les données, justement... et donc, de ne pouvoir avoir, avec ton schéma actuel, qu'une seule offre par client !

Ce qu'il faut faire c'est :
  • Mettre "id" en clé primaire (accessoirement, en AUTO_INCREMENT ça te facilitera la vie)
  • Retirer la colonne "offre"
  • Créer une table "offres" dans laquelle tu stockes les données relatives aux offres (comme leur prix, etc. ... )
  • Créer une table "clients_offres" par exemple (tu la nommes comme tu veux) qui fera la jointure entre tes offres et tes clients.

Dans cette table clients_offres tu auras :
  • une colonne client_id
  • une colonne offre_id

La clé primaire sera cette fois la combinaison (client_id, offre_id) qui deviendra unique (sauf si un client peut avoir plusieurs fois la même offre, dans ce cas, ne le mets pas en clé primaire).

Ensuite, pour avoir les offres pour un client donné, la requête deviendra :


SELECT * FROM clients_offres WHERE client_id = $id 

Et si tu veux récupérer les données de la table "offres" en même temps (pour avoir son nom par exemple) il faut faire une jointure :


SELECT * FROM clients_offres JOIN offres ON (clients_offres.offre_id = offres.id)


Voilà Smile


RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Quentin - 01-01-2012 14:56 PM

Merci de ton aide mais ça ne marche pas Sad

J'ai fais exactement comme tu m'as dis, donc cela viens de mon code php

Je le remets ici :

<?php
//On recupere les identifiants, les pseudos et les emails des utilisateurs
$req = mysql_query('SELECT * FROM clients_offres JOIN offres ON (clients_offres.offre_id = offres.id)');
while($dnn = mysql_fetch_assoc($req))
{
?>
Vous disposez de l'offre : <?php echo $dnn['offre']; ?> <br/>

J'obtiens :
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/gestion.php on line 60


RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Troll - 01-01-2012 15:37 PM

C'est que ta requête plante Wink

Mets un "or die(mysql_error())" entre ton mysql_query() et le ";"

Comme ça :

mysql_query(blabla) or die(mysql_error());




RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Quentin - 01-01-2012 16:03 PM

J'obtiens maintenant : Unknown column 'offres.id' in 'on clause' Sad


RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Troll - 01-01-2012 16:05 PM

Est-ce que tu as bien créé une table qui s'appelle "offres" et qui contient une colonne "id" ? ^^


RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Quentin - 01-01-2012 16:15 PM

Ah non je l'avais appelé offre_id mais je viens de le changer en id mais ça n'affiche toujours pas le nom de l'offre Sad


RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Troll - 01-01-2012 16:23 PM

Ré-envoie la structure SQL de tes tables (les 3, maintenant que y'en a trois) et le code PHP que tu utilises pr afficher...


RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Quentin - 01-01-2012 16:29 PM

Voilà les structures :

--
-- Structure de la table `clients_offres`
--

CREATE TABLE IF NOT EXISTS `clients_offres` (
`client_id` int(20) NOT NULL,
`offre_id` int(20) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Structure de la table `offres`
--

CREATE TABLE IF NOT EXISTS `offres` (
`id` int(20) NOT NULL,
`nom` varchar(255) NOT NULL,
`prix` varchar(255) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

-- --------------------------------------------------------

--
-- Structure de la table `users`
--

CREATE TABLE IF NOT EXISTS `users` (
`id` bigint(20) NOT NULL,
`username` varchar(255) NOT NULL,
`password` varchar(255) NOT NULL,
`email` varchar(255) NOT NULL,
`avatar` text NOT NULL,
`signup_date` int(10) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Et pour afficher j'utilise :

<?php
//On recupere les identifiants, les pseudos et les emails des utilisateurs
$req = mysql_query('SELECT * FROM clients_offres JOIN offres ON (clients_offres.offre_id = offres.id)') or die(mysql_error());
while($dnn = mysql_fetch_assoc($req))
{
?>
Vous disposez de l'offre : <?php echo $dnn['nom']; ?> <br/>

Maintenant ça m'affiche : 1 (Qui est le nom de l'offre 1) et 2 (Qui est le nom de l'offre 2), seulement que j'ai mis l'offre 1 au client 1 et l'offre 2 au client 2. Je me suis connecté sur le client 2 ça m'affiche la même chose :/


RE: [PHP] Besoin d'aide sur un script de gestion d'offres - Troll - 01-01-2012 16:43 PM

C'est normal, tu n'as pas mis de WHERE client_id = '.$id à la fin de ta requête Wink

Donc tu affiches tout, sans restreindre au client actuellement connecté sur la page. Smile