[RESOLU] Mise en forme des dates

Eléphanteau du PHP | 10 Messages

05 sept. 2023, 15:02

Bonjour à tous,

Grand débutant, j'ai créé une base de données toute simple qui répertorie les informations sur des films.
Dans les lignes qui doivent indiquer les dates de tournage (rentrée à l'aide de la sélection dans un calendrier), la date s'incrémente correctement mais tant qu'elle rien n'est rentré dans la BDD, la date affichée est "30 / 11 / -0001" (ou 0000-00-00 lorsque je ne force pas le format dd / mm / yyyy).

J'aimerais que cela soit plus esthétique en affichant par exemple "A remplir" au lieu de "30 / 11 / -0001" et je coince un peu à ce niveau :D

Voici le code très basique que j'ai actuellement (le code contient plus de cellules mais je n'ai laissé que celles des dates) :
<?php
$i=0;
while($row = mysqli_fetch_array($result)) {
?>

<center><div><b style="font-size: 27px;"><?php echo $row["Nom_du_programme"];?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>

<center><div style="background-color:#0c9ef5; width:60%; font-size: 20px;"><b>Tournage</b></div></center>
<center>
	<table style="width:60%; border: 2px solid #0c9ef5">
		<tr><td style="padding-left: 10px; background-color:#f3f3f3"><b>Début du tournage</b></td> <td style="padding-left: 10px;"><?php echo date('d / m / Y', strtotime($row["Date_de_tournageIN"])); ?></td>
		<tr><td style="padding-left: 10px; background-color:#f3f3f3"><b>Fin du tournage</b></td> <td style="padding-left: 10px;"><?php echo date('d / m / Y', strtotime($row["Date_de_tournageOUT"])); ?></td>
	</table>
</center>

<?php
}
}
mysqli_close($link);
?>

Merci !

Mammouth du PHP | 2703 Messages

05 sept. 2023, 15:33

il faut ajouter un test sur $row["Date_de_tournageIN"], si c'est 0000-00-00 alors afficher un texte, sinon, faire ce qui est fait.

Eléphanteau du PHP | 10 Messages

05 sept. 2023, 15:48

C'est ce que j'avais trouvé comme info sur les forums, mais je n'arrive pas à trouver la bonne formule (et où la placer dans le code) ?

Mammouth du PHP | 2703 Messages

05 sept. 2023, 16:36

un manière simple, en remplaçant
<?php echo date('d / m / Y', strtotime($row["Date_de_tournageIN"])); ?>
par
<?php echo $datedebut; ?>

Eléphanteau du PHP | 10 Messages

05 sept. 2023, 16:58

Si je remplace simplement comme tu l'indiques, cela ne fonctionne pas (la page ne charge même plus).
Et je me demande du coup : comment la date va pouvoir être affichée si le code n'indique plus d'aller la récupérer dans la cellule "Date_de_tournageIN" ?

(J'ai oublié de préciser que les données (dates, nom du film, réal, caméra, etc...) sont enregistrées dans PhpMyAdmin à travers un formulaire à remplir, toujours dans cette Base de donnée.)

Désolé si je ne comprends pas tout, je suis vraiment débutant :lol:
PS : je n'avais pas vu le sujet "SQL et Base de données", peut-être que mon sujet aurait été plus approprié là-bas ?

Avatar du membre
Mammouth du PHP | 1564 Messages

06 sept. 2023, 00:16

@or1 : c'est bien d'aidé mais ta réponse est incomplète, d'où tu sors ta variable $datedebut ?

@FabienB : quelle est la valeur par défaut de ta colonne SQL Date_de_tournageIN ? Je te conseil de la mettre en NULL par défaut, puis de faire une simple vérification/condition PHP :
if($row["Date_de_tournageIN"] === NULL)
echo "A remplir";
else
echo date('d / m / Y', strtotime($row["Date_de_tournageIN"]));

Eléphanteau du PHP | 10 Messages

06 sept. 2023, 10:16

Hello two3d,

Effectivement, je n'avais aucune valeur par défaut dans les colonnes de dates, je me suis justement posé la question hier si je devais mettre quelque chose.
J'ai donc mis NULL et j'ai ajouté ton code, mais la page m'indique toujours "Il y a eu une erreur critique sur ce site. (je précise d'ailleurs que le site est simplement hébergé via Wordpress, si ça peut aider ?)

Mais le problème vient sûrement de la façon dont j'ai modifié le code. J'ai encore du mal à capter comment rajouter le if dans un code 8-| :
<?php
$i=0;
while($row = mysqli_fetch_array($result)) {
?>

<center><div><b style="font-size: 27px;"><?php echo $row["Nom_du_programme"];?>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</b>

<center><div style="background-color:#0c9ef5; width:60%; font-size: 20px;"><b>Tournage</b></div></center>
<center>
  <table style="width:60%; border: 2px solid #0c9ef5">
    <tr><td style="padding-left: 10px; background-color:#f3f3f3"><b>Début du tournage</b></td> <td style="padding-left: 10px;"><?php if($row["Date_de_tournageIN"] === NULL)
echo "A remplir";
else
echo date('d / m / Y', strtotime($row["Date_de_tournageIN"]));></td>
    <tr><td style="padding-left: 10px; background-color:#f3f3f3"><b>Fin du tournage</b></td> <td style="padding-left: 10px;"><?php echo date('d / m / Y', strtotime($row["Date_de_tournageOUT"])); ?></td>
  </table>
</center>

<?php
}
}
mysqli_close($link);
?>

Avatar du membre
Mammouth du PHP | 1564 Messages

06 sept. 2023, 10:32

tu as mal fermé ta balise PHP à la condition :

...ageIN"]));[ici manque le "?"]>...

Eléphanteau du PHP | 10 Messages

06 sept. 2023, 11:05

Arf oui, tout bêtement... :lol:

Malheureusement, j'obtiens toujours le même résultat (30 / 11 / -0001), comme si le NULL n'était pas pris en compte... ?
Je n'ai pas encore fait la modif sur la ligne "Date de tournage OUT" (et les autre lignes Date non présentes dans mon morceau de code ici), et je n'ai aucune différence.
Etonnant #-o

PS : j'ai indiqué la valeur par défaut NULL dans PhpMyAdmin, c'est bien l'endroit auquel tu pensais, two3d ?

Avatar du membre
Mammouth du PHP | 1564 Messages

06 sept. 2023, 12:44

Oui, c'est bien la colonne qui fait mais il te faut savoir que tes lignes déjà présentes dans ta table ne seront pas mises en NULL automatiquement, seulement les nouvelles après avoir renseigné NULL comme défaut, du coup il te faut tester sur une ligne de mettre NULL en modifiant cette ligne tu aura une case à cocher "[ ] NULL", tu coche, tu essaye ;)

Eléphanteau du PHP | 10 Messages

06 sept. 2023, 13:39

Ah mince, donc je dois créer des nouvelles lignes dans PhpmyAdmin ?
Car la case à cocher lorsque je modifie une ligne est bien présente + l'option "Valeur par défaut" que je mets sur NULL.
Car j'ai déjà beaucoup de données enregistrées dans celles déjà existantes :?

Ça se complique déjà un peu plus du coup :lol:

Avatar du membre
Mammouth du PHP | 1564 Messages

06 sept. 2023, 13:55

Tu parlais d'une donnée par défaut : 0000-00-00

Si ta colonne avait cette valeur par défaut avant la mise en place de la valeur par défaut NULL, fais une requête SQL dans phphMyAdmin :

Code : Tout sélectionner

UPDATE ta_table SET Date_de_tournageIN = NULL WHERE Date_de_tournageIN = '0000-00-00'

Eléphanteau du PHP | 10 Messages

06 sept. 2023, 15:49

Oui, cette valeur 0000-00-00 (ou d'ailleurs -62169984000 parfois, en fonction de si je retire le dd / mm /Y, strtotime) s'affiche sur Wordpress si aucune date n'est enregistrée, mais la valeur par défaut était pourtant réglée sur "Aucun(e)" dans Phpmyadmin jusqu'au moment où je l'ai passée sur NULL.

Ton conseil de requête SQL est toujours valable malgré ça ?

Avatar du membre
Mammouth du PHP | 1564 Messages

06 sept. 2023, 16:54

Tu le vois, si tes anciennes valeurs sont 0000-00-00, la requête est toujours valable, si c'est autre chose comme valeur, modifie la requête en remplaçant 0000-00-00 par la valeur en question.

Eléphanteau du PHP | 10 Messages

07 sept. 2023, 11:08

Bonjour two3d, voici le résultat de mes tests :
cela fonctionne (presque !) parfaitement. La table se met à jour comme il faut, j'obtiens la phrase "A remplir" là où je n'ai pas de date mais, par contre, si je décide de finalement supprimer une date sur une fiche de film, le 0000-00-00 revient et je dois alors refaire une requête SQL pour remettre à jour et de nouveau afficher "A remplir".
Pour préciser le contenu du site : les fiches de film sont modifiables à tout moment, et il suffit d'ailleurs juste de modifier une cellule (nom du réal par ex.) pour que le 0000-00-00 revienne dans les cellules de dates encore vides.

Y-t-il un moyen de revenir automatiquement sur la valeur "A remplir" si une date est finalement supprimée, sans avoir besoin de refaire une requête SQL dans phpmyadmin ? (le site est utilisé par plusieurs personnes qui n'ont pas accès aux codes, d'où ma demande d'automatisation :wink: )

En tout cas merci de ton aide, je n'aurais jamais trouvé la requête SQL tout seul :priere: