[RESOLU] Problème $date du jour. Créer une variable $today pour comparaison

johanna
Invité n'ayant pas de compte PHPfrance

20 mai 2015, 00:32

Bonjour,

Je suis entrain de créer un site annuaire, et il y a une partie "Agenda". Dans celle-ci les personnes membres peuvent ajouter des événements et après ces événements apparaissent chacun dans des onglets rangés par :
- en ce moment
- a venir
- passé.

Mon problème c'est que mes événements "en ce moment" ne s'affichent pas et je ne comprends pas pourquoi. J'ai regardé sur plein de forum, de site et sur la nomemclature php mais je n'ai pas trouvé d'où vient le problème.

Voici mon code qui ne marche pas pour la catégorie "En ce moment cela affiche les événement à venir or ce n'est pas le but :

Code : Tout sélectionner

<h2 class="souligne">En ce moment</h2> <?php $today = date("d-m-Y"); $reponse = $pdo->query("SELECT * FROM agenda WHERE duree = '$today'"); $donnees = $reponse->fetch(); // On affiche chaque entrée une à une while ($donnees =$reponse->fetch(PDO::FETCH_BOTH)) { ?> <h3><?php echo $donnees['titre']; ?></h3> <p><strong>Lieu</strong> : <?php echo $donnees['lieu']; ?></p>< <p><strong>Date</strong> : <?php echo $donnees['duree']; ?></p> <p><?php echo $donnees['description']; ?></p> <?php } $reponse->closeCursor(); // Termine le traitement de la requête ?>
Et maintenant voici la catégorie "a venir" qui elle fonctionne et affiche bien les événement qui n'ont pas encore eu lieu

Code : Tout sélectionner

<h2 class="souligne">Evénements à venir</h2> <?php $today = date("d-m-Y"); $reponse = $pdo->query("SELECT * FROM agenda WHERE duree > '$today'"); $donnees = $reponse->fetch(); while ($donnees = $reponse->fetch(PDO::FETCH_BOTH)) { ?> <h3><?php echo $donnees['titre']; ?></h3> <p><strong>Lieu</strong> : <?php echo $donnees['lieu']; ?></p> <p><strong>Date</strong> : <?php echo $donnees['duree']; ?></p> <p><?php echo $donnees['description']; ?></p> <br/> <?php } $reponse->closeCursor(); // Termine le traitement de la requête ?>
Merci de votre aide

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

20 mai 2015, 00:51

Bonjour,

Es-tu sûr que dans ta table SQL, la date de tes évènement est stocké sous la forme d-m-Y ?
Car généralement, c'est stocké sous forme Y-m-d ou à défaut sous forme de timestamp.

Sinon pour débuguer ce que tu peux faire c'est un echo de ta requête SQL et la tester dans phpmyadmin pour voir ce qui cloche, car je pense que c'est davantage un problème de SQL que de PHP.
Quand tout le reste a échoué, lisez le mode d'emploi...

johanna
Invité n'ayant pas de compte PHPfrance

20 mai 2015, 01:13

merci pour ta réponse, donc normalement selon toi tel que mon code est écrit il n'y a pas de problème?
Le " = " sur ce bout de code est bien une forme correcte pour comparer la date avec ma valeur dans ma base de donnée ?

Code : Tout sélectionner

$reponse = $pdo->query("SELECT * FROM agenda WHERE duree = '$today'");
Je vais essayer de faire un echo pour voir ce que cela me donne, je pensais plutôt que cela venait de ce égal du coup j'ai peut-être fait l'impasse sur quelque chose en SQL. Merci pour cette nouvelle orientation.

johanna
Invité n'ayant pas de compte PHPfrance

20 mai 2015, 01:57

Effectivement ce n'était pas au bon format, j'ai donc changé mon format dans mon code pour qu'il corresponde à celui de la base de donné "Y m d", mais là c'est pire car plus rien ne marche. Ni les event à venir ni ceux du moment.

Code : Tout sélectionner

<h2 class="souligne">En ce moment</h2> <?php $today = date("Y-m-d"); $reponse = $pdo->query("SELECT * FROM agenda WHERE duree = '$today'"); $donnees = $reponse->fetch(); // On affiche chaque entrée une à une while ($donnees = $reponse->fetch(PDO::FETCH_BOTH)) { ?> <h3><?php echo $donnees['titre']; ?></h3> <p><strong>Lieu</strong> : <?php echo $donnees['lieu']; ?></p> <p><strong>Date</strong> : <?php echo $donnees['duree']; ?></p> <p><?php echo $donnees['description']; ?></p> <br/> <?php } $reponse->closeCursor(); // Termine le traitement de la requête ?> <h2 class="souligne">Evénements à venir</h2> <?php $today = date("Y-m-d"); $reponse = $pdo->query("SELECT * FROM agenda WHERE duree > '$today'"); $donnees = $reponse->fetch(); // On affiche chaque entrée une à une while ($donnees = $reponse->fetch(PDO::FETCH_BOTH)) { ?> <h3><?php echo $donnees['titre']; ?></h3> <p><strong>Lieu</strong> : <?php echo $donnees['lieu']; ?></p> <p><strong>Date</strong> : <?php echo $donnees['duree']; ?></p> <p><?php echo $donnees['description']; ?></p> <br/> <?php } $reponse->closeCursor(); // Termine le traitement de la requête ?>

Mammouth du PHP | 688 Messages

20 mai 2015, 02:07

un exemple du contenu de la table agenda et surtout du champ duree, stp.

johanna
Invité n'ayant pas de compte PHPfrance

20 mai 2015, 10:55

Bonjour,

Alors ma table agenda se présente comme tel :
NOM - TYPE - AUTRE
idEvent - int - (primary key, AI)
titre - varchar
lieu - varchar
duree - date
description - longtext

Voici mon champ dans mon formulaire pour la date

Code : Tout sélectionner

<label for="duree" class="col-sm-4">Durée</label> <input type="date" name="duree" id="duree" class="form-control" value="2015-05-19" />
et enfin mon traitement php pour insérer les éléments dans la base de donnée

Code : Tout sélectionner

$req = $pdo->prepare('INSERT INTO agenda (titre, lieu, duree, description) VALUES(?, ?, ?, ?)'); $req->execute(array($_POST['titre'], $_POST['lieu'], $_POST['duree'], $_POST['description']));
Merci pour votre aide

johanna
Invité n'ayant pas de compte PHPfrance

20 mai 2015, 11:05

Sujet Résolu:

en fait cela venait de :

Code : Tout sélectionner

$donnees = $reponse->fetch(); // On affiche chaque entrée une à une while($donnees =$reponse->fetch(PDO::FETCH_BOTH))
Il y avait une répétition des fetch, il m'a fallu remplacer par

Code : Tout sélectionner

while($donnees =$reponse->fetch(PDO::FETCH_BOTH))
et ça fonctionne.

Merci de votre aide