Page 1 sur 1

Calendier et date

Posté : 15 avr. 2015, 14:13
par Anthony88
Bonjour à tous,

Voila mon projet je suis en train de créer un site de réservation en ligne. je peux ajouter comme le client une plage de date sur le calendrier. Voici la Base de donnée avec un exemple :
id - Title - datedebut - datefin - statut
1 - Indisponible - 2015-08-16 - 2015-08-20 - 0

Mon problème est simple si je veux ajouter un nouvel exemple mais que la date chevauche la date déjà enregistré il y a confusion.
Pour que ce soit simple : Si le client se trompe et ajoute :
2 - demande - 2015-08-19 - 2015-08-22 - 4
il y a un problème car c'est indisponible.
Donc ma question est simple comment faire pour réaliser cette vérification ?
j'ai bien sur les variables de date sous forme

Code : Tout sélectionner

$BDDdateD = $bdd->datedebut; $BDDdateF = $bdd->datefin]; $dateD = $_POST['datedebut']; $dateF = $_POST['datefin'];
Merci d'avance à tous

Re: Calendier et date

Posté : 15 avr. 2015, 15:49
par Ryle
Bonjour,

Il faudrait que tu fasses cette vérification en SQL. Elle ne concerne pas seulement le premier enregistrement qui a été ajouté, mais tous les enregistrements présents dans ta table.

En effet, la date saisie par l'utilisateur ne doit chevaucher aucune des dates "indisponibles" ni aucune des dates réservées par d'autres utilisateurs.

Pour cela, le plus simple est de vérifier s'il existe des enregistrements en base pour lesquels :
- la date de début saisie par l'utilisateur est comprise entre la date de début ET la date de fin de chaque enregistrement
OU
- la date de fin saisie par l'utilisateur est comprise entre la date de début ET la date de fin de chaque enregistrement

Si cette requête te retourne au moins un résultat, c'est qu'il y a un conflit :)

Re: Calendier et date

Posté : 15 avr. 2015, 15:54
par Saian
Salut, il faut que tu t'assures que la dateD n'est pas compris entre BDDdateD et BDDdateF et pareil pour dateF.
Pour cela tu peux utiliser les opérateurs de compraison >, <, >= et <=.
http://php.net/manual/fr/language.opera ... arison.php

Si l'une ou l'autre des 2 conditions n'est pas vérifiée alors tu peux retourner un message d'erreur.

Il faudrait, à priori, que tu t'assures de la même manière que la plage en base de donnée n'est pas comprise dans la plage soumise via le formulaire (ou à cheval).

EDIT : je suis d'accord avec Ryle quand il dit qu'il faudrait faire ça via une requête SQL.

Re: Calendier et date

Posté : 15 avr. 2015, 15:56
par Anthony88
Merci à tous je vais me pencher la dessus :)

Re: Calendier et date

Posté : 16 avr. 2015, 11:49
par Anthony88
Voila mon test il marche je crois que je n'ai pas oublié grand chose :

Code : Tout sélectionner

$query = "SELECT count(*) from events where ( '$datedebut'>=datedebut AND '$datedebut'<=$datefin ) OR ( '$datedebut'<datedebut AND '$datefin'>=datedebut AND '$datefin'<=datefin ) OR ( '$datefin'>datefin AND '$datedebut'<=datefin AND '$datedebut'>=datedebut ) OR ( '$datedebut'<datedebut AND '$datefin'>datefin)"; $result = mysql_query($query) or die (mysql_error()); $resultat=mysql_fetch_row($result); if($resultat[0] > 0){ // affichage du résultat echo "chevauchement ".$resultat[0]; //header('Location:cmd_pb.php'); }else { echo "on peut enregistrer pas de chevauchement ".$resultat[0]; }