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
//mettre ici votre mot de passe pour gérer le calendrier
$MotDePasse = 'votremotdepasse';
//pour maintenir la session active
session_start();
//connexion à la base de données
$BDD = [];
$BDD['host'] = "localhost";
$BDD['user'] = "root";
$BDD['pass'] = "";
$BDD['db'] = "calendrier";//nom base de données
$mysqli = mysqli_connect($BDD['host'], $BDD['user'], $BDD['pass'], $BDD['db']);
if(!$mysqli)
exit("Connexion MySQL non établie.");
// Module de Connexion/Déconnexion simplifié.
// Vous pouvez adapter une variable de session de votre site afin de supprimer ce module
//mettre ici le nom de $_SESSION de votre site quand l'administrateur est connecté
$NomDeSessionAdmin = 'nomdesession';
//pour vous connecter, entrez votresite.tld/calendrier.php?connexion=votremotdepasse
if(isset($_GET['connexion'])){
if($_GET['connexion'] == $MotDePasse){
$_SESSION[$NomDeSessionAdmin] = 1;
echo "<p>Connecté avec succès !</p>";
}
}
if(isset($_GET['deconnexion'])){
unset($_SESSION[$NomDeSessionAdmin]);
echo "<p>Déconnecté avec succès !</p>";
}
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
// Début du code PHP pour générer le calendrier
$jours = [
1 => 'Lu',
2 => 'Ma',
3 => 'Me',
4 => 'Je',
5 => 'Ve',
6 => 'Sa',
0 => 'Di'
];
//si on souhaite afficher une autre année, on l'affiche si elle est correcte
if(isset($_GET['annee']) AND preg_match("#^[0-9]{4}$#",$_GET['annee']))
$annee = $_GET['annee'];
else
$annee = date('Y');//si non, on affiche l'année actuelle
$nombre_de_jours_dans_le_mois = [];
for($mois = 1; $mois <= 12; $mois ++){
$nombre_de_jours_dans_le_mois[$mois] = date('t', mktime(1, 1, 1, $mois, 2, $annee));
$premier_jour_du_mois[$mois] = date('w', mktime(5, 1, 1, $mois, 1, $annee));
}
$style_reserve = 'background:#F33;color:white;';
$style_disponible = 'background:#88FF88;';
?>
<table id="recap">
<tr>
<td style="<?= $style_reserve ?>width:15px;height:15px;"></td><td>Réservé</td>
</tr>
<tr>
<td style="<?= $style_disponible ?>width:15px;height:15px;"></td><td>Disponible</td>
</tr>
</table>
<?php
if(isset($_SESSION[$NomDeSessionAdmin])){
if((isset($_GET['jour']) && preg_match("#^[0-9]{1,2}$#", $_GET['jour']))
&& (isset($_GET['mois']) && preg_match("#^[0-9]{1,2}$#", $_GET['mois']))
&& (isset($_GET['choix']) && preg_match("#^(0|1)$#", $_GET['choix']))){
if($_GET['choix'] == 1){
$date_selectionnee = $annee . '-' . $_GET['mois'] . '-' . $_GET['jour'];
if(mysqli_query($mysqli,"INSERT INTO calendrier SET date='$date_selectionnee'")){
echo "Journée passée 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='$date_selectionnee'")) {
echo "Journée passée en \"disponible\" avec succès !";
} else {
echo "Une erreur s'est produite:<br>".mysqli_error($mysqli);
}
}
}
}
$style_th="text-shadow:1px 1px 1px #000;color:white;width:75px;border-right:1px solid black;border-bottom:1px solid black;";
$style_border_bottom = 'border-bottom:1px solid #eee;';
?>
<table style="border:1px solid black;border-collapse:collapse;box-shadow: 10px 10px 5px #888888;">
<caption style="font-size:18px;"><a href="?annee=<?= $annee-1 ?>" style="font-size:50%;vertical-align:middle;text-decoration:none;"><?= $annee-1 ?></a> <?= $annee ?> <a href="?annee=<?= $annee+1 ?>" style="font-size:50%;vertical-align:middle;text-decoration:none;"><?= $annee+1 ?></a></caption>
<tr style="border-right:1px solid black;">
<th style="<?= $style_th ?>background:#FF3333">Janvier</th>
<th style="<?= $style_th ?>background:#FF9933">Février</th>
<th style="<?= $style_th ?>background:#FFF833">Mars</th>
<th style="<?= $style_th ?>background:#A7FF33">Avril</th>
<th style="<?= $style_th ?>background:#3EFF30">Mai</th>
<th style="<?= $style_th ?>background:#30FF83">Juin</th>
<th style="<?= $style_th ?>background:#33FFEB">Juillet</th>
<th style="<?= $style_th ?>background:#33A7FF">Août</th>
<th style="<?= $style_th ?>background:#3341FF">Septembre</th>
<th style="<?= $style_th ?>background:#8636FF">Octobre</th>
<th style="<?= $style_th ?>background:#F133FF">Novembre</th>
<th style="<?= $style_th ?>background:#FF33A7">Décembre</th>
</tr>
<tr>
<?php
for($mois = 1; $mois <= 12; $mois ++){
for($jour = 1; $jour <= $nombre_de_jours_dans_le_mois[$mois]; $jour ++){
if($jour == 1){
echo '<td style="vertical-align:top;border-right:1px solid black;">
<table style="width:100%;border-collapse:collapse;">';
//0 = dimanche, 6 = samedi
$jour_de_la_semaine0_6 = $premier_jour_du_mois[$mois];
}
$req = mysqli_query($mysqli, "SELECT * FROM calendrier WHERE date='{$annee}-{$mois}-{$jour}'");
$jour_reserve = false;
$style = $style_disponible;
$texte = 'Mettre en Réservé';
if(mysqli_num_rows($req) > 0){
$jour_reserve = true;
$style = $style_reserve;
$texte = 'Mettre en Disponible';
}
$style_fin_de_semaine = '';
if($jour_de_la_semaine0_6 == 0)
$style_fin_de_semaine = 'border-bottom: 2px solid #797979 !important;';
?>
<tr style="<?= $style_fin_de_semaine ?>font-family:monospace;cursor:default">
<td style="<?= $style . $style_border_bottom?>"><?= $jours[$jour_de_la_semaine0_6] ?></td>
<td style="<?= $style . $style_border_bottom?>width:20%;text-align:right;"><?= $jour ?></td>
<?php
if(isset($_SESSION[$NomDeSessionAdmin])){
?>
<td style="<?= $style . $style_border_bottom?>"><a href="?jour=<?= $jour ?>&mois=<?= $mois ?>&annee=<?= $annee ?>&choix=<?= $jour_reserve ? 0 : 1 ?>#recap"><img src="images/<?= $jour_reserve ? 1 : 0 ?>.png" alt="[<?= $jour_reserve ? 'x' : '+' ?>]" style="width:13px;" title="<?= $texte ?>"></a></td>
<?php
}
?>
</tr>
<?php
if($jour_de_la_semaine0_6 == 6)
$jour_de_la_semaine0_6 = 0;
else
$jour_de_la_semaine0_6 ++;
if($jour == $nombre_de_jours_dans_le_mois[$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" rel="nofollow">C2Script.com</a></td>
</tr>
</table>
J'espère que ce script gratuit vous est utile.Pour soutenir mon travail, un simple don ou mettre une note est grandement apprécié.
Vous cherchez à pousser encore plus loin vos idées ou à les concrétiser avec un site internet sur mesure ? Je suis là pour vous aider ! Mon expérience en développement web est à votre disposition.
Que ce soit la création de votre site web pro ou l'apport de fonctionnalités avancées à votre projet, contactez-moi pour en discuter et avoir un devis gratuit personnalisé.
Mon objectif est de vous offrir des solutions sur mesure qui répondent à vos besoins, et votre vision associée à mon expertise donnera vie à votre projet web parfait. Contactez-moi aujourd'hui, je réponds en général en moins d'une heure :
Demander un devisnunu88 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.
Kocia le 07 Décembre 2022 à 18:11
Bonjour, tout marche mais j'ai quand même un petit soucis : quand je lance ma page coté administrateur, en bas des mois mais en haut des dates, des guillemets apparaissent (une vingtaine). Je ne sais comment les enlever.
Avez-vous une solution ?
admin le 07 Décembre 2022 à 18:14
Envoyez moi une capture via la page contact (contactez-moi et je vous réponds pour que vous puissiez m'envoyer une PJ)
Kocia le 07 Décembre 2022 à 18:37
Je vois pas le moyen de vous envoyer une capture d'ecran
Kocia le 07 Décembre 2022 à 18:37
j'ai mal lu le message sorry
Akasha le 26 Janvier 2023 à 11:14
Je me demande où je peux voir mon calendrier en html car j’ai pourtant copié le code mais après je me demande ce qu’il faut faire pour le faire apparaître sur ma page
admin le 26 Janvier 2023 à 11:17
Il vous faut une base de données MySQL pour enregistrer les réservations.
Jean-Marc le 12 Juillet 2023 à 13:32
Concernant le problème des 31 double-guillemets qui apparaissent en mode "admin" après la première ligne (liste des mois), il faut supprimer celui qui est à la toute fin de la ligne n°125 après le </td>/
admin le 12 Juillet 2023 à 13:35
Merci de me l'avoir signalé, je vais le corriger rapidement !
alain le 16 Avril 2024 à 12:46
bonjour
impossible de créer la base de données 'calendrier', je n'ai que des erreurs avec la saisie
y a t'il une possibilité d'en avoir une deja prete ?
admin le 16 Avril 2024 à 12:48
Quelle erreur rencontrez-vous, quelque chose s'affiche à l'écran comme message d'erreur PHP ?
ousmane le 25 Septembre 2024 à 22:29
Bonjour j'ai un soucis lorsque je clique sur le + je peux réserver mais je ne peux pas le rendre disponible par la suite comme sur le lien d'exemple
admin le 25 Septembre 2024 à 23:18
Ya til une erreur ou un message ? Vérifiez que le fichier soit bien transféré sur le serveur, sans qu'il soit compressé par votre FTP du à un transfert "non binaire".
ousmane le 27 Septembre 2024 à 06:38
Vous voulez dire quoi par transfert non binaire ? Le fichier est bien présent sur le ftp. Merci
admin le 27 Septembre 2024 à 09:55
Présent est une chose, bien transféré en est une autre.
Si votre mode de transfert n'est pas en binaire, le contenu du fichier sera compressé sur une ligne, ce qui aura pour effet de créer des erreurs, dans le code.
Allez dans les paramètres de votre FTP : "mode de transfert" > "binaire".