Recherche d'informations

Résolu
Pierre_6790 -  
 Pierre_6790 -
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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
     
    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
  2. Pierre_6790
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
  3. Pierre_6790
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       

      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
  4. Pierre_6790
     
    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. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      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
      1. Pierre_6790 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        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
      2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830 > Pierre_6790
         
        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
      3. Pierre_6790 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Merci beaucoup ça marche désormais, vous êtes le meilleurs assistant
        0