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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344 > 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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344 > 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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344 > 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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
16 nov. 2017 à 12:11
j'ai testé la requête DIRECTEMENT dans ta bdd ??
il me donne une erreur de syntaxe
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 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
16 nov. 2017 à 12:29
j'ai testé tout mai ca fonctionne pas
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344 > 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
Rejoignez-nous