PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 09-08-2020 15:14:17

rickways
Membre
Inscription : 30-08-2009
Messages : 38

Aide à la réflexion sur une requête php mysql

Bonjour à tous,

dans le cadre de la crise sanitaire, j'essaie de mettre en place un planning de réservations pour les adhérents (club de badminton), afin que chacun puisse venir jouer.

J'ai fait un petit site avec un espace membre.

J'ai donc au total 3 tables dans ma base de données :

- table MEMBRE : idmembre, pseudo

- table RESERVDATE : iddate, date, date2, nbjoueurs  (le champs date affiche la date aaaa-mm-jj, le champs date2 en texte : Lundi 17 août 2020)

- table RESERVATIONS : idreserv, iddate, idmembre (où iddate est le même que dans la table RESERVDATE, et idmembre est le même que dans la table MEMBRE)

CAS CONCRET :

Les dates ne peuvent accueillir que le nombre de joueurs prévu dans la table RESERVDATE (soit 15 joueurs par exemple) (impossibilité de s'inscrire si le nombre max est atteint)

Un joueur ne peut réserver qu'une seule date (jusqu'à ce que cette date soit passée) (exemple, il peut s'inscrire pour le Lundi 17 août 2020, mais ne pourra se réinscrire à une autre date qu'à partir du 18 août)

Un joueur doit pouvoir annuler son inscription.

AFFICHAGE CONCRET

(cas 1 : le membre ne s'est pas encore inscrit)

Lundi 17 aôut 2020 (Inscrits : 1/15) -  M'INSCRIRE
Mercredi 19 aôut 2020 (Inscrits : 15/15) - COMPLET
Lundi 24 aôut 2020 (Inscrits : 1/15) -  M'INSCRIRE
Mercredi 26 aôut 2020 (Inscrits : 1/15) -  M'INSCRIRE
Lundi 31 aôut 2020 (Inscrits : 1/15) -  M'INSCRIRE
Mercredi 2 septembre 2020 (Inscrits : 1/15) -  M'INSCRIRE


(cas 2 : le membre est inscrit à une date)

Lundi 17 aôut 2020 (Inscrits : 1/15)
Mercredi 19 aôut 2020 (Inscrits : 15/15) - COMPLET
Lundi 24 aôut 2020 (Inscrits : 1/15)
Mercredi 26 aôut 2020 (Inscrits : 1/15)
Lundi 31 aôut 2020 (Inscrits : 1/15) -  INSCRIT : Annuler mon inscription
Mercredi 2 septembre 2020 (Inscrits : 1/15)



Techniquement je sais afficher la liste des dates avec la requete :

$datedujour=date("Y-m-d");
    $req='SELECT * FROM reservdate WHERE date > "'.$datedujour.'" LIMIT 6';
    $result=mysqli_query($bdd,$req) or die ('requete impossible');
    while($list= mysqli_fetch_array($result,MYSQLI_BOTH))
 

mais après je ne sais pas quelles jointures faire, il y a trop de conditions, je n'arrive pas à organiser la logique....

Merci d'avance pour votre aide.
Eric

Hors ligne

#2 06-09-2020 17:28:18

Jc
Membre
Lieu : Zillisheim - Alsace
Inscription : 15-04-2010
Messages : 1 629
Site Web

Re : Aide à la réflexion sur une requête php mysql

Bonjour,

Je pense que votre modèle de données est à revoir.
Dans ce que vous cherchez à faire, par exemple, votre table RESERVDATE ne devrait comporter que deux colonnes reserv_date DATE , max_resa TINYINT avec la clé primaire sur le tuple {reserv_date, max_resa} (rappel : la PK est de type clustered index par défaut sur SQL Server)
Ensuite, afin d'éviter l'utilisation de triggers dans votre base, il faut décomposer la démarche d'inscription en deux étapes, et passer par une procédure stockée pour contrôler et valider la validité de chaque inscription.
Pourquoi en deux étapes ?
Tout simplement pour afficher pour le joueur connecté, ses possibilités d'inscriptions. En fonction du choix fait au sein de cette liste par le joueur, on valide l'inscription (avec recontrôle idéalement au niveau de la procédure stockée).

Voilà pour la démarche.
Sinon, évitez les SELECT *, et les champs sont dans la nature, dans les Bases de données ce sont des colonnes.

Bon dimanche.

Dernière modification par Jc (06-09-2020 17:29:08)


POO PHP+Ajax en MVC avec PDO et Bases de données épaisses  : What else?

Hors ligne

#3 02-12-2020 21:18:25

PETER23
Membre
Inscription : 17-01-2017
Messages : 2

Re : Aide à la réflexion sur une requête php mysql

Jc a écrit :

Bonjour,

Je pense que votre modèle de données est à revoir.
Dans ce que vous cherchez à faire, par exemple, votre table RESERVDATE ne devrait comporter que deux colonnes reserv_date DATE , max_resa TINYINT avec la clé primaire sur le tuple {reserv_date, max_resa} (rappel : la PK est de type clustered index par défaut sur SQL Server)
Ensuite, afin d'éviter l'utilisation de triggers dans votre base, il faut décomposer la démarche d'inscription en deux étapes https://equipement-solaire.fr/kit-solai … omplet/kit solaire autonome complet, et passer par une procédure stockée pour contrôler et valider la validité de chaque inscription.
Pourquoi en deux étapes ?
Tout simplement pour afficher pour le joueur connecté, ses possibilités d'inscriptions. En fonction du choix fait au sein de cette liste par le joueur, on valide l'inscription (avec recontrôle idéalement au niveau de la procédure stockée).

Voilà pour la démarche.
Sinon, évitez les SELECT *, et les champs sont dans la nature, dans les Bases de données ce sont des colonnes.

Bon dimanche.


En lisant votre post je le trouve très explicite, Mais, Moi je suis totalement bloqué sur les validité des inscriptions, et je n'ai même pas des messages d'erreur, avez vous une solution ?

Hors ligne

Pied de page des forums