Télécharger
Noter:

Ajouté le 2017-12-11
Visionné 11182 fois
4.6/5 (5)

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!

Vous pouvez télécharger directement le script ici: Calendrier-simple-PHP.zip (Téléchargé 1126 fois)
Une test du script peut être fait ici: Test calendrier

<?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="<?php echo $StyleTh; ?>background:#FF3333">Janvier</th>
<th style="<?php echo $StyleTh; ?>background:#FF9933">Février</th>
<th style="<?php echo $StyleTh; ?>background:#FFF833">Mars</th>
<th style="<?php echo $StyleTh; ?>background:#A7FF33">Avril</th>
<th style="<?php echo $StyleTh; ?>background:#3EFF30">Mai</th>
<th style="<?php echo $StyleTh; ?>background:#30FF83">Juin</th>
<th style="<?php echo $StyleTh; ?>background:#33FFEB">Juillet</th>
<th style="<?php echo $StyleTh; ?>background:#33A7FF">Août</th>
<th style="<?php echo $StyleTh; ?>background:#3341FF">Septembre</th>
<th style="<?php echo $StyleTh; ?>background:#8636FF">Octobre</th>
<th style="<?php echo $StyleTh; ?>background:#F133FF">Novembre</th>
<th style="<?php echo $StyleTh; ?>background:#FF33A7">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="<?php echo $JourReserve==1?"background:#FF8888;":"background:#88FF88;"; ?>border-bottom:1px solid #eee;"><?php echo $jours[$Jr]; ?></td>
<td style="<?php echo $JourReserve==1?"background:#FF8888;":"background:#88FF88;"; ?>border-bottom:1px solid #eee;width:20%;"><?php echo $jour; ?></td>
<?php
if($Jr>5){
$Jr=0;
} else {
$Jr++;
}
if(isset($_SESSION[$NomDeSessionAdmin])) { ?>
<td style="<?php echo $JourReserve==1?"background:#FF8888;":"background:#88FF88;"; ?>border-bottom:1px solid #eee;"><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="<?php echo $JourReserve==1?"Mettre ce jour en Disponible":"Mettre ce jour en 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>


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;

Besoin de travaux pour votre site ?

Je suis là pour vous aider !

Commentaires

Ajouter un commentaire

Commenter
Pseudo/Nom *
Email *
Message *
Captcha *
memo1memo2
Commenter

Les champs marqués d'un * sont obligatoires.

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...

Retour à la liste des scripts

Ici, les cookies, on les bouffent!!