Comment afficher le résultat choix sur 2 listes déroulantes

Résolu/Fermé
ritouthai Messages postés 5 Date d'inscription jeudi 26 septembre 2013 Statut Membre Dernière intervention 9 octobre 2013 - 29 sept. 2013 à 12:08
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 - 9 oct. 2013 à 14:12
Bonjour,

J'ai un problème a résoudre et je ne sais pas comment m'y prendre ? Novice en php et mysql. J'ai quelques notions quand même.

Voilà, je voudrai créer 3 tables.

La première contenant , nom, prenom, adresse, code postal, ville, telephone, email (formulaire standard entrée en texte)
La deuxième contenant une dizaine de produits différents. (liste déroulante)
La troisième contenant la liste des 22 régions française (liste déroulante)

Le but est que le formulaire une fois rempli alimente automatiquement les 3 tables.
et que le résultat du choix s'affiche automatiquement.

Pouvez vous me conseiller, par quoi commencer, comment lier les tables pour obtenir le résultat et si possible un petit exemple.

Merci de votre bienveillance !
A voir également:

8 réponses

heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
6 oct. 2013 à 02:40
Bonjour,

Il est difficile de répondre quand on n'a pas la problématique complète. Mais il semble à première vue qu'il manque une table. J'imagine que l'une des tables (nom, prenom, etc...) est une table clients ou fournisseur. Partons sur le principe d'un client :
Ce client habite une région
Ce client achète des produits.
Si tel était le cas (mais je n'ai pas d'autre information), il y aurait (cmin, cmax) :
[Clients]--1,1-----(résider)-----0,n--[Région]
[Clients]--0,n-----(acheter)-----0,n--[Produits]

Cardinalités:

Clients résider: 1,1 = un client réside obligatoirement dans une (1,1) région et une (1,1) seule
résider dans Région: 0,n = une région peut ne pas contenir de client (0,n) mais peur en contenir plusieurs (0,n)

Clients acheter: 0,n = Un client peut ne pas acheter (0,n) ou acheter plusieurs fois (0,n)
acheter Produits: 0,n = Un produit peut ne pas être acheté (0,n) ou être acheté par plusieurs clients (0,n)

Création des tables:

NB les clef primaires sont soulignées, les clefs étrangères en italique)

Relation résider: l'une des cmax est à 1 => relation une-aire, donc migration : la table clients va récupérer l'identifiant de l'autre table comme clef étrangère :
Clients (idclient, nom, prénom, adresse, code postal, téléphone, mail, idrégion)
Régions (idrégion, région)

NB: Bon, on ne va pas ergoter sur le fait qu'à partir du code postal on pourrait déduire la région.

Relation acheter: les deux cmax sont à n => relation n-aire, donc création d'une table de relation (celle qui, à mon avis, manque) et qui contiendra les identifiants des deux tables.
Acheter (idclient,idproduit)
Produits (idproduit, produit, prix_ht, etc...)

NB: Dans la table de relation Acheter, les deux identifiants ensemble formeront la clef primaire de la table qui, en tant que clef primaire, ne pourra apparaître qu'une seule fois. Ce qui veut dire que si le client n° 12 a acheté la brosse à dents n° 18, il ne pourra pas jamais la renouveler (mdrrr) ou alors il faudra qu'il achète un autre modèle (autre référence, autre idproduit). Raison pour la quelle il manque encore un objet pour différencier les identifiants : la date. Si la table Acheter relie trois objets, il faut que les trois objets fournissent à cette table leur identifiant pour former la clef primaire de cette table de relation. On aura donc :
Acheter (idclient, idproduit, date)
Mais, modélisé ainsi, il ne pourra pas acheter deux fois une brosse à dents le même jour, raison pour laquelle on ajoute aussi l'heure et s'il en achète plusieurs, comme la quantité n'est pas spécifique au client ni à l'article mais à l'achat en question, la quantité sera placée dans le relation Acheter, ce qui pourrait donner en tout :

Clients (idclient, nom, prénom, adresse, code postal, téléphone, mail, idrégion)
Régions (idrégion, région)
Produits (idproduit, produit, prix_ht, idfournisseur)
Dates (date-heure)
Acheter (idclient, idproduit, date-heure, quantité, numfacture)

NB: en réalité, la table Dates ne sera pas créée vu quelle ne contient qu'un seul champ dont le contenu est déjà enregistré dans la table Acheter. Elle n'est présente dans le MCD que pour préciser pourquoi le champ date-heure fait partie de l'identifiant de la relation Acheter.

Ça, c'est pour les tables.

Pour ce qui concerne l'enregistrement :

Supposons une telle liste pour les régions :
<select name="region">
<option value="1">Alsace
<option value="2">Bretagne
...
</select>

Si ton formulaire de saisie d'un client contient les champs nom et prénom (pour raccourcir je ne cite pas les autres) et la liste déroulante des régions, ta requête d'insertion du client saisi dans le script de traitement, sera :

$requete = "INSERT INTO Clients (nom,prenom,idregion) VALUES ("
. "'".$_POST["nom"]."','".$_POST["prenom"]."','".$_POST["region"]."');";

NB: je n'ai pas cité tous les champs... (trop long)

Pour l'achat d'un produit : un formulaire avec listes déroulantes : client et produit plus des zones de saisie pour la quantité et la date et heure.


Par ailleurs, je n'ai pas compris "et que le résultat du choix s'affiche automatiquement". Quel choix d'enregistrements fais-tu ? Tu es en train de faire une saisie !!! Comment veux-tu qu'un formulaire affiche ton choix ?

N'ayant pas d'autres informations plus précises sur ton objectif, je ne peux pas t'en dire plus...

Bon courage !
0
Bonjour heliconius,

Merci pour ta réponse qui va me permettre de comprendre un peu mieux cette requête.
En ce qui concerne l'affichage automatique, je me suis mal exprimé dans ma question.
En fait il s'agit d'un coté d'avoir un formulaire client (appelons le prospect)
et dans un autre site une page avec l'affichage d'un résultat qui se fait entre le choix de la liste produits et le choix de la liste region. (c'est un commercial qui fait le choix) et le résultat doit s'afficher en interrogeant la table ou est enregistré le premier formulaire.

Par exemple : le prospect rempli le formulaire
nom, prenom, adresse etc... et fait son choix produit dans la liste déroulante et region dans la liste déroulante région. OK, c'est terminé pour lui.

Dans l'autre site,
Le commercial de la Cie, rentre dans le menu membre du site et il a 2 choix à faire sur les deux listes déroulantes qui sont les mêmes que dans le premier formulaire
Produit et région et dans la même table. Et quand il a fait sont choix.
Tous les prospects qui se sont enregistrés dans le formulaire et qui correspondent au choix que le commercial a fait doivent s'afficher.

Voilà, je pense que mon explication sera un peu plus claire,

Peut-être pourras-tu m'apporter quelques précisions supplémentaires sur la formulation de la requête pour que l'affichage se fasse automatiquement, dès qu'un commercial à besoin de sortir la liste de prospect qui l'intéresse.

Encore merci pour ta patience et ta bienveillance.

Cordialement !

Ritouthai
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
Modifié par heliconius le 6/10/2013 à 16:49
Re-bonjour,

Excuse-moi, mais je ne comprend rien à ton explication.

Tu dis client = prospect ; prospect remplit le formulaire ; donc client remplit le formulaire. Vient ensuite un commercial qui fait un choix. Un choix de quoi ? Pour en faire quoi ? Ensuite, il y a deux sites et apparemment la même base. Pfff.... !

Le meilleur conseil que je puisse donner pour t'aider est de commencer par prendre un traitement de texte, d'oublier l'application à réaliser et de décrire le plus précisément possible avec des phrases contenant des mots et des verbes, la gestion réelle à informatiser, à réaliser. A ce niveau, ce n'est plus de l'informatique mais du Français. Nada le PHP et MySQL, du Français. Einstein disait : "Un problème sans solution est un problème mal posé". Si tu devais développer pour quelqu'un d'autre, tu te rendrais vite compte que la principale difficulté est toujours de faire accoucher clairement avec précision et exhaustivité les idées du demandeur.

Tu parles apparemment de deux sites différents (du moins c'est ce que j'ai compris) avec (apparemment, toujours) la même base de données. C'est évidemment possible mais cela implique plein de choses qui auront une incidence sur la réalisation.

Fais le clair dans ta tête, fais en sorte que la problématique avancée ne puisse donner lieu à aucune ambigüité ou aucune confusion possible.

Ce serait bien si tu disais :
- brièvement de quoi il s'agit, puis
- les définitions si c'était nécessaire,
- quelles sont les données en jeu,
- qui fait quoi,
- qui les saisis et dans quel but,
- à partir de quelle position géographique s'il y a des lieux ou des sites différents,
- parfois dans quelle chronologie,
- etc...

Dis-toi bien que dans ton métier tu utilises un vocabulaire qui n'est pas forcément celui d'une autre personne étrangère à ton activité. Si tu souhaites une réponse, il faut qu'on comprenne ce que tu veux et qu'il n'y ait aucune confusion.

Si tu réalises une application colossale, tu n'as pas à étaler les 157 pages du cahier des charges avant de poser ta question, mais celle-ci doit fournir au moins tous les éléments nécessaires à la compréhension du problème ainsi que ceux qui permettront de te fournir une réponse complète et satisfaisante.

A bientôt.
0
ritouthai Messages postés 5 Date d'inscription jeudi 26 septembre 2013 Statut Membre Dernière intervention 9 octobre 2013
8 oct. 2013 à 02:28
Bonjour Heliconius et merci de me recadrer, c'est vrai que je n'ai pas l'habitude de m'exprimer clairement dans ce genre de démarche.
Je vais essayer :

Voici le projet : décomposé en 2 parties

PREMIERE PARTIE

Un site qui va servir de comparatif et de conseils en assurances diverses et surtout permettre à l'internaute d'avoir une étude gratuite et un devis.
appellons le COMPARATIF ASSURANCES.

Tous les renseignements fournis par l'internaute se feront sur la base d'un formulaire php et devront s'enregistrer dans une base de donnée ou plusieurs ?

le formulaire devra comporter :

NOM
PRENOM,
ADRESSE
CODE POSTAL
VILLE
TEL
EMAIL
DATE

Une première liste déroulante dans lequel il devra choisir un produit :

le titre de la liste : Choisissez le produit qui vous intéresse :

ASSURANCE VIE
ASSURANCE DECES
COMPLEMENTAIRE
SANTE
DEFISCALISATION
PLACEMENTS EPARGNE

Une deuxième liste déroulante dans lequel il devra choisir le département dans lequel il réside.

le titre de la liste : Choisissez votre département

01 Ain
02 Aisne
03 Allier
04 Alpes-de-Haute-Provence

etc... tous les départements français.

Quand l'internaute aura rempli le formulaire et cliqué sur envoyer, toutes les informations devront s'enregistrer dans une table mysql.

DEUXIEME PARTIE

Un site pour le courtier en Assurances qui lui va uniquement afficher les résultats en effectuant une requête sur la même base de donnée que le premier site.

Il comportera :

2 listes déroulantes .


le titre de la liste : Choisissez le produit qui vous intéresse :

ASSURANCE VIE
ASSURANCE DECES
COMPLEMENTAIRE
SANTE
DEFISCALISATION
PLACEMENTS EPARGNE

et la deuxième liste
le titre de la liste : Choisissez votre département

01 Ain
02 Aisne
03 Allier
04 Alpes-de-Haute-Provence

etc... tous les départements français.

et en faisant un choix dans chaque liste, c'est à dire quel produit il peut proposer et dans la deuxième liste quel département il a en charge pour la prospection, en cliquant sur un bouton il déclenchera une requête qui va lui afficher toutes les informations qui correspondent à ces 2 choix et qui ont été enregistrés dans la base par l'internaute qui a rempli le formulaire du premier site.

Il devrait donc se retrouver avec une liste de personnes qui sont intéressées par le produit qu'il a choisi et dans le département qu'il a demandé.

Il aura toutes les infos pour proposer un devis, prendre un rdv par tél, envoyer un email etc.....

J'ai fait de mon mieux, j'espère avoir été assez clair sur le but et sur l'utilisation de cette table mysql.

Voilà si vous pouvez m'expliquer comment cela peut se mettre en place, je me mettrai au code et ferait des essais, mais dans l'immédiat je ne sais pas comment cela peut-il fonctionner et par ou commencer.

Encore merci de votre indulgence et de votre patiente.

Cordialement !
ritouthai

ps: j'ai 63 ans et comme dans la chanson, j'ai la mémoire qui flanche, je me souviens plus très bien. C'est pas facile de comprendre la logique de ces tables quand on en a jamais utilisé.
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
8 oct. 2013 à 13:32
Bonjour Ritouthai,

1) Je ne te recadre pas. Je n'ai pas à recadrer mes semblables. Je leur dis simplement mes difficultés à les comprendre en essayant de leur donner les moyens pour y arriver ;o) C'est tout.

2) Ce n'est pas une question d'âge : j'en ai quelques uns de plus. Mais comme disait Boileau en deux magnifiques alexandrins dans l'Art poétique :
Ce qui se conçoit bien s'énonce clairement,
Et les mots pour le dire arrivent aisément.


Mais bon... trève de bavardage. C'est maintenant beaucoup plus clair.

En fait, il n'y a pas deux sites comme tu le disais, mais un seul et même site, hébergé sur une seule et même machine avec une seule et même base de données mais avec deux parties distinctes :

- une partie visible publique utilisable par tout le monde (cherchant une assurance)
- une partie non visible de gestion réservée aux gestionnaires (les courtiers en assurance)

Et ces gestionnaires exploitent les données laissées par les visiteurs pour faire des propositions adaptées. Est-ce bien ça ?

Si c'est le cas, et si tu as un peu de temps, je te propose quelque chose car ça n'a pas l'air bien compliqué à faire :

- je te fais deux pages (celle du visiteur et celle du gestionnaire) commentées
- création de la base de données

le tout opérationnel sur un site où tu pourras tester.

On arrête de discuter ici. On va maintenant communiquer par mail mais comme nous sommes sur un forum d'entre-aide et que des gens viennent chercher ici des solutions, lorsque le code proposé te conviendra, je viendrai mettre ici la solution que tu auras retenue et tu marqueras ton sujet comme résolu.

Dis-moi ici si tu es d'accord. Je t'enverrai alors un message privé avec mon adresse mail.

A bientôt.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ritouthai Messages postés 5 Date d'inscription jeudi 26 septembre 2013 Statut Membre Dernière intervention 9 octobre 2013
8 oct. 2013 à 15:17
Merci Heliconius, c'est très aimable de ta part,

Je ne veux pas te contredire, mais il y a bien deux sites différents et deux noms de domaines différents, ne serait-ce que par le fait que le design du premier sera différent de l'autre (c'est un site de comparatif d'assurance qui s'adresse à tout le monde) et le deuxième s'adresse uniquement à des professionnels, (design différent aussi) pour le référencement ce sont deux cibles bien différentes avec des mots clés complètement différents et deux noms de domaines.
Il me semble que c'est ce que j'ai écris en français ? 2 sites.
Mais dans la démarche des requêtes je ne pense pas que ce soit bien différent ?

Je suis d'accord pour qu'on communique par email et je signalerai que le problème est résolu comme convenu dès qu'il le sera.

Encore merci, qu'elle patience ....Bravo !

A bientôt !

Amicalement
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
8 oct. 2013 à 16:13
OK. 2 sites.

Alors avant d'aller plus avant j'aurai encore quelques questions à poser :

- Les deux sites distincts sont-ils sur la même machine ?
- Les sites en question sont-ils déjà en place ?
- Le serveur de base de données MySQL est situé sur lequel des deux ?
- Connais-tu la personne qui administre ce serveur MySQL ?

Je pose la question pour la raison suivante :

Personnellement, j'ai un hébergement chez un hébergeur (pas très surprenant) et y ai un serveur dédié qui peut abriter jusqu'à 10 domaines différents (donc avec 10 sites différents possibles). MAIS C'EST LE MEME SERVEUR, LA MEME MACHINE. Ce qui veut dire que le serveur MySQL se trouve aussi sur la même machine et que les 10 sites potentiels peuvent utiliser la même base de données.

Si tes sites sont hébergés sur des machines différentes (hébergeurs différents), il est possible aussi de pouvoir utiliser la même base de données à condition d'en avoir les droits, à condition que l'administrateur du serveur MySQL te donne la possibilité d'y accéder à distance et pas seulement en local.

Donc, soit tu te trouves dans mon cas, les sites concernés et le serveur MySQL sont sur le même serveur : là tout va bien ; soit les sites sont sur des machines différentes et le serveur MySQL sur l'une des deux ou encore sur une troisième et là, il faudra des accès distants.

Je verrai bien la chose de la manière suivante (à confirmer ou infirmer) :

- le site dédié aux internautes chercheurs d'assurance sur une machine M1 avec le serveur MySQL (les internautes alimenteraient la base en local)

- le site dédié aux assureurs sur une autre machine M2. Mais il faut que l'administrateur du serveur MySQL de M1 crée un utilisateur MySQL avec login, mot de passe et droit d'accès distant pour une base donnée. Les scripts d'interrogation utilisés par les assureurs devront avoir les informations suivantes :

SERVER: nom FQDN ou n° IP du serveur MySQL
BASE: nom de la base de données gérée par le serveur sur M1
USER: nom d'utilisateur MySQL ayant des droits d'accès distant
PASSWORD: mot de passe de l'utilisateur MySQL

A titre d'info, l'administrateur MySQL M1 peut accorder des droits de cette manière :

GRANT ALL PRIVILEGES ON base.* TO 'toto'@'localhost' IDENTIFIED BY '12345';
GRANT ALL PRIVILEGES ON base.* TO 'toto'@'192.168.0.5' IDENTIFIED BY '12345';
GRANT ALL PRIVILEGES ON base.* TO 'toto'@'%' IDENTIFIED BY '12345';
GRANT ALL PRIVILEGES ON base.* TO 'toto' IDENTIFIED BY '12345';

12345 = mot de passe

Cas 1 : toto ne peut accéder à sa base qu'en local (sur M1)
Cas 2 : toto ne peut accéder à sa base qu'à partir de la machine 195.168.0.5
Cas 3 et 4 : toto peut accéder à sa base à partir de n'importe quelle machine

Tu comprends donc l'importance de savoir où sont situés les serveurs web et le serveur MySQL !

J'attends ta réponse.
0
ritouthai Messages postés 5 Date d'inscription jeudi 26 septembre 2013 Statut Membre Dernière intervention 9 octobre 2013
9 oct. 2013 à 04:13
Bonjour Heliconius,

Les deux sites ne sont pas créés pour l'instant, il s'agit d'un projet, avant de me lancer je voudrai surtout comprendre comment utiliser la base mysql.
Il y a un gros travail à faire sur la présentation et le design

Les deux noms de domaine n'existent pas encore. Je suis en train de faire des recherches sur les mots clés intéressants à utiliser.

Les deux sites seront sur le même hébergement (hebergement multi domaines)
ainsi que les bases mysql. (je suis dans le même cas que toi)

Est-il possible d'étudier le cas dans un premier temps sans installer les sites, je n'ai pas le temps de les réaliser en ce moment, mais par contre si j'arrive à comprendre comment faire pour les bases, je les installerai par la suite et surtout je pourrai m'engager sur ce projet et l'amener au bout.

Merci,
Je te souhaite une bonne journée !
0
heliconius Messages postés 545 Date d'inscription mardi 1 juillet 2008 Statut Membre Dernière intervention 23 juin 2023 137
Modifié par heliconius le 9/10/2013 à 14:56
Attention : Message long.

Bonjour,

Ci-dessous quatre fichiers :
scripts.sql : script de création de la base de données
init.php : Pour se connecter à la base de données
prospects.php : formulaire de saisie pour le prospect
recherche.php : pour effectuer les recherches demandées

Attention : Aucun test n'est effectué sur les saisies. Inutile de rallonger et noyer le principe dans des lignes de vérification.

scripts.sql

SERVER: localhost ou IP selon le cas
USER: xxxxxxxx
PASSWD: yyyyyyyy
BASE: zzzzzzzz

# -------------------------------------------------------------------

drop table if exists ass_Prospects;
create table ass_Prospects (
idcli integer not null auto_increment,
nom varchar(20) not null default '',
prenom varchar(25) not null default '',
adresse varchar(50) not null default '',
cpostal varchar(5) not null default '',
ville varchar(30) not null default '',
tel varchar(15) not null default '',
email varchar(50) not null default '',
idate datetime not null default '0000-00-00',
idprod integer not null default 0,
primary key(idcli)
) engine=MyISAM comment='Table des prospects';

# -------------------------------------------------------------------

drop table if exists ass_Produits;
create table ass_Produits (
idprod integer not null auto_increment,
produit varchar(20) not null default '',
primary key(idprod)
) engine=MyISAM comment='Table des produits';

insert into ass_Produits values ('1', 'Assurance vie');
insert into ass_Produits values ('2', 'Assurance décès');
insert into ass_Produits values ('3', 'Complémentaire');
insert into ass_Produits values ('4', 'Défiscalisation');
insert into ass_Produits values ('5', 'Placements épargne');
insert into ass_Produits values ('6', 'Santé');

# -------------------------------------------------------------------

drop table if not exists ass_Departements;
create table ass_Departements (
iddep varchar(3) not null,
departement varchar(35) not null,
primary key (iddep)
) engine=MyISAM comment='Table des départements';

insert into ass_Departements values ('01', 'Ain');
insert into ass_Departements values ('02', 'Aisne');
insert into ass_Departements values ('03', 'Allier');
insert into ass_Departements values ('04', 'Alpes de Haute Provence');
insert into ass_Departements values ('05', 'Hautes Alpes');
insert into ass_Departements values ('06', 'Alpes Maritimes');
insert into ass_Departements values ('07', 'Ardèche');
insert into ass_Departements values ('08', 'Ardennes');
insert into ass_Departements values ('09', 'Ariège');
insert into ass_Departements values ('10', 'Aube');
insert into ass_Departements values ('11', 'Aude');
insert into ass_Departements values ('12', 'Aveyron');
insert into ass_Departements values ('13', 'Bouches du Rhône');
insert into ass_Departements values ('14', 'Calvados');
insert into ass_Departements values ('15', 'Cantal');
insert into ass_Departements values ('16', 'Charente');
insert into ass_Departements values ('17', 'Charente Maritime');
insert into ass_Departements values ('18', 'Cher');
insert into ass_Departements values ('19', 'Corrèze');
insert into ass_Departements values ('21', 'Côte d''Or');
insert into ass_Departements values ('22', 'Côtes d''Armor');
insert into ass_Departements values ('23', 'Creuse');
insert into ass_Departements values ('24', 'Dordogne');
insert into ass_Departements values ('25', 'Doubs');
insert into ass_Departements values ('26', 'Drôme');
insert into ass_Departements values ('27', 'Eure');
insert into ass_Departements values ('28', 'Eure et Loire');
insert into ass_Departements values ('29', 'Finistère');
insert into ass_Departements values ('2A', 'Corse Sud');
insert into ass_Departements values ('2B', 'Haute Corse');
insert into ass_Departements values ('30', 'Gard');
insert into ass_Departements values ('31', 'Haute Garonne');
insert into ass_Departements values ('32', 'Gers');
insert into ass_Departements values ('33', 'Gironde');
insert into ass_Departements values ('34', 'Hérault');
insert into ass_Departements values ('35', 'Ile et Vilaine');
insert into ass_Departements values ('36', 'Indre');
insert into ass_Departements values ('37', 'Indre et Loire');
insert into ass_Departements values ('38', 'Isère');
insert into ass_Departements values ('39', 'Jura');
insert into ass_Departements values ('40', 'Landes');
insert into ass_Departements values ('41', 'Loir et Cher');
insert into ass_Departements values ('42', 'Loire');
insert into ass_Departements values ('43', 'Haute Loire');
insert into ass_Departements values ('44', 'Loire Atlantique');
insert into ass_Departements values ('45', 'Loiret');
insert into ass_Departements values ('46', 'Lot');
insert into ass_Departements values ('47', 'Lot et Garonne');
insert into ass_Departements values ('48', 'Lozère');
insert into ass_Departements values ('49', 'Maine et Loire');
insert into ass_Departements values ('50', 'Manche');
insert into ass_Departements values ('51', 'Marne');
insert into ass_Departements values ('52', 'Haute Marne');
insert into ass_Departements values ('53', 'Mayenne');
insert into ass_Departements values ('54', 'Meurthe et Moselle');
insert into ass_Departements values ('55', 'Meuse');
insert into ass_Departements values ('56', 'Morbihan');
insert into ass_Departements values ('57', 'Moselle');
insert into ass_Departements values ('58', 'Nièvre');
insert into ass_Departements values ('59', 'Nord');
insert into ass_Departements values ('60', 'Oise');
insert into ass_Departements values ('61', 'Orne');
insert into ass_Departements values ('62', 'Pas de Calais');
insert into ass_Departements values ('63', 'Puy de Dôme');
insert into ass_Departements values ('64', 'Pyrénées Atlantiques');
insert into ass_Departements values ('65', 'Hautes Pyrénées');
insert into ass_Departements values ('66', 'Pyrénées Orientales');
insert into ass_Departements values ('67', 'Bas Rhin');
insert into ass_Departements values ('68', 'Haut Rhin');
insert into ass_Departements values ('69', 'Rhône');
insert into ass_Departements values ('70', 'Haute Saône');
insert into ass_Departements values ('71', 'Saône et Loire');
insert into ass_Departements values ('72', 'Sarthe');
insert into ass_Departements values ('73', 'Savoie');
insert into ass_Departements values ('74', 'Haute Savoie');
insert into ass_Departements values ('75', 'Ville de Paris');
insert into ass_Departements values ('76', 'Seine Maritime');
insert into ass_Departements values ('77', 'Seine et Marne');
insert into ass_Departements values ('78', 'Yvelines');
insert into ass_Departements values ('79', 'Deux-Sèvres');
insert into ass_Departements values ('80', 'Somme');
insert into ass_Departements values ('81', 'Tarn');
insert into ass_Departements values ('82', 'Tarn et Garonne');
insert into ass_Departements values ('83', 'Var');
insert into ass_Departements values ('84', 'Vaucluse');
insert into ass_Departements values ('85', 'Vendée');
insert into ass_Departements values ('86', 'Vienne');
insert into ass_Departements values ('87', 'Haute Vienne');
insert into ass_Departements values ('88', 'Vosges');
insert into ass_Departements values ('89', 'Yonne');
insert into ass_Departements values ('90', 'Territoire de Belfort');
insert into ass_Departements values ('91', 'Essonne');
insert into ass_Departements values ('92', 'Hauts de Seine');
insert into ass_Departements values ('93', 'Seine Saint-Denis');
insert into ass_Departements values ('94', 'Val de Marne');
insert into ass_Departements values ('95', 'Val d''Oise');
insert into ass_Departements values ('971', 'Guadeloupe');
insert into ass_Departements values ('972', 'Martinique');
insert into ass_Departements values ('973', 'Guyane');
insert into ass_Departements values ('974', 'La Réunion');
insert into ass_Departements values ('975', 'St Pierre et Miquelon');
insert into ass_Departements values ('976', 'Mayotte');
insert into ass_Departements values ('977', 'Saint-Barthélémy');
insert into ass_Departements values ('978', 'Saint-Martin');
insert into ass_Departements values ('984', 'Terres Australes et Antarctiques');
insert into ass_Departements values ('986', 'Wallis et Futuna');
insert into ass_Departements values ('987', 'Polynésie Française');
insert into ass_Departements values ('988', 'Nouvelle Calédonie');
insert into ass_Departements values ('989', 'Ile de Clipperton');

# -------------------------------------------------------------------

init.php

<?
/*
** Script de connexion à un serveur MySQL
** 1) Connexion au serveur sinon, message d'erreur
** 2) Sélection de la base de données, sinon message d'erreur
** 3) La fonction 'ExecRequete()' renvoie le résultat d'une réquête ou un message d'erreur
** ExecRequete() demande deux arguments: la requête elle-même et l'identificateur de connexion
*/

define(SERVER, "localhost"); // Serveur MySQL : localhost ou IP ou nom FQDN
define(NOM, "xxxxxxx"); // Nom de l'utilisateur MySQL
define(PASS, "yyyyyyy"); // Son password
define(BASE, "zzzzzzz"); // Nom de la base de données

// Affiche un éventuel message d'erreur et quitte
function showError($error) {
global $cnx;
if($error == 1) { echo "Serveur inaccessible!"; }
if($error == 2) { echo "Base inaccessible!"; }
if($error == 3) { echo "Erreur dans la requête!<br>".mysql_error($cnx); }
exit;
}

// Exécute une requête et retourne son résultat ou un message d'erreur
function ExecRequete($requete,$cnx) {
$resultat = mysql_query($requete,$cnx);
if($resultat) { return $resultat; } else { showError(3); }
}

// Effectuer la connexion au serveur, puis sélection de la base de données
if(!@$cnx = mysql_pconnect(SERVER,NOM,PASS)) { showError(1); }
if(!@$ok = mysql_select_db(BASE,$cnx)) { showError(2); }
?>

prospects.php

<?php
// Fichier d'initialisation
// Infos et connexion à la base de données
require("init.php");

// Variables diverses
$today = date("d/m/Y"); // Date du jour (formulaire
$msg = " "; // Initialiser le message de compte rendu

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Convertir une date au format fr en format MySQL
// JJ/MM/AAAA => AAAA-MM-JJ
function dsql($date) {
$tab = explode("/",$date);
return $tab[2].'-'.$tab[1].'-'.$tab[0];
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Construit et écrit la liste déroulante des produits
function LDproduits() {
global $cnx; // identifiant de connexion
$list = "<select name='idprod'>"
. "<option value='null'>-- Choisir produit --";
$requete = "select * from ass_Produits order by produit;";
$resultat = ExecRequete($requete, $cnx);
while($r=mysql_fetch_object($resultat)) {
$list .= "<option value='$r->idprod'>$r->produit";
}
echo $list."</select>\n";
}
?>
<html>
<head>
<title>Formulaire prospect</title>
<meta charset="ISO-8859-1">
<style type="text/css">
body, td { font-family:arial; font-size:10pt } /* corps de page, cellules */
#cr { font-weight:bold; color:red } /* cr = compte rendu */
#rq { font-weight:bold; color:blue } /* requete */
#nota { width:500px; border:1px solid red; background-color:#FFFF90; padding:6px} /* info */
h1 { font-family:'times new roman'; font-size:22pt; font-weight:bold; font-style:italic; color:#000080 } /* titre */
.libel { text-align:right } /* cellule libellé */
.data { text-align:left } /* cellule input */
</style>
</head>

<body onload="javascript:document.client.nom.focus()">
<?php
if($_POST["submit"]) {
$requete = "INSERT INTO ass_Prospects (nom,prenom,adresse,cpostal,ville,tel,email,idate,idprod) VALUES ("
. "'" . $_POST["nom"] . "',"
. "'" . $_POST["prenom"] . "',"
. "'" . $_POST["adresse"] . "',"
. "'" . $_POST["cpostal"] . "',"
. "'" . $_POST["ville"] . "',"
. "'" . $_POST["tel"] . "',"
. "'" . $_POST["email"] . "',"
. "'" . dsql($_POST["date"]). "',"
. "'" . $_POST["idprod"] . "');";
$resultat = ExecRequete($requete, $cnx);
if($resultat) {
$msg = "Coordonnées enregistrées. Nous vous contacterons très prochainement"; }
else {
$msg = "Erreur inconnue lors de l'enregistrement. Veuillez recommencer";
}
}
?><div id="cr"><?php echo $msg; ?></div>
<form name="client" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">

<h1>Vos coordonnées</h1>

<table>
<tr>
<td class="libel">Date</td>
<td class="data"><input type="text" name="date" size="10" value="<?php echo $today; ?>"></td>
</tr><tr>
<td class="libel">Nom</td>
<td class="data"><input type="text" name="nom" size="20"></td>
</tr><tr>
<td class="libel">Prénom</td>
<td class="data"><input type="text" name="prenom" size="25"></td>
</tr><tr>
<td class="libel">Adresse</td>
<td class="data"><input type="text" name="adresse" size="40"></td>
</tr><tr>
<td class="libel">Code Postal</td>
<td class="data"><input type="text" name="cpostal" size="5"></td>
</tr><tr>
<td class="libel">Ville</td>
<td class="data"><input type="text" name="ville" size="25"></td>
</tr><tr>
<td class="libel">Tél</td>
<td class="data"><input type="text" name="tel" size="12"></td>
</tr><tr>
<td class="libel">Email</td>
<td class="data"><input type="text" name="email" size="40"></td>
</tr><tr>
<td class="libel">Intéressé par</td>
<td class="data"><?php LDproduits(); ?></td>
</tr>
</table>
<input type="submit" name="submit" value="Valider">

<div id="nota">
Ceci est juste une démo. Il ne sera effectué aucun test sur la saisie (majuscules, minuscules, présence, caractères incorrects). La date est au format JJ/MM/AAAA.<br/>Le département de résidence n'est pas demandé, il sera déduit du code postal.
</div>

<hr>
<?php
// Code PHP à supprimer : Juste pour la démo
echo "<div id='rq'>$requete</div>";
?>
<input type="button" value="Retour" onclick="window.location='index.php';">
</form>

</body>
</html>

recherche.php

<?php
// Fichier d'initialisation
// Infos et connexion à la base de données
require("init.php");

// Variables diverses
$msg = " "; // message de compte rendu. Vide au début.

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Convertir une date au format MySQL en format fr
// AAAA-MM-JJ => JJ/MM/AAAA
function dweb($date) {
$tab = explode("-",$date);
return $tab[2].'/'.$tab[1].'/'.$tab[0];
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Construit et écrit la liste déroulante des produits
function LDproduits() {
global $cnx; // identifiant de connexion
$list = "<select name='idprod'>"
. "<option value='tous'>--- Tous produits ---";
$requete = "SELECT * FROM ass_Produits ORDER BY produit;";
$resultat = ExecRequete($requete, $cnx);
while($r=mysql_fetch_object($resultat)) {
$list .= "<option value='$r->idprod'>$r->produit";
}
echo $list."</select>";
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Construit et écrit la liste déroulante des départements
function LDdeps() {
global $cnx; // identifiant de connexion
$list = "<select name='iddep'>"
. "<option value='tous'>--- Tous départements ---";
$requete = "SELECT * FROM ass_Departements ORDER BY departement;";
$resultat = ExecRequete($requete, $cnx);
while($r=mysql_fetch_object($resultat)) {
$list .= "<option value='$r->iddep'>$r->departement";
}
echo $list."</select>";
}
?>
<html>
<head>
<title>Formulaire recherche</title>
<meta charset="ISO-8859-1">
<style type="text/css">
body, td { font-family:arial; font-size:10pt } /* corps, cellules */
#nota { width:500px; border:1px solid red; background-color:#FFFF90; padding:6px} /* nota */
#rq { font-weight:bold; color:blue } /* requete */
#cr1 { font-weight:bold;} /* cr = compte-rendu */
h1 { font-family:'times new roman'; font-size:22pt; font-weight:bold; font-style:italic; color:#000080 } /* titre */
.cr2 { color:red } /* cr = compte-rendu */
.libel { text-align:right } /* cellule libellé */
.data { text-align:left } /* cellule input */
.client { margin-bottom:6px } /* tout le client */
.nom { text-decoration:underline } /* nom du client */
.info { margin-left:25px } /* détail sur client */
</style>
</head>

<body>
<?php
if($_POST["submit"]) {

// ----- $cprod = critère produit
if($_POST["idprod"] == 'tous') { $cprod = ""; } // Pas de produit choisi. Donc tous
else { $cprod = "ass_Prospects.idprod='".$_POST["idprod"]."'"; }
// Chercher nom du produit
if($cprod) {
$rqpro = "SELECT * FROM ass_Produits WHERE idprod='".$_POST["idprod"]."';";
$respro = ExecRequete($rqpro,$cnx);
if(mysql_num_rows($respro)>0) { $rp=mysql_fetch_object($respro); }
$msg = "<span class='cr2'>$rp->produit</span>"; }
else {
$msg = "Tous produits";
}

// ----- $cdep = critère département
if($_POST["iddep"]=='tous') { $cdep = ""; } // Pas de dépt choisi. Donc tous
else { $cdep = "ass_Prospects.cpostal LIKE '".$_POST["iddep"]."%'"; }
// Chercher nom du département
if($cdep) {
$rqdep = "SELECT * FROM ass_Departements WHERE iddep='".$_POST["iddep"]."';";
$resdep = ExecRequete($rqdep,$cnx);
if(mysql_num_rows($resdep)>0) { $rd=mysql_fetch_object($resdep); }
$msg .= " - <span class='cr2'>$rd->departement</span>"; }
else {
$msg .= " - Tous départements";
}

// ----- Construction critère
$criteres = "";
if ($cdep) { $criteres = "$cdep"; }
if($cprod) {
if($criteres) { $criteres = "$criteres AND $cprod"; }
else { $criteres = "$cprod"; }
}

// ----- Construction requete
$requete = "SELECT ass_Prospects.* FROM ass_Prospects WHERE $criteres ORDER BY nom,prenom;";
// Si tous produits demandés, aller récupérer aussi le nom du produit
// pour distinguer l'intérêt des clients sinon, c'est inutile
if(!$cdep && !$cprod) {
$requete = "SELECT ass_Prospects.*,produit "
. "FROM ass_Prospects, ass_Produits "
. "WHERE ass_Prospects.idprod=ass_Produits.idprod "
. "ORDER BY nom,prenom;";
}
if(!$cprod && $cdep) {
$requete = "SELECT ass_Prospects.*,produit "
. "FROM ass_Prospects, ass_Produits "
. "WHERE ass_Prospects.idprod=ass_Produits.idprod "
. "AND $criteres "
. "ORDER BY nom,prenom;";
}
}
?><div id="cr1"><?php echo $msg; ?></div>
<form name="client" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">

<h1>Recherche</h1>

<table>
<tr>
<td class="libel">Critères</td>
<td class="data">
<?php LDproduits(); LDdeps(); ?>
<input type="submit" name="submit" value="Valider">
</td>
</tr>
</table>

<hr>
<?php
if($_POST["submit"]) {
$nbp = 0; // nombre de prospects
echo "<div id='rq'>$requete</div>";
echo "<hr size='1' noshade>";
$resultat = ExecRequete($requete,$cnx);
if(mysql_num_rows($resultat)>0) {
while($r=mysql_fetch_object($resultat)) {
if($r->produit) { $produit = " : $r->produit"; } else { $produit = "";}
echo "<div class='client'>";
echo "<div class='nom'>$r->nom $r->prenom$produit</div>";
echo "<div class='info'>$r->adresse $r->cpostal $r->ville</div>";
echo "<div class='info'>$r->tel $r->email</div>";
echo "</div>"; $nbp++;
}
echo "<hr size='1' width='200' align='left' noshade>";
echo "$nbp prospects trouvé(s)";
}
else {
echo "Pas de client trouvé avec ces critères.";
}
}
?>
<hr>

<input type="button" value="Retour" onclick="window.location='index.php';">
</form>

</body>
</html>

Merci de marquer cette question comme résolue si c'est le cas.
0