Réservation - disponibilité de chambres entre deux dates

Résolu
aminsaaa
Messages postés
2
Date d'inscription
mercredi 8 novembre 2017
Statut
Membre
Dernière intervention
8 novembre 2017
- Modifié le 8 nov. 2017 à 15:53
amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017
- 17 nov. 2017 à 11:59
Bonjour,
je ne sais pas vraiment comment m'y prendre pour contrôler la disponibilité des chambres
de telle date à telle date.
voila ma fonction et sa march juste pour la date d'arrivée et la date de d'épar mai entre les deux sa fonctionne pas

public function form_room_select($arrive = null,$dpart = null, $lang = null){
global $wpdb;
$option = "";

if(!empty($arrive)):
if(empty($lang))
$lang = "fr";

$arrive = new DateTime($arrive);
$arrive = $arrive->format('Y-m-d');

$dpart = new DateTime($dpart);
$dpart->modify('-1 day');
$dpart = $dpart->format('Y-m-d');

$sql = "SELECT `id_booking_setting` as id, `txt_".$lang."` as txt
FROM `{$wpdb->prefix}booking_setting`
WHERE `type_booking_setting` = 'chambre'
AND `id_booking_setting` not in (
SELECT `chambre_id_booking`
FROM `{$wpdb->prefix}booking`
WHERE class_booking != 'annuler'
and ( `date_arrivee_booking` between '".$arrive."' and '".$dpart."'
and DATE_ADD(`date_depart_booking`, INTERVAL -1 DAY) between '".$arrive."' and '".$dpart."' )
) group by `id_booking_setting`";
$rooms = $wpdb->get_results($sql);


if(!empty($rooms))
foreach($rooms as $ro)
$option .= "<option value='".$ro->id."/".str_replace(array("\\","'")," ",$ro->txt)."'>".str_replace("\\","",$ro->txt)."</option>";
endif;

return $option;
}


|-
| style="background-color:#fc8b2f;border: 1px solid transparent"| EDIT : Mise en forme du code en utilisant correctement les balises de code (la coloration syntaxique).


== Explications disponibles ici :ICI ==

Merci d'y penser dans tes prochains messages.
Jordane45
>

3 réponses

jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022
356
8 nov. 2017 à 15:37
Bonjour,

Ton souci se situe donc au niveau de ta requête non ?
Dans ce cas... c'est dans le forum SQL qu'il aurait fallu poster...

Quoi qu'il en soit.. sans connaitre la structure de ta bdd ni avoir quelques exemples de données ... il nous sera difficile de te répondre.

Mais bon.. déjà.. pourquoi fais tu un DATE_ADD -1 jour sur le champ date_depart_booking... A moins que ça ne soit pour coller avec ta ligne de code php:
$dpart->modify('-1 day');

Et là.. pourquoi retirer un jour à ta variable $dpart ??



Et puis... une requête... ça commence par se tester DIRECTEMENT dans la bdd !
Tu ne l'utilises dans ton code php qu'une fois que tu t'es assuré qu'elle fonctionne....
http://codes-sources.commentcamarche.net/faq/10778-heidisql-tester-ses-requetes-sql
0
aminsaaa
Messages postés
2
Date d'inscription
mercredi 8 novembre 2017
Statut
Membre
Dernière intervention
8 novembre 2017

8 nov. 2017 à 16:17
salut jordane
je suis pas un développeur , j'arrive pas de comprendre pourquoi je veux juste modifier cette partie de mon site site et j'arrive plus
0
jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022
356
Modifié le 8 nov. 2017 à 19:29
Ca ne sert à rien d'ouvrir 10 fois la même question sur le forum...
Par contre..si tu veux de l'aide il nous faut ce que je t'ai demandé.... Un dump de ta bdd.



Cordialement, 
Jordane                                                                 
0
amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017

15 nov. 2017 à 13:00
- table booking (id_booking , nom_booking , email bokking , tel_boking , chambre_id_booking , date_arrivee_booking , date_depart_bookin , message_booking , state_booking , date_ajouter_booking , date_valider_booking)
- table booking_setting(id_booking_setting , type_booking_setting ,text_fr , type_message)
0
jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022
356 > amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017

15 nov. 2017 à 13:55
0
amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017
> jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022

15 nov. 2017 à 14:52
je pense que ç'est ça

--
-- Structure de la table `wp_booking`
--

DROP TABLE IF EXISTS `wp_booking`;
CREATE TABLE IF NOT EXISTS `wp_booking` (
`id_booking` int(11) NOT NULL AUTO_INCREMENT,
`nom_booking` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
`email_bokking` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
`tel_booking` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
`chambre_nom_booking` varchar(255) COLLATE latin1_general_ci DEFAULT NULL,
`chambre_id_booking` int(11) DEFAULT NULL,
`lang_booking` varchar(15) COLLATE latin1_general_ci DEFAULT NULL,
`source_name_booking` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
`source_id_booking` int(11) DEFAULT NULL,
`date_arrivee_booking` date DEFAULT NULL,
`date_depart_booking` date DEFAULT NULL,
`message_booking` text COLLATE latin1_general_ci,
`state_booking` varchar(20) COLLATE latin1_general_ci DEFAULT NULL,
`date_ajouter_booking` date DEFAULT NULL,
`date_valider_booking` date DEFAULT NULL,
`class_booking` varchar(15) COLLATE latin1_general_ci DEFAULT NULL,
PRIMARY KEY (`id_booking`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;

--
-- Structure de la table `wp_booking_setting`
--

DROP TABLE IF EXISTS `wp_booking_setting`;
CREATE TABLE IF NOT EXISTS `wp_booking_setting` (
`id_booking_setting` int(11) NOT NULL AUTO_INCREMENT,
`type_booking_setting` varchar(25) COLLATE latin1_general_ci DEFAULT NULL,
`txt_fr` text COLLATE latin1_general_ci,
`txt_en` text COLLATE latin1_general_ci,
`txt_es` text COLLATE latin1_general_ci,
`type_msg` varchar(50) COLLATE latin1_general_ci DEFAULT NULL,
PRIMARY KEY (`id_booking_setting`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
0
jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022
356 > amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017

15 nov. 2017 à 15:21
Yes c'est déjà mieux.
Il nous manque aussi un jeu de données test .... pour pouvoir essayer.
0
amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017

15 nov. 2017 à 15:52
!!!!!
0
jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022
356
16 nov. 2017 à 11:04
Bonjour,

Déjà ... évite les UP .... ça ne sert à rien.
Les gens répondent lorsqu'ils le peuvent....

Ensuite, essaye ça :
SET @datearrivee = '2017-11-02';
SET @datedepart = '2017-11-09';


SELECT `id_booking_setting` as id, txt_fr as txt 
     FROM `wp_booking_setting` S
     WHERE `type_booking_setting` = 'chambre'
     AND `id_booking_setting` NOT IN (
            SELECT  `chambre_id_booking`
            FROM `wp_booking` B
            WHERE class_booking != 'annuler'
             AND ( @datearrivee between date_arrivee_booking AND DATE_ADD(date_depart_booking,INTERVAL +1 DAY)
              OR   @datedepart between date_arrivee_booking AND DATE_ADD(date_depart_booking,INTERVAL +1 DAY) )


Ca devrait donner ce que tu cherches.

NB: Teste DANS TA BDD directement......

Lorsque tu mettras ton code en php, il faudra retirer les deux premières lignes ( les SET ) et remplacer les variables
@datearrivee et @datedepart par tes variables php.

0
amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017

16 nov. 2017 à 11:19
public function form_room_select($arrive = null,$dpart = null, $lang = null){
global $wpdb;
$option = "";

if(!empty($arrive)):
if(empty($lang))
$lang = "fr";

$arrive = new DateTime($arrive);
$arrive = $arrive->format('Y-m-d');

$dpart = new DateTime($dpart);
$dpart->modify('-1 day');
$dpart = $dpart->format('Y-m-d');

$sql = "SELECT `id_booking_setting` as id, `txt_".$lang."` as txt
FROM `{$wpdb->prefix}booking_setting`
WHERE `type_booking_setting` = 'chambre'
AND `id_booking_setting` not in (
SELECT `chambre_id_booking`
FROM `{$wpdb->prefix}booking`
WHERE class_booking != 'annuler'
and ( `date_arrivee_booking` between '".$arrive."' and '".$dpart."'
and DATE_ADD(`date_depart_booking`, INTERVAL -1 DAY) between '".$arrive."' and '".$dpart."' )
) group by `id_booking_setting`";




// die($sql);
$rooms = $wpdb->get_results($sql);
if(!empty($rooms))
foreach($rooms as $ro)
$option .= "<option value='".$ro->id."/".str_replace(array("\\","'")," ",$ro->txt)."'>".str_replace("\\","",$ro->txt)."</option>";
endif;

return $option;


voici ma fonction comment je fait pour remplacer mais variables est fonctionne bien ???

merciii et je suis trés désolé pour le derangement
0
jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022
356 > amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017

16 nov. 2017 à 11:42
Est-ce que déjà tu as testé la requête DIRECTEMENT dans ta bdd ??
Elle fonctionne comme tu le souhaites ou pas ???


Et ensuite (seulement si tu confirmes que la requête en bdd fonctionne comme tu le veux...), côté php ... il suffit de mettre la requête à la place de la tienne dans la variable $sql et de remplacer les deux variables @... par tes variables php à toi
@datearrivee à remplacer par : '$arrive'
@datedepart à remplacer par :'$dpart'
0
amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017
> jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022

16 nov. 2017 à 12:11
j'ai testé la requête DIRECTEMENT dans ta bdd ??
il me donne une erreur de syntaxe
0
jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022
356 > amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017

16 nov. 2017 à 12:48
Quoi comme erreur ????
Je ne suis pas encore devin.... :-)
0
amindev
Messages postés
19
Date d'inscription
mercredi 15 novembre 2017
Statut
Membre
Dernière intervention
20 novembre 2017
> jordane45
Messages postés
35489
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
25 mai 2022

16 nov. 2017 à 12:56
erreur de syntaxe prés de ' ' a la ligne 9
0