requetes en fonction d'une date

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : requetes en fonction d'une date

par coxine » 22 mars 2006, 15:35

zut désolee je n'étais pas identifiée ! :oops:

par Invité » 22 mars 2006, 15:34

merci !
pffff je n'avais pas saisi ton aide en fait, que "n" (=mois 1, 2, 3) remplace "m" (=mois 01, 02, 03).... ](*,)
Effectivement, tout est plus simple comme ça :oops: au moins j'aurais appris à changer un format de date dans une requete !!! :wink:
J'aurais du mieux exprimer que mon besoin était d'afficher, d'entrée, les événements du mois en cours par défaut ! :lol:
bon, le principal est que ma page tourne. Je peux même afficher des événements du mois de janvier 2007 grâce à ton aide sur mois suivant. et afficher : pas d'événements ce mois-ci, si rien.

Merci encore de ta patience oucékiléou !
<?php if ($totalRows_session == 0) { // Afficher ce message si pas d'événements programmés ?>
		  <br /><br /><p>Actuellement aucun événement n'est programmé ce mois-ci.</p>
          <?php } // Fin du message ?>
:)

par ouckileou » 22 mars 2006, 14:59

Non mais c'était pas dis méchamment

Mais on doit pas parler de la même chose des fois

Je réitère ma question donc, A quoi te sert cette requête ?
$query_session = "SELECT DATE_FORMAT('date_debut', '%l %j-%n-%Y') AS date_debut FROM sessions";
Si c'est juste pour récupérer le mois courant sans les 0, alors suis le conseil qui était de regarder avec date() (qui est une fonction PHP), comment récupérer un mois sans le 0
Comme ça :
$mois = date('n')
Car pas besoin d'exécuter une requête SQL juste pour ça, c'est trop lourd

Il n'est pas question de réfléchir tout bas, mais parfois j'ai parlé d'un truc, et tu as répondu en parlant d'autre chose, c'est un peu déconcertant à la fin, et on ne sait plus sur quel problème on est

par coxine » 22 mars 2006, 14:53

Ben si je lis attentivement !
La preuve, tu m'as expliqué que le souci de l'index 03 (qui est le mois en cours) venait peut-être du fait que le format de date n'était pas bon par rapport au code.
C'est la raison pour laquelle j'ai fait une requete avec DATE_FORMAT.
Le problème me semblait réglé dans la mesure où lorsqu'on arrive sur la page "agenda.php" depuis l'index, donc sans passage dans l'url d'une date particulière, j'ai bien le message "les événements du mois de mars" qui s'affiche et en dessous le tableau des événements de mars.
Lorsqu'on arrive sur la page la première fois, je souhaite afficher les événements du mois en cours. Sans clic, ni rien.
D'où ma requete du départ...avec la variable $mois = date('m').
Il est vrai, qu'au fil de mes réflexions, je rencontre des problèmes qui n'avaient rien à voir avec le pb de départ, et je m'en excuse.
Peut-être devrais-je réfléchir tout bas ?
Désolée.........................

par ouckileou » 22 mars 2006, 14:48

Je vais être honnête, je ne comprend plus rien à tes problèmes, et j'ai l'impression que tu ne lis les messages qu'en diagonale :

tu nous parles d'un problème d'index, dans un tableau PHP, je te dis que ça vient peut-être du zéro et te conseille d'aller voir la doc de la fonction date() ici : http://fr.php.net/manual/fr/function.date.php

Et là, retour sur les requêtes SQL, quel est le rapport ?

C'est à partir du mois transmis par PHP que tu vas créer ta requête SQL
Ici ce que tu fais ne sert à rien (à moins que tu ais enlevé du code entre les deux) puisque tu écrases la variable $query_session la deuxième fois
$query_session = "SELECT DATE_FORMAT('date_debut', '%l %j-%n-%Y') AS date_debut FROM sessions"; // a quoi sert cette requête ???

$query_session = "SELECT ID, cours_id, sessions.nbre_participants, date_debut, cours, intitule, description, lieu, cours, horaires
FROM sessions, cours
WHERE cours_id=cours AND (MONTH(date_debut) = $mois)
ORDER BY date_debut ASC ";
Moi je te disais d'utiliser date("n"), au lieu de date("m"), pour avoir les mois sans les 0

Donc je pense que tu mélanges tout, et que finalement nous aussi
Si tu pouvais repréciser tes problèmes, les traiter séparément, sans passer de l'un à l'autre et en lisant bien nos messages, ça irait beaucoup mieux

par coxine » 22 mars 2006, 13:07

Bon, point par point :
J'ai pensé à ça :
Faire un DATE_FORMAT dans le sélect :
$query_session = "SELECT sessions.ID, sessions.cours_id, DATE_FORMAT('sessions.date_debut','%l %j-%n-%Y') AS 'sessions.date_debut', sessions.nbre_participants, cours, intitule, description, lieu, cours, horaires, 
FROM sessions, evenement 
WHERE sessions.cours_id=evenement.cours AND (MONTH(date_debut) = $mois) 
ORDER BY date_debut ASC ";
c'est un début...car bien évidemment j'ai des erreurs de syntaxe :D
Le %l, correspondrait au mois sans le "0"

A y est !!! EdiT plus tard :
mysql_select_db($database_oberte, $oberte);
$query_session = "SELECT DATE_FORMAT('date_debut', '%l %j-%n-%Y') AS date_debut FROM sessions";
$query_session = "SELECT ID, cours_id, sessions.nbre_participants, date_debut, cours, intitule, description, lieu, cours, horaires
FROM sessions, cours 
WHERE cours_id=cours AND (MONTH(date_debut) = $mois) 
ORDER BY date_debut ASC ";

par coxine » 22 mars 2006, 12:12

ah ça viendrait de là alors !
Car je ne comprenais pas, que les mois suivants s'affichent bien !
je vais postasser alors :wink:

par ouckileou » 22 mars 2006, 12:09

Les conditions....on est bien d'accord, figurent AVANT la requête dans la base, sinon, la variable est inconnue ?
Celles qui permettent de récupérer le mois qui va être sélectionné, et de l'ajuster en cas de problème : oui
en changeant les paramètres...
Je me retrouve avec la même erreur de index: "03"
Notice: Undefined index: 03 in d:\programmes\easyphp1-8\www\www\agenda.php on line 196
Je pensais que la variable $mois avait été définie plus haut lors de la requête !
Cette erreur ne veut pas dire que $mois n'existe pas, elle veut dire qu'un index de tableau n'est pas définir, en l'occurence 03
C'est peut-être dû au zéro, au fait qu'il attend 3 tout court

fais des essais, regarde dans la doc de date() pour récupérer le numéro du mois sans le 0

par coxine » 22 mars 2006, 12:02

merci de prendre le temps !
Les conditions....on est bien d'accord, figurent AVANT la requête dans la base, sinon, la variable est inconnue ?
en changeant les paramètres...
Je me retrouve avec la même erreur de index: "03"
en revanche, lorsque je clique sur les liens précédents et suivants....les variables fonctionnent correctement.
Donc cela vient du fait, que le mois qui s'affiche par défaut n'est pas dans l'url ?

par ouckileou » 22 mars 2006, 11:40

Ce serait peut-être plus clair en utilisant des variables différentes, plutôt que des calculs de partout... :roll:

Exemple :
<?php 
// si on a récupéré une valeur dans l'url, on la garde, sinon on prend le mois en cours par défaut
// explication de l'opérateur ternaire : http://www.phpfrance.com/forums/voir_sujet-14111.php
$moisSelectionne = (isset($_GET['moisCourant']))?$_GET['moisCourant']:date("m");

// si jamais le mois transmis était incorrect (modification dans l'url par quelqu'un)
// on reprend le mois actuel
if ($moisSelectionne < 1 || $moisSelectionne > 12) {
	$moisSelectionne = date("m");
}

// petits tests pour avoir mois précédent et mois courant
if ($moisSelectionne == 1) {
	$moisPrecedent = 12;
} else {
	$moisPrecedent = $moisSelectionne - 1;
}
if ($moisSelectionne == 12) {
	$moisSuivant = 1;
} else {
	$moisSuivant = $moisSelectionne + 1;
}

$libMois = array(1 => "Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");

?>
Les prochains événements en <?php echo $libMois[$moisSelectionne]; ?>
<a href="agenda.php?mois=<?php echo $moisPrecedent; ?>">Mois précédent</a> -
<a href="agenda.php?mois=<?php echo $moisSuivant; ?>">Mois suivant</a>
En faisant des echo de contrôle, tu aurais pu voir la valeur de $mois à tout moment, savoir si elle était bien affectée

par coxine » 22 mars 2006, 11:32

je suis larguée
La ligne 196 c'est le tableau des libellés, et ensuite l'appel du libellé :
<?= $libMois[$mois] ?>
:cry: je m'enmèle les pinceaux...trop dur pour moi

par ouckileou » 22 mars 2006, 11:27

Je ne sais pas si tu as bien compris : le problème de ta condition c'est que tu compares un libellé et un nombre.. ça ne marchera jamais

C'est où la ligne 196 ?
La variable n'a pas été définie grâce à la requête, elle est utilisée dans la requête.
La variable $mois contient ce que tu as récupéré dans l'url, ou s'il n'y avait rien, le mois en cours.

par coxine » 22 mars 2006, 11:17

je vais déjà m'attarder sur la condition
:oops:
effectivement je vois mieux...
que la traduction est
si Fevrier ==11
car les liens se suivent....
Donc il faudrait que je pose la condition après les liens ?
if $mois==12 else....c'est ça ?

d'autre part, si je fais débuter le tableau à 1 de cette façon :
<?php 
		$libMois = array(1 =>"Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"); ?><span class="Style20"> Les prochains cours en <b><?= $libMois[$mois] ?></b> - inscrivez vous !</span>
		<img src="img/Wi006232.gif" width="32" height="32" />
      <p align="center"><a href="agenda.php?mois=<?= ($mois-1) ?>">Mois précédent</a> - <a href="agenda.php?mois=<?= ($mois+1) ?>">Mois suivant</a>
j'ai l'erreur suivante :
Les prochains cours en
Notice: Undefined index: 03 in d:\programmes\easyphp1-8\www\www\agenda.php on line 196
Je pensais que la variable $mois avait été définie plus haut lors de la requête ! :(
Je suis désolée de vous soliciter comme ça, mais j'aimerais vraiment comprendre le pourquoi !

par ouckileou » 22 mars 2006, 10:45

Sans voir le SQL généré on ne va pas pouvoir t'aider beaucoup sur ton problème de requête :?

Pour la condition :
$libMois = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre");

if ($libMois[$mois-1] == 11) { }
Je traduis :
Si Février == 11 Alors

...

De plus ici, ton tableau commence à 0, et non 1, ce serait plus pratique de le faire commencer à 1 non ?
$libMois = array(1 => "Janvier", "Février", ...
;)

par coxine » 22 mars 2006, 10:11

ok merchi !
Mais je dois m'embrouiller avec les quotes, car j'ai une erreur de syntaxe pres de ') ORDER BY date_debut ASC' à la ligne 3.
D'autre part, j'ai pris en compte effectivement qu'au mois de décembre, le lien suivant ne pas va fonctionner.
Donc j'ai placé la condition comme ceci, ça plante tout
Pouvez-vous me dire où j'ai fait l'erreur ?
<?php $libMois = array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"); ?>
Les prochains événements en <?= $libMois[$mois-1] ?>
<a href="agenda.php?mois=<?= ($mois-1) ?>">Mois précédent</a> - 
<?php if ($libMois[$mois-1] == 11) 
    {echo '<a href="agenda.php?mois=<?= ($mois-11)?>">Mois suivant</a>';
     } 
     else {
     echo '<a href="agenda.php?mois=<?= ($mois+1) ?>">Mois suivant</a>';}?>
Mercii