Facebook
Télécharger
Noter:

Ajouté le 2022-01-21
Visionné 15156 fois
4.1/5 (7)

Calendrier de réservation simple en PHP

Description

Comme d'habitude, ce script ce veut des plus simples, il s'adaptera facilement au style CSS de votre site internet.

Vous pouvez l'utiliser pour des réservations/disponibilités d'une chambre d'hôtel ou une réservation d'une location saisonnière, par exemple.

Pour la configuration, laissez-vous guider par les commentaires PHP et si vous avez des questions, c'est plus bas!


CREATE TABLE IF NOT EXISTS `calendrier` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`date` date NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
<?php
//page: calendrier.php
session_start();//pour maintenir la session active
//connexion à la base de données:
$BDD = array();
$BDD['host'] = "localhost";
$BDD['user'] = "root";
$BDD['pass'] = "";
$BDD['db'] = "calendrier";
$mysqli = mysqli_connect($BDD['host'], $BDD['user'], $BDD['pass'], $BDD['db']);
if(!$mysqli) {
echo "Connexion non &eacute;tablie.";
exit;
}

$NomDeSessionAdmin="nomdesession";//mettre ici le nom de $_SESSION de votre site quand l'administrateur est connecté
/*
* Module de connexion/déconnexion simplifié.
* Vous pouvez adapter une variable de session de votre site afin de supprimer ce module
*/

$MotDePasse="votremotdepasse";//mettre ici un mot de passe
//pour vous connecter, entrez votresite.tld/calendrier.php?connexion=votremotdepasse

if(isset($_GET['connexion'])) {
if($_GET['connexion']==$MotDePasse){
$_SESSION[$NomDeSessionAdmin]=1;
echo "Connecté avec succès!";
}
}
if(isset($_GET['deconnexion'])) {
unset($_SESSION[$NomDeSessionAdmin]);
echo "Déconnecté avec succès!";
}
if(isset($_SESSION[$NomDeSessionAdmin])) {
echo '<p><a style="letter-spacing:0.5px;" href="?deconnexion">Déconnexion</a></p>';
}
/*
* Fin du module de connexion/déconnexion
*/

$jours = array(1=>"Lu",2=>"Ma",3=>"Me",4=>"Je",5=>"Ve",6=>"Sa",0=>"Di");
if(isset($_GET['annee']) AND preg_match("#^[0-9]{4}$#",$_GET['annee'])){//si on souhaite afficher une autre année, on l'affiche si elle est correcte
$annee=$_GET['annee'];
} else {
$annee=date("Y");//si non, on affiche l'année actuelle
}
$NbrDeJour=[];
for($mois=1;$mois<=12;$mois++) {
$NbrDeJour[$mois]=date("t",mktime(1,1,1,$mois,2,$annee));
$PremierJourDuMois[$mois]=date("w",mktime(5,1,1,$mois,1,$annee));
}
?>
<table id="recap">
<tr>
<td style="background:#FF8888;width:15px;height:15px;"></td><td>Réservé</td>
</tr>
<tr>
<td style="background:#88FF88;width:15px;height:15px;"></td><td>Disponible</td>
</tr>
</table>
<?php
//$_SESSION[$NomDeSessionAdmin]=1;
if(isset($_SESSION[$NomDeSessionAdmin])){
if(
isset($_GET['jour']) AND preg_match("#^[0-9]{1,2}$#",$_GET['jour']) AND
isset($_GET['mois']) AND preg_match("#^[0-9]{1,2}$#",$_GET['mois']) AND
isset($_GET['choix']) AND preg_match("#^(0|1)$#",$_GET['choix'])) {
if($_GET['choix']==1){
if(mysqli_query($mysqli,"INSERT INTO calendrier SET date='".$annee."-".$_GET['mois']."-".$_GET['jour']."'")) {
echo "Journée mise en \"réservé\" avec succès !";
} else {
echo "Une erreur s'est produite:<br />".mysqli_error($mysqli);
}
} else {
if(mysqli_query($mysqli,"DELETE FROM calendrier WHERE date='".$annee."-".$_GET['mois']."-".$_GET['jour']."'")) {
echo "Journée mise en \"disponible\" avec succès !";
} else {
echo "Une erreur s'est produite:<br />".mysqli_error($mysqli);
}
}
}
}
$StyleTh="text-shadow: 1px 1px 1px #000;color:white;width:75px;border-right:1px solid black;border-bottom:1px solid black;";
?>
<table style="border:1px solid black;border-collapse:collapse;box-shadow: 10px 10px 5px #888888;">
<caption style="font-size:18px;"><a href="?annee=<?php echo $annee-1; ?>" style="font-size:50%;vertical-align:middle;text-decoration:none;"><?php echo $annee-1; ?></a> <?php echo $annee; ?> <a href="?annee=<?php echo $annee+1; ?>" style="font-size:50%;vertical-align:middle;text-decoration:none;"><?php echo $annee+1; ?></a></caption>
<tr style="border-right:1px solid black;">
<th style="background:#FF3333;<?php echo $StyleTh; ?>">Janvier</th>
<th style="background:#FF9933;<?php echo $StyleTh; ?>">Février</th>
<th style="background:#FFF833;<?php echo $StyleTh; ?>">Mars</th>
<th style="background:#A7FF33;<?php echo $StyleTh; ?>">Avril</th>
<th style="background:#3EFF30;<?php echo $StyleTh; ?>">Mai</th>
<th style="background:#30FF83;<?php echo $StyleTh; ?>">Juin</th>
<th style="background:#33FFEB;<?php echo $StyleTh; ?>">Juillet</th>
<th style="background:#33A7FF;<?php echo $StyleTh; ?>">Août</th>
<th style="background:#3341FF;<?php echo $StyleTh; ?>">Septembre</th>
<th style="background:#8636FF;<?php echo $StyleTh; ?>">Octobre</th>
<th style="background:#F133FF;<?php echo $StyleTh; ?>">Novembre</th>
<th style="background:#FF33A7;<?php echo $StyleTh; ?>">Décembre</th>
</tr>
<tr>
<?php
for($mois=1;$mois<=12;$mois++) {
for($jour=1;$jour<=$NbrDeJour[$mois];$jour++){
if($jour==1){
echo '<td style="vertical-align:top;border-right:1px solid black;">
<table style="width:100%;border-collapse:collapse;">';
$Jr=$PremierJourDuMois[$mois];
}
$JourReserve=0;
$req = mysqli_query($mysqli,"SELECT * FROM calendrier WHERE date='".$annee."-".$mois."-".$jour."'");
if(mysqli_num_rows($req)>0)$JourReserve=1;
?>
<tr>
<td style="border-bottom:1px solid #eee;<?php echo $JourReserve==1?"background:#FF8888;":"background:#88FF88;"; ?>"><?php echo $jours[$Jr]; ?></td>
<td style="border-bottom:1px solid #eee;width:20%;<?php echo $JourReserve==1?"background:#FF8888;":"background:#88FF88;"; ?>"><?php echo $jour; ?></td>
<?php
if($Jr>5){
$Jr=0;
} else {
$Jr++;
}
if(isset($_SESSION[$NomDeSessionAdmin])) { ?>
<td style="border-bottom:1px solid #eee;<?php echo $JourReserve==1?"background:#FF8888;":"background:#88FF88;"; ?>"><a href="?jour=<?php echo $jour; ?>&amp;mois=<?php echo $mois; ?>&amp;annee=<?php echo $annee; ?>&amp;choix=<?php echo $JourReserve==1?0:1; ?>#recap"><img src="images/<?php echo $JourReserve; ?>.png" alt="Action" style="width:13px;" title="Mettre ce jour en <?php echo $JourReserve==1?"Disponible":"Réservé"; ?>" /></a></td>"
<?php } ?>
</tr>
<?php
if($jour==$NbrDeJour[$mois]){
echo '</table>
</td>';
}
}
}
?>
</tr>
<tr>
<td colspan="12" style="display:none;text-align:right;font-size:10px">Calendrier par <a href="//www.c2script.com" target="_blank" rel="nofollow">C2Script.com</a></td>
</tr>
</table>



Une test du script peut être fait ici : Test calendrier

Vous pouvez télécharger directement le script ici :

Calendrier-simple-PHP.zip
(Téléchargé 1594 fois)






Besoin de travaux pour votre site ?

Je suis disponible, contactez-moi !

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom
Email
Message
Captcha

Captcha temporairement HS, tapez 2 svp
memo1
Commenter

nunu88 le 03 Février 2018 à 10:21

bonjour, ou puis je voir un exemple de celui ci en ligne?
comment y mettre les dates de non disponibilités?
merci d'avance

admin le 03 Février 2018 à 20:28

Bonjour, j'ai rajouter un lien dans l'article pour tester le script.

manu le 01 Avril 2018 à 10:30

Bonjour j'ai installé celui ci, mais je rencontre 2 problèmes :
n'y a t'il pas une erreur dans
$BDD['host'] = "localhost";
$BDD['user'] = "root";
$BDD['pass'] = "";
$BDD['db'] = "calendrier"; <<<< ici >>>> ca ne devrait pas être le même nom que notre base et pas la table calendrier?
Autre problème quand je clique sur déconnexion, et je que regarde l'année 2017 , je vois toujours Déconnexion, même sur un autre pc....
Merci de de votre aide

manu le 01 Avril 2018 à 10:43

Bonjour, effectivement même si j'essaye de regarder la page depuis un autre pc, juste ouvrir la page, il y a le signe + pour ajouter une date sur tous les jours, sans être logger?
merci de votre aide

admin le 01 Avril 2018 à 18:53

Bonjour,

$BDD['db'] = "calendrier";

:correspond au nom de la data base (base de données), le nom de la table s'écrit dans les requêtes MySQL.

admin le 01 Avril 2018 à 18:56

Pour l'erreur de connexion, c'est seulement de votre côté.

Titi le 28 Avril 2019 à 14:46

Super !
Je viens de débuter une formation en PHP, et je voulais mettre un calendrier dans une annonce (un projet de site de location)
Ton code va grandement m'aider à voir comment faire !
Merci de partager ! *pouce en l'air*

admin le 28 Avril 2019 à 15:55

Merci pour votre commentaire :)

Christophe le 07 Novembre 2020 à 11:11

Bonjour,après l'installation de votre script,sans être logué,les visiteurs peuvent enregistrer des dates? il y a le + sur la page! comment supprimer ce problème? merci de votre aide.

admin le 07 Novembre 2020 à 14:29

Bonjour, non ils ne peuvent pas sans mot de passe, déconnectez vous et vous verrez que vous ne pouvez y accéder.

Christophe le 08 Novembre 2020 à 10:58

Bonjour, je ne suis pas connecté, et j'ai essayé depuis un autre navigateur, les changements sont bien pris en compte, et il y a bien la croix verte pour bloquer le jour sur la page sans être connecté.....

Christophe le 08 Novembre 2020 à 11:07

Re bonjour, j'ai recopier le code plus haut au lieu de celui dans l'archive et ça fonctionne.....
Merci pour ce script

Manu le 11 Décembre 2020 à 20:16

Bonjour, est ce qu'il est possible de l'adapter pour les smartphones? car quand je regarde, on ne voit pas le calendrier en entier! Montrer que 6 mois par 6 mois comme sur les années en bas de celui ci!
Merci pour votre aide

admin le 12 Décembre 2020 à 12:27

Oui, une solution serait de le mettre dans une div qui puisse être bouger de gauche à droite, comme par exemple: https://www.w3schools.com/howto/howto_css_table_responsive.asp - How TO - Responsive Tables

Manu le 13 Décembre 2020 à 18:45

j'ai essayé, mais sans succés, je ne l'ai peut être pas mis au bon endroit ?

Manu le 13 Décembre 2020 à 18:55

Après plusieurs test ça fonctionne! mais le problème c'est juste que la barre de défilement n'est pas affichée! existe t'il un moyen de la faire apparaitre ?
merci pour votre super travail

admin le 13 Décembre 2020 à 19:36

Veillez à bien mettre overflow-x: auto; (le mettre en "!important" peut être, si jamais votre site à d'autres règles qui casse le overflow-x)

Vous pouvez voir la console avec F12 (Sur Firefox mais je penses que c'est la même touche pour les autres navigateurs connus) et repérer les valeurs CSS de la div sensée mettre la barre de défilement si elles sont pas grisées.

Manu le 15 Décembre 2020 à 15:23

Merci beaucoup, ça fonctionne maintenant!
Depuis le temps que je recherchais un script comme celui la!
Bravo à vous!

servUN02 le 04 Mars 2021 à 11:02

bonjour,
Le script semble bien construit. Merci de le rendre dispo a tous.
J'ai créé ma table 'calendrier' dans ma bdd en mettant 2 colonnes. Quand je coche une date sur ma page php toute l'année se réserve... Que faire dans la bdd pour que cela ne prenne qu'une seule date stp ? (je suis novice)
Merci d'avance.

admin le 04 Mars 2021 à 18:30

Bonjour, avez vous copié/collé le code SQL dans votre phpmyadmin ?

servUN02 le 04 Mars 2021 à 18:33

J'ai trouvé oui, en le collant. J'avais des souvenirs lointains de phpmyadmin, j'ai dû m'y remettre... Merci pour la réponse.

admin le 04 Mars 2021 à 18:40

OK, super! bonne continuation!

doudou5788 le 02 Avril 2021 à 11:44

Bonjour à tous, j'ai 41 ans et je suis en formation de développeur web et web mobile à l' AFPA de Nancy et j'ai besoin, pour mon stage, d'un calendrier ( côté administrateur ) ...je vais essayer celui ci...

Kocia le 14 Juin 2022 à 20:46

Je ne comprends pas comment ça marche.
J'ai bien le calendrier etc mais je ne comprends pas comment reserver une date.
Merci pour l'aide

admin le 15 Juin 2022 à 14:47

La réservation d'une date se fait quand vous êtes connecté en tant qu'admin, vous cliquez sur une date pour la réserver/dé-réserver, afin d'en informer vos visiteurs.

Les commentaires du script vous aideront.

Retour à la liste des scripts