Recherche d'informations

Résolu
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

  1. Modérateur
    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
    1. 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
      1. Modérateur
        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
    2. 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
      1. Modérateur

        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
    3. 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
      1. Modérateur
        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
      2. @jordane45C'é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
      3. Modérateur
        @Pierre_6790tu 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
      4. @jordane45Merci beaucoup ça marche désormais, vous êtes le meilleurs assistant
        0