Menu

PDO - sélectionner période entre 2 dates et l'afficher

Messages postés
165
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
21 mai 2019
- - Dernière réponse : YameFAZE
Messages postés
165
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
21 mai 2019
- 28 mars 2019 à 09:18
Bonjour,

J'ai une BDD avec 3 champs : id, "debut" qui contient les dates de début de location, et "fin" qui contient les dates de fin de location. Actuellement j'arrive à faire une requête pour afficher les périodes louées. Ce que j'aimerais faire c'est afficher les périodes disponibles. J'ai surfer un peu et suis tombé sur pas mal de tutos mais aucun n'explique vraiment comment faire ce que je souhaite. Merci d'avance.

<!---------------------------->
<!------- FICHE MOTO 1 ------->
<!---------------------------->
<?php
	/* On se connecte à la BDD avec $connexion_bdd */
	/* S'il n'y a pas d'erreur à la connexion on continue */
	try {
		$connexion_bdd = new PDO('mysql:host=localhost;dbname=dbname;charset=utf8', 'root', '');
	/* S'il y a une erreur on arrête tout et on affiche le message de $erreur */
	} catch (Exception $erreur) {
		die('Erreur : ' . $erreur -> getMessage());
	}
	/* On prépare la requête $requete_indispos pour vérifier les périodes de location, on se connecte, et on récupère le contenu en attendant l'exécution */
	$requete_indispos = $connexion_bdd -> prepare('SELECT * FROM xx_xxx_xx');
?>
<ul class="apparition">
	<li>
		<img src="images/moto_1.jpg" alt="xxxxxxxxxxxxxxxxxxxxx" />
	</li>
	<li>
		<h2>xxxxxxxxxxxxxx</h2>
		<h3>Catégorie :</h3>
		<p>Roadster<p/>
		<h3>Cylindrée :</h3>
		<p>1.000 cm3<p/>
		<h3>Moto louée aux périodes suivantes :</h3>
		<p>
			<?php
			/* On exécute $requete_indispos */
			$requete_indispos -> execute();
			/* On récupère les données dans $donnees, on ne sélectionne que les dates de début et de fin des périodes de location, et on les affiche une à une en effectuant une boucle */
			while($donnees = $requete_indispos -> fetch()) {
				?>
				du <?php echo $donnees['debut']; ?> au <?php echo $donnees['fin']; ?><br />
				<?php
			}
			/* On termine $requete_indispos */
			$requete_indispos -> closeCursor();
			?>
		</p>
	</li>
</ul>


Configuration: Ordinateur portable ASUS UX21E
Windows 7
Afficher la suite 

3 réponses

Messages postés
25776
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2019
1662
0
Merci
Bonjour,

Pour commencer, applique ce qui est indiqué ici : http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Ensuite.. tu parles de vouloir faire des recherche par période...
Tu peux donc utiliser, dans ta requête SQL un WHERE ... et même un BETWEEN

Par contre, j'ose espérer que tes champs de dates... sont bien au format DATE, DATETIME ou TIMESTAMP
et pas au format varchar...
Autrement dit, une date, dans une BDD, ça se stocke sous la forme ANNEE-MOIS-JOUR .... et surtout pas JOUR/MOIS/ANNEE
Sans quoi... les requêtes sur ce genre de champ deviennent du bidouillage.

Commenter la réponse de jordane45
Messages postés
165
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
21 mai 2019
0
Merci
Oui je connais WHERE et BETWEEN mais justement je ne sais pas comment les utiliser dans mon cas. Sinon oui mes champs sont bien au format DATE. J'aimerais juste que l'on m'explique comment faire pour interroger la BDD et afficher toutes les périodes où la moto n'est pas louée.
jordane45
Messages postés
25776
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
18 juin 2019
1662 -
Toutes les périodes non louées ?
Vu qu'en base tu semble ne stocker que les périodes où il y a des locations... il sera compliqué de le faire via une requête.
La solution est de boucler, en php, sur toutes les dates de la période voulue ( par exemple du 1 mai au 31 Aout ... ) puis de vérifier si cette date se trouve dans une des périodes de ton array ( array que tu as déjà vu ton code actuel en modifiant simplement le )
while($donnees = $requete_indispos -> fetch()) {

par un fetchAll
$arrayLocations = $requete_indispos -> fetchAll();
Commenter la réponse de YameFAZE
Messages postés
165
Date d'inscription
mardi 24 avril 2012
Statut
Membre
Dernière intervention
21 mai 2019
0
Merci
Donc il n'y a pas une méthode qui permettrait de comparer toutes les dates existantes à celles présentes dans la BDD ? Ou alors il faudrait que je fasse un calendrier mensuel affiché sur la page qui interroge la BDD et qui indiquerait les jours non disponibles par exemple... va falloir que je me creuse la tête pour savoir comment faire ça...
Commenter la réponse de YameFAZE