Inscription manifestation+MySQL

Eléphanteau du PHP | 28 Messages

21 mai 2008, 15:30

Bonjour,
Je dois créer pour un site Web un formulaire d'inscription pour diverses manifestations (tournois, soirée).

Mon formulaire ressemble a ça :

Manifestation : "liste déroulante proposant les manifestations"
Nom: "champ texte"
Prénom : "champ texte"
Mail : "adresse mail"

J'ai créer une base de donnée sous MySQL qui ressemble a ceci :

Table Manifestation

NumManifestation(ID)
Nom
Date
NombreParticipant


Table Participant

NumParticipant (ID)
Nom
Prénom
E-mail

J'aurai voulu qu'un utilisateur puisse s'inscrire a plusieurs manifestations et évidemment une manifestation peut accueillir plusieurs utilisateurs.
Hors dans mon cas j'ai une relation plusieurs à plusieurs.

Y aurai t'il une façon plus clair de faire les tables?
Quelle serait les relations entre les deux tables?

Merci d'avance d'apporter vos idées.

Mammouth du PHP | 1353 Messages

21 mai 2008, 16:20

Bonjour,

je pense que le plus simple c'est de faire une 3ème table qui contient les ID membres et les ID manifestations (avec clé primaire sur le groupe des deux valeurs, car un utilisateur ne peut pas s'inscrire 2 fois à la même manifestation je suppose...). Comme ca tu as une ligne par participant à une manifestation donnée et tu peux les récupérer facilement avec les id de l'un ou de l'autre...

Enfin voila c'est mon avis ;)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 28 Messages

21 mai 2008, 16:41

Merci pour l'information.

Maintenant j'ai un autre dylemme.

J'aimerai rajouter un bouton radio à la fin du questionnaire comme ceci

Manifestation : "liste déroulante proposant les manifestations"
Nom: "champ texte"
Prénom : "champ texte"
Mail : "adresse mail"
Désirez vou recevoir les prochaines info de manifestation, oui "bouton radio", non "bouton radio"

Si l'utilisateur répond oui, j'aimerai pouvoir stocker ses informations dans une table. Puis a chaque fois qu'une nouvelle manifestation se présente, j'aimerai pouvoir faire un mailing à chacune des personnes qui aurait répondu oui.

De plus, j'ai également un système de réservation de table, et qu'à la fin du formulaire, je pose également la question "souhaitez vous recevoir par mail les prochaine etc..." et là encore j'aimerai pouvoir afficher le mail dans une table.

Mon idée était de créer une table Mailing, qui récupérerai le nom, prénom et email, le seul problème c'est que par la suite j'aurai de la redondance dans trois tables. Aurait-tu une autre solution

D'avance merci de ton aide.

Mammouth du PHP | 1353 Messages

21 mai 2008, 17:09

Pourquoi ne pas ajouter dans ta table Participant un champ "Newsletter" qui contient 0 si l'utilisateur n'est pas abonné et 1 si il l'est par exemple.
Ainsi au moment d'envoyer ta newsletter tu fais un

Code : Tout sélectionner

SELECT email FROM participant WHERE Newsletter=1
(par exemple)

Sinon si c'est parce que les gens peuvent s'inscrire à la newsletter sans avoir de compte, alors je te conseille une table avec des emails et ce même principe de champs à 0 ou 1 et quand un utilisateur s inscrit tu regardes si son email existe deja dans la table, si c est le cas tu fais juste un update (de 0 à 1 pour newsletter par exemple) et sinon tu ajoutes une nouvelle entrée...

Je pense que tu peux aussi appliquer ce principe pour les infos sur les reservations mais je suis pas sur d'avoir compris ce que tu voulais dire :)
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Eléphanteau du PHP | 28 Messages

21 mai 2008, 17:18

Ok, je vais essayer de te résumer plus clairement, c'est vrai que des fois je m'emmele en peu.

Voici les tables

Table Réservation

NumReservation : "clé primaire"
NumTable : "clé primaire"
date : "clé primaire"
NumPers "clé secondaire"
Heure
NombrePersonne

Table Personne

NumPers : "clé primaire"
NomPers
Prénom
Téléphone
Email

Table Emplacement

NumTable : "clé primaire"
NombrePlace

Voici les trois tables pour la réservation, maintenant les trois tables pour les inscription a diverses manifestations dont voici les tables.

Table Manifestation

NumeroManifestation : "clé primaire"
Nom
Date

Table Participation

NuméroParticipant : "clé primaire"
NuméroManifestation : "clé primaire"

Table Participant

NuméroParticipant : "clé primaire"
Prénom
Email

Ce qui me fait une base de donnée avec deux fois trois tables liées.
Maintenant ma question :
A la fin des formulaires, que cela soit pour la réservation d'une table ou pour l'inscription a un tournoi, il y a un bouton radio avec le texte suivant

Souhaitez-vous être informé des prochains événement par mail

Si la personne répond non, ben rien ne se passe, si elle répond oui, j'aurai voulu stocker son adresse mail dans une table afin de pouvoir envoyer un mailing a chacune des personne présente dans cette table.

Comment faire? ca serait de créer une table News avec les e-mail, le seul problème, c'est qu'il y aurait passablement de redondance et que je ne serai pas quoi utiliser comme clé primaire et comme champ.

Aurais-tu une idée, d'avance merci

Mammouth du PHP | 1353 Messages

22 mai 2008, 12:23

Est ce que seuls les utilisateurs inscrits (donc existant dans ta base) ont le droit de souscrire a ces newsletter ou est-ce ouvert a tout le monde ?

Ensuite pour revenir au sujet initial dans la table participation attention : a l heure actuelle tu as une clé primaire sur chaque valeur donc tu ne pourras pas avoir qu'un seul participant par manifestation et je ne pense pas que ca soit le but. L'idée pour moi était de mettre UNE clé primaire sur LE COUPLE de valeur. Exemple : ID_Participant : 5 ID_Manifestation : 4 . 5 et 4 ne sont pas des clés primaires mais 54 est une clé primaire dans ta table.
Tell me and I forget. Teach me and I remember. Involve me and I learn.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

22 mai 2008, 12:36

pour info, ce sujet à un lien avec le suivant : http://www.phpfrance.com/forums/voir_sujet-240488.php
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer