Recherche d'informations

Résolu/Fermé
Pierre_6790 Messages postés 16 Date d'inscription lundi 15 novembre 2021 Statut Membre Dernière intervention 23 novembre 2021 - 23 nov. 2021 à 11:10
Pierre_6790 Messages postés 16 Date d'inscription lundi 15 novembre 2021 Statut Membre Dernière intervention 23 novembre 2021 - 23 nov. 2021 à 16:38
Bonjour, j'aimerais savoir si il est possible (en php) de regarder si une variable(dans un format de date) est dans un liste, et dans le cas ou elle est dans une liste, on exécute une commande. Est-ce possible de faire ça, si oui pourriez vous m'indiquez où me renseigner ?

4 réponses

jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
23 nov. 2021 à 13:17
Bonjour
Là, comme ça, je vais dire oui...

Après, il faudrait nous détailler ce que tu appelles liste... Éventuellement nous montrer un exemple de ce qu'elle contient et éventuellement également ce que tu as déjà essayé...
0
Pierre_6790 Messages postés 16 Date d'inscription lundi 15 novembre 2021 Statut Membre Dernière intervention 23 novembre 2021
23 nov. 2021 à 13:41
Comme détails je pourrai vous dire que j'ai une variable $date et que j'aimerais que si la valeur de la variable $date se trouvent dans une liste (ça serait la condition de mon if) je ferais une action ( dans ce cas ci changerais la couleur de cette date)
J'ai déjà essayer de créer une liste et de comparer les éléments de cette manière
$date2 = new DateTime('2012-12-12')
<div class="calendar__day2"><? if ($date->format('N') === $dates2):
					$date->format('d');  ?></div>

Et plusieurs chose de ce style mais ça ne marche pas donc si vous connaissez un endroit où je pourrais me renseigner. J'ai déjà lu plusieurs fonctions sur le site de php mais ce n'est pas ce que je cherche
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
23 nov. 2021 à 14:21
D'où vient ta variable $date ? comment l'as tu initialisé ?
tu parles de "liste" ... mais là.. je ne vois que deux variables .. $date et $dates2 ... donc .. c'est quoi une "liste" pour toi ?
En php.. tu n'as pas de "liste"..
Eventuellement tu as un objet... ou un array ...

NB: les balises php c'est
<?php

et pas juste
<?


NB²: Le code que tu nous montres ne peux pas fonctionner vu que tu as du php (sans balises ? ) suivi de html ...
0
Pierre_6790 Messages postés 16 Date d'inscription lundi 15 novembre 2021 Statut Membre Dernière intervention 23 novembre 2021
23 nov. 2021 à 14:34
Donc voila mon code, vous avez déjà vu la dernière version normalement.

Ceci est mon index.php
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
	<link rel="stylesheet" type="text/css" href="calendar.css">
</head>
<body>

<nav class="nav-bar navbar-dark bg-primary mb-3">
	<a href="/index.php" class="navbar-brand">Agenda</a>
</nav>

<?php 
require '../public/Month.php';
$month = new Month($_GET['month'] ?? null, $_GET['year'] ?? null);
$start = $month->getStartingDay();
$start = $start->format('N') === '1' ? $start : $month->getStartingDay()->modify('last monday');
?>


<div class="d-flex flex-row align-items-center justify-content-between mx-sm-3">
	<h1><?= $month->toString(); ?></h1>
	<div>
		<a href="index.php?month=<?= $month->previousMonth()->month; ?>&year=<?= $month->previousMonth()->year; ?>" class="btn btn-primary"><</a>
		<a href="index.php?month=<?= $month->nextMonth()->month; ?>&year=<?= $month->nextMonth()->year; ?>" class="btn btn-primary">></a>
	</div>
</div>


<table class="calendar__table calendar__table--<?= $month->getWeeks(); ?>weeks">
	<?php for ($i = 0; $i < $month->getWeeks(); $i++): ?>
	<tr>
		<?php 
		foreach($month->days as $k => $day): 
			$date = (clone $start)->modify("+" . ($k + $i * 7) . "days");?>
		<td class="<?= $month->withinMonth($date) ? '' : 'calendar__othermonth'; ?>">
			<?php if ($i ===0 ): ?>
				<div class="calendar__weekday"><?= $day; ?></div>
			<?php endif; ?>
			<div class="calendar__day"><?= $date->format('d');  ?></div>
		</td>	
		<?php endforeach; ?>
	</tr>
	<?php endfor; ?>
</table>

</body>
</html>


Ceci est mon Month.php
<?php 

class Month {
		
		public $days = ['Lundi', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi', 'Dimanche'];

		private $months = ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Aout', 'Septembre', 'Octobre', 'Novembre', 'Décembre'];
		private $months2 = [];
		public $month;
		public $year;


		/**
		 * 	Month constructor 
		 * @param int $month Le mois compris entre 1 et 12
		 * @param int $year L'année
		 * @throws \Exception
		 */
		public function __construct(?int $month = null, ?int $year = null)
		{		
				if ($month === null || $month < 1 || $month > 12) {
					$month = intval(date('m'));
				}
				if ($year === null) {
					$year = intval(date('Y'));
				}
				$this->month = $month;
				$this->year = $year;
		}
		
		/**
		 * Renvoie le premier jour du mois
		 * @return \DateTime
		 */

		public function getStartingDay (): \DateTime {
			return new \DateTime("{$this->year}-{$this->month}-01");
		}


		/**
		 * 	Retourne le mois en tout lettre (ex: Mars2018)
		 * @return string
		 */
		public function toString (): string {
				return $this->months[$this->month - 1] . ' ' . $this->year;
		}
		/**
		 * Renvoie le nombre de semaine dans le mois
		 * @return int
		 */
		public function getWeeks (): int {
			$start = $this->getStartingDay();
			$end = (clone $start)->modify('+1 month -1 day');
			$weeks = intval($end->format('W')) - intval($start->format('W')) + 1;
			if ($weeks < 0) {
				$weeks = intval($end->format('W'));
			}
			return $weeks;
		}
		
		/**
		 * Est-ce que le jour est dans le mois en cours
		 * @param \DateTime $date
		 * @return bool
		 */
		public function withinMonth (\DateTime $date): bool {
			return $this->getStartingDay()->format('Y-m') === $date->format('Y-m');
		}
		
		/**
		 * Renvoie le mois suivant
		 * @return Month
		 */
		public function nextMonth () : Month
		{
			$month = $this->month + 1;
			$year = $this->year;
			if ($month > 12) {
				$month = 1;
				$year += 1;
			}
			return new Month($month, $year);
		}
		
		/**
		 * Renvoie le mois précédent
		 * @return Month
		 */

		public function previousMonth () : Month
		{
			$month = $this->month - 1;
			$year = $this->year;
			if ($month < 1) {
				$month = 12;
				$year -= 1;
			}
			return new Month($month, $year);
		}
}	


Et ceci est mon calendar.css
.calendar__table {
	width:  100%;
	height: calc(100vh - 128px);
}

.calendar__table td {
	padding: 10px;
	border: 1px solid #CCC;
	vertical-align: top;
	width: 14.29%;
	height: 20%;
}

.calendar__table--6weeks td {
	height: 16.66%;
}

.calendar__weekday {
	font-weight: bold;
	color: #000;
	font-size: 1.2em;
}

.calendar__day{
	font-size:  1.3em;
	color: #000000
}
.calendar__day2{
	font-size: 1.3em;
	color: #FF0000;
}
.calendar__othermonth .calendar__day {
	opacity: 0.3;
}


Donc mon idée serait de faire une class comme celle la :
.calendar__day{
	font-size:  1.3em;
	color: #000000


Et de regarder si ma $date est dans une variable par exemple $dates2, dans le cas où elle y est j'utiliserais ma class calendar_day2 afin que le texte soit en rouge. Donc pour regarder si $date est dans $dates2 que me conseillez vous d'utiliser ?
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
23 nov. 2021 à 14:42

si ma $date est dans une variable par exemple $dates2, dans le cas où elle y est j'utiliserais ma class calendar_day2

Ta variable $dates2 contient plusieurs dates ?? .. mais je te repose la question... sous quelle forme ??
0
Pierre_6790 Messages postés 16 Date d'inscription lundi 15 novembre 2021 Statut Membre Dernière intervention 23 novembre 2021
23 nov. 2021 à 14:53
Oui elle contiendrait plusieurs dates, que je pourrais ajouter ou enlever dans le code. Sous quelle forme je ne sais pas mais je dirais sous la forme DateTime('Y'-'m'-'j') je sais pas si c'est possible
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652
23 nov. 2021 à 15:27
là... je ne sais plus comment te formuler ma question ...
je vais faire une dernière tentative ...

$dates2 .. sera une variable contenant plusieurs dates tu nous dis...
$dates2 est (enfin.. sera..) une "liste" ...

Quel type de variable, pour toi, est une "liste" ???? moi je penche pour un array ... est-ce bien de cela que tu veux parler ???
Et donc...si tu parles d'array ... dans ce cas, il existe en php la fonction in_array
0
Pierre_6790 Messages postés 16 Date d'inscription lundi 15 novembre 2021 Statut Membre Dernière intervention 23 novembre 2021 > jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024
23 nov. 2021 à 16:12
C'était une de mes questions, de savoir comment je pourrais faire ma liste mais du coup oui ce serait en array. J'aimerais que ça ressemble à quelque chose de ce style :
$dates2 = array('2021-12-12', '2021-13-12');

voila $ quoi ressemblerait ma variable $dates2
et voila comment j'aimerais pouvoir l'utiliser :
<?php 
if (in_array($date->format('Y-d-m'), $dates2)) {
	<div class="calendar__day2"><?= $date->format('d');  ?></div>;
} else {
	<div class="calendar__day"><?= $date->format('d');  ?></div>
}
?>

Seulement, je n'arrive pas à utiliser ma classe en exécution de ma condition if.
0
jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024 4 652 > Pierre_6790 Messages postés 16 Date d'inscription lundi 15 novembre 2021 Statut Membre Dernière intervention 23 novembre 2021
23 nov. 2021 à 16:33
tu as encore oublié des balises PHP dans le code que tu nous montres...
if (in_array($date->format('Y-d-m'), $dates2)) {
?>
	<div class="calendar__day2"><?= $date->format('d');  ?></div>;
<?php
} else {
?>
	<div class="calendar__day"><?= $date->format('d');  ?></div>
<?php
}
0
Pierre_6790 Messages postés 16 Date d'inscription lundi 15 novembre 2021 Statut Membre Dernière intervention 23 novembre 2021 > jordane45 Messages postés 38151 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 2 mai 2024
23 nov. 2021 à 16:38
Merci beaucoup ça marche désormais, vous êtes le meilleurs assistant
0