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

Fermé
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021 - 27 mars 2019 à 19:12
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021 - 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
A voir également:

3 réponses

jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
27 mars 2019 à 21:09
Bonjour,

Pour commencer, applique ce qui est indiqué ici : https://forums.commentcamarche.net/forum/affich-37584941-php-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.

0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
27 mars 2019 à 23:13
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.
0
jordane45 Messages postés 38346 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 décembre 2024 4 717
28 mars 2019 à 08:36
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();
0
YameFAZE Messages postés 201 Date d'inscription mardi 24 avril 2012 Statut Membre Dernière intervention 14 mars 2021
28 mars 2019 à 09:18
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...
0