Page 1 sur 1

Afficher le champ uniquement si date après 2020

Posté : 05 avr. 2021, 20:32
par wagscd
Bonjour à toutes et à tous,

J'ai un champ avec des dates. Je voudrais qu'il n'affiche que les dates à partir du 01-01-2020

J'ai tenté ceci mais ça ne fonctionne pas. Il m'affiche tout.
<?php 
                            if ($date_creation_nom_bot > 2020-01-01) {
                                echo date('d-m-Y',strtotime($val['date_creation_nom_bot']));
                                }
 ?>
Merci d'avance pour votre aide.

Bonne soirée.

Re: Afficher le champ uniquement si date après 2020

Posté : 05 avr. 2021, 20:47
par or 1
if ($date_creation_nom_bot > '2020-01-01') {

Re: Afficher le champ uniquement si date après 2020

Posté : 06 avr. 2021, 07:02
par wagscd
Bonjour or 1,

Merci pour ta réponse.

J'avais pas défini de variable :(

Donc voici le code mais ça ne fonctionne pas.

<?php 
                            $date_creation_nom_bot = ['date_creation_nom_bot'];
                            if ($date_creation_nom_bot > '2021-01-01') {
                                echo date('d-m-Y',strtotime($val['date_creation_nom_bot']));
                                }
                            ?>
J'ai essayé avec 01-01-2021 aussi mais le résultat est le même.

En fait, je voudrais faire cela parce que j'ai un champs date en mysql mais je n'arrive pas à ce qu'il reste vide si il n'y a pas de données.
Du coup il m'indique 30-11--0001 ou 31-12-1969....

J'ai essayé de modifié en mysql mais rien n'y fait.

Merci.

Je vous souhaite une bonne journée.

Re: Afficher le champ uniquement si date après 2020

Posté : 06 avr. 2021, 11:34
par Ryle
Hello !

Voici un sujet incontournable du forum FAQ qui pourrait bien t'aider : Quelques petites manipulations avec les dates (PHP/MySQL) ;)

A noter que $date_creation_nom_bot = ['date_creation_nom_bot']; a pour effet de créer un tableau contenant la chaine 'date_creation_nom_bot' dans ta variable $date_creation_nom_bot, alors que $val['date_creation_nom_bot'] retourne la valeur du tableau $val située à l'index 'date_creation_nom_bot' :-*

Re: Afficher le champ uniquement si date après 2020

Posté : 06 avr. 2021, 11:58
par wagscd
Bonjour Ryle,

Merci pour ta réponse.

Oui j'ai lu ce post concernant les dates.
J'avoue ne pas encore m'être penché sur certains soucis de date car j'ai tellement de points à peaufiner qu'il est dans la liste mais j'approche ;) ;)

Je ne sais pas si je m'y prends bien puisque j'estime que c'est une ruse mais je n'arrive pas à faire dans mysql un champs date vide.
Il me met toujours une date.

J'ai fouillé, même sur les sites anglais et je ne trouve pas de solutions.

Donc l'idée du si avant telle date, tu affiches pas.

Etant ultra novice en PHP, je fouille beaucoup et tente de prendre les infos par rapport à mes soucis et souvent, je me mélange les pinceaux.

Donc si je comprends ta "remarque" (c'est positif dans mon esprit ;) ;) )

Je n'ai pas besoin de la $date_creation_nom_bot ?

J'avoue être totalement perdu tant j'ai cherché mais rien compris à ce qui m'était proposé.

J'ai essayé avec le nom du champs mais ça fonctionne pas non plus.

Merci pour votre temps et aides.

Bonne journée.

Re: Afficher le champ uniquement si date après 2020

Posté : 06 avr. 2021, 12:03
par wagscd
Ok je pense avoir une piste que je comprends et que je pourrais appliquée mais je dois partir.

Je vous tiens au courant.

Merci ;)

Re: Afficher le champ uniquement si date après 2020

Posté : 06 avr. 2021, 12:34
par Ryle
Le problème est peut être effectivement au niveau du paramétrage de la colonne date en base de données... il faudrait vérifier que celle-ci n'est pas spécifiée à NOT NULL, auquel cas elle n'accepte effectivement pas de ne pas avoir de date (et le cas échéant, modifier la structure de la table pour autoriser la valeur null devrait répondre à ton besoin)

Il faut ensuite voir comment tu alimentes cette table. Est-ce que tu insères toujours une date dans cette table (ce qui ne changera rien au problème vu que tu auras toujours une date dans ce champ) ou est-ce que tu passes une valeur null ou vide s'il n'y a pas de date ? (qui dès lors devrait être correctement enregistrée si la structure de la table le permet)

Enfin, le sujet FAQ a surtout pour but de te montrer comment sont construites les dates dans MySQL (format ISO : AAAA-MM-JJ) et dans php par rapport au format standard (JJ/MM/AAAA). Pour pouvoir les comparer, il faut d'abord les mettre au même format. Mais tu peux aussi directement limiter les enregistrements retournés directement dans ta requête SQL avec une clause WHERE et une condition sur la date... :)

Re: Afficher le champ uniquement si date après 2020

Posté : 06 avr. 2021, 18:53
par wagscd
Re bonjour,

Je te remercie pour ta réponse complète.

Voici quelques copies d'écran.

La config de ce fameux champ
Image

Image

Ce qui donne bien un champ vide (ne pas porter attention sur le nom Vide (c'est un test)

Image

Et voilà ce que ça doit sur mon site

Image

Et le code qui affiche (avec le fameux if qui fonctionne pas)
<?php 
					if(count($userData)>0){
						$s	=	'';
						foreach($userData as $val){
							$s++;
					?>
					
                    <tr>
						
                        <td align="center">      
                            <a href="bot-infos-complet.php?editId=<?php echo $val['id_nom_bot'];?>" class="text-primary"> <?php echo $val['nom_bot'];?> </a>
                        </td>
						
                        <td align="center">
                            
                            <?php 
                            $date_creation_nom_bot = ['date_creation_nom_bot'];
                            if ($date_creation_nom_bot > '2021-01-01') {
                                echo date('d-m-Y',strtotime($val['date_creation_nom_bot']));
                                }
                            ?>
                        
                        
                        </td>
et le $userData
$userData	=	$db->getAllRecords('tbl_nom_bot','*',$condition,'ORDER BY nom_bot ASC');
Merci d'avance pour vos réponses.

Re: Afficher le champ uniquement si date après 2020

Posté : 06 avr. 2021, 19:25
par or 1
if ($date_creation_nom_bot != null) {

Re: Afficher le champ uniquement si date après 2020

Posté : 07 avr. 2021, 07:25
par wagscd
Bonjour à tous,

Alors ....

@or 1

Ce que tu proposes ne fonctionne pas. J'ai toujours toutes les dates d'affichées.
<?php 
                            $date_creation_nom_bot = ['date_creation_nom_bot'];
                            if ($date_creation_nom_bot != null) {
                                echo date('d-m-Y',strtotime($val['date_creation_nom_bot']));
                                }
                            ?>

Par contre avec le = seulement, je n'ai plus rien du tout qui s'affiche
<?php 
                            $date_creation_nom_bot = ['date_creation_nom_bot'];
                            if ($date_creation_nom_bot = null) {
                                echo date('d-m-Y',strtotime($val['date_creation_nom_bot']));
                                }
                            ?>
J'ai essayé ceci sur base de mes recherches mais .... non (j'ai inversé la date aussi)
 <?php 
                            $date_creation_nom_bot = 'date_creation_nom_bot';
                            $date_limite = strtotime('01-01-2021');
                            if ($date_creation_nom_bot > $date_limite) {
                                echo date('d-m-Y',strtotime($val['date_creation_nom_bot']));
                                }
                            ?>
Merci pour votre patience ;)

Re: Afficher le champ uniquement si date après 2020

Posté : 07 avr. 2021, 10:02
par Ryle
Hello !

Il est normal que le "=" seul ne te donne aucun résultat, il s'agit d'un opérateur d'affectation, c'est à dire que tu mets la valeur de droite dans la variable de gauche. Pour comparer deux valeurs, il faut utiliser "==" (identique) ou "!=" (différent).

Mais ton soucis vient de la valeur que tu affectes à ta variable ici :
$date_creation_nom_bot = ['date_creation_nom_bot'];
Si tu affiche ta variable $date_creation_nom_bot à l'écran avec un echo, tu verras qu'elle ne contient pas du tout l'information que tu attends :)

Comme indiqué plus haut, en php, ['date_creation_nom_bot'] est un tableau contenant une valeur, la chaine de caractère 'date_creation_nom_bot'.
Alors que ce que tu veux comparer (et donc affecter à ta variable $date_creation_nom_bot, c'est l'information qui provient de ta base de données et qui se trouve dans ta variable $val :
$date_creation_nom_bot = $val['date_creation_nom_bot'];
Si tu affiches la valeur de $date_creation_nom_bot avec un echo, tu verras alors la différence lorsque l'enregistrement contient une date ou non et tu pourras comparer tes deux valeurs correctement ;)

Re: Afficher le champ uniquement si date après 2020

Posté : 07 avr. 2021, 16:06
par wagscd
Merci Ryle pour toutes ces explications que mon pauvre esprit faible en php comprend.
Si tu affiche ta variable $date_creation_nom_bot à l'écran avec un echo, tu verras qu'elle ne contient pas du tout l'information que tu attends :)
Effectivement, on va dire que c'est très littéraire ;) ;)
Si tu affiches la valeur de $date_creation_nom_bot avec un echo, tu verras alors la différence lorsque l'enregistrement contient une date ou non et tu pourras comparer tes deux valeurs correctement
Effectivement tout de suite mieux.

J'ai donc fait ceci pour simplifier les choses dans un premier temps.
 $date_creation_nom_bot = $val['date_creation_nom_bot'];
                            echo $date_creation_nom_bot;
Et oh magie, les 0000-00-00 restent 0000-00-00 et les vides ne se transforment pas en 31-12-1969.

Par contre, je suis toujours en format yyyy-mm-dd.
J'ai essayé de modifier avec strtotime mais ça me fait à nouveau le problème de mauvais affichage.

Je vais relire dans la soirée le lien que tu m'as conseillé concernant les dates.

Un grand merci.

Re: Afficher le champ uniquement si date après 2020

Posté : 07 avr. 2021, 16:13
par or 1
<?php 
if ($date_creation_nom_bot > '2021-01-01') {
                                echo date('d-m-Y',strtotime($val['date_creation_nom_bot']));
                                }
                            ?>
si je reprend ton code d'hier :

$val['date_creation_nom_bot'] = "2019-01-02";
echo date('d-m-Y',strtotime($val['date_creation_nom_bot']));

cela me donne bien une date correcte.

Re: Afficher le champ uniquement si date après 2020

Posté : 07 avr. 2021, 18:51
par wagscd
Effectivement cela fonctionne parfaitement maintenant.
Et surtout j'ai compris l'importance du $val et son fonctionnement dans ce code.

Un très grand merci à vous deux.

Bonne soirée.