Afficher résultat selon date (en mois)

Eléphant du PHP | 72 Messages

10 févr. 2006, 11:52

Salut !

Ben j'sais pas si mon titre est clair, donc explications !

Voilà j'ai une liste déroulante où y a tous les mois, je voudrais quand je sélectionne un mois que ça m'affiche tous les champs concernants le mois en questions. Dans ma table, j'ai différents champs, dont 2 champs date, datedebut et datefin, afin de pouvoir chercher des événements à cheval sur plusieurs mois. Si quelqu'un pouvait m'aider et ben ça serait pas de refus !

Merci d'avance !
y a un début à tout !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

10 févr. 2006, 11:54

Précises le type que tu utilises pour les dates dans ta base de données ;)

Eléphant du PHP | 72 Messages

10 févr. 2006, 12:24

Mes champs datedebut et datefin sont au format date, pour l'utilisation dont j'ai besoin ça doit être suffisant (du moins je pense !)
y a un début à tout !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

10 févr. 2006, 12:33

En fonction de ta base, tu dois pouvoir utiliser la fonction MONTH (ou un équivalent) qui te permet de retourner uniquement le mois d'une date.

Tu aurais alors une requête du genre :
SELECT ... FROM maTable WHERE MONTH(dateDebut) <= $moisRecherché AND MONTH(dateFin) >= $moisRecherché

A adapter/améliorer s'il y a plusieurs années possibles, voire si tes périodes ne sont pas du 1er au dernier jour du mois, mais du 10 au 20 par exemple... :)

Eléphant du PHP | 72 Messages

10 févr. 2006, 16:32

Merci Ryle, j'essaye ça et je te redis !
y a un début à tout !

Eléphant du PHP | 74 Messages

16 févr. 2006, 15:23

J'aimerais bien plus d'infos la dessus siouplait :)
Mais avec une seule date, genre dans un menu deroulant on selectionne Janvier et on n'as que les resultats du mois de janvier.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

16 févr. 2006, 21:36

suffit de préciser dans la requete que le mois doit etre égal à 1 (janvier)

month()

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 72 Messages

20 févr. 2006, 10:21

Salut tout le monde !

Ryle, j'ai essayé ce que tu m'as si gentillement expliqué, mais comme je suis une grande débutante je n'arrive pas toujours à bien situer les fonctions et tout et tout... !
Là je comprends pas grand chose, je souhaite faire la même chose que Newbee, quand je sélectionne un mois, ça m'affiche tout ce qui est en rapport avec ce mois. Mais faut vraiment bien m'expliquer car j'ai beaucoup de mal avec le code. Je ne sais plus ce que je dois mettre dans ma page de recherche ainsi que dans celle de mes résultats, enfin bref je suis complétement paumée ! A l'aide !

Merci d'avance.
y a un début à tout !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

21 févr. 2006, 15:58

Que ne comprends-tu pas exactement ? Ce que Ryle a fourni c'est la requête que tu dois faire pour chercher des données d'un mois précis ou entre des mois précis.

Tu sais ce que c'est que les requêtes maintenant ;)

Eléphant du PHP | 72 Messages

21 févr. 2006, 16:08

Oui pour les requêtes je commence à me repérer ! :wink:
Mais ce qui me gêne, c'est que dans ma pagerecherche, j'ai trois listes déroulantes, une pour les mois, les événements et le département, pour l'instant ça va. C'est après que ça se corse, dans la pageresultat, car je ne sais pas comment récupérer la date pour faire ma requête (comme je fais une liste par mois), et pouvoir ainsi selon le mois sélectionné afficher les événements avec descriptif et précision des dates (datedebut et datefin).
Suis-je assez claire, sinon je peux encore détailler !

Merci d'avance !
y a un début à tout !

Avatar du membre
ViPHP
ViPHP | 3008 Messages

21 févr. 2006, 16:12

Plus tu détailles et mieux c'est ;)

Par contre je ne saisis pas trop ton "comme je fais une liste par mois". C'est plutôt un liste pour les 12 mois non ?

Eléphant du PHP | 72 Messages

21 févr. 2006, 16:28

Oui c'est bien une liste pour tous les mois, désolé !

J'ai une table : tb_evenement avec les champs suivants : id_evenement, evenement, descriptif, datedebut (format date), datefin (format date), departement

Pour ma pagerecherche j'ai le code suivant :
<?php require_once('Connections/connexion.php'); ?>
<?php
mysql_select_db($database_connexion, $connexion);
$query_Recordset2 = "SELECT * FROM tb_evenements";
$Recordset2 = mysql_query($query_Recordset2, $connexion) or die(mysql_error());
$row_Recordset2 = mysql_fetch_assoc($Recordset2);
$totalRows_Recordset2 = mysql_num_rows($Recordset2);
?>
<html>
<head>
<title>Document sans titre</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>
<form action="essaievenementresultat.php" method="post" name="recherche" id="recherche">
  <p>p&eacute;riode 
    <select name="num_mois" id="select">
	<option value="1">Janvier</option>
	<option value="2">Février</option>
	<option value="3">Mars</option>
	<option value="4">Avril</option>
	<option value="5">Mai</option>
	<option value="6">Juin</option>
	<option value="7">Juillet</option>
	<option value="8">Aout</option>
	<option value="9">Septembre</option>
	<option value="10">Octobre</option>
	<option value="11">Novembre</option>
	<option value="12">Décembre</option>
    </select>
    evenement 
    <select name="evenement" id="evenement">
      <?php
do {  
?>
      <option value="<?php echo $row_Recordset2['evenement']?>"><?php echo $row_Recordset2['evenement']?></option>
      <?php
} while ($row_Recordset2 = mysql_fetch_assoc($Recordset2));
  $rows = mysql_num_rows($Recordset2);
  if($rows > 0) {
      mysql_data_seek($Recordset2, 0);
	  $row_Recordset2 = mysql_fetch_assoc($Recordset2);
  }
?>
    </select>
    departement 
    <select name="departement2" id="departement2">
      <?php
do {  
?>
      <option value="<?php echo $row_Recordset2['departement']?>"><?php echo $row_Recordset2['departement']?></option>
      <?php
} while ($row_Recordset2 = mysql_fetch_assoc($Recordset2));
  $rows = mysql_num_rows($Recordset2);
  if($rows > 0) {
      mysql_data_seek($Recordset2, 0);
	  $row_Recordset2 = mysql_fetch_assoc($Recordset2);
  }
?>
    </select>
  </p>
  <p> 
    <input type="submit" name="Submit" value="Rechercher">
  </p>
</form>
<p>&nbsp;</p></body>
</html>
<?php
mysql_free_result($Recordset2);
?>
Mais c'est pour ma page résultat, comme je le disais avant, comment récupérer la date en fonction du mois sélectionné, je ne sais pas comment faire.
y a un début à tout !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

21 févr. 2006, 16:59

Lorsque tu vas valider ton formulaire, il va envoyer les données de celui-ci à l'adresse indiquée dans l'attribut action de ce dernier, donc à "essaievenementresultat.php".

La méthode d'envoi étant POST, tu vas pouvoir récupérer les valeurs envoyées dans la variable globale $_POST. C'est un tableau associatif contenant pour chaque champ du formulaire le nom du champ associée la valeur saisie ou selectionnée.

Ainsi sur ta page "essaievenementresultat.php", $_POST['num_mois'] contiendra la valeur du "value" de l'option sélectionnée. Tu peux ainsi connaitre le mois choisis.

De même $_POST['evenement'] et $_POST['departement2'] contiendront les valeurs correspondante selectionnées.

Tu peux ainsi les utiliser dans ta requête avec par exemple un
$sql = "... WHERE tonChampMoisEnBase = MONTH($_POST['num_mois']) ... ";
A adapter avec la requête précédente pour gérer les enregistrement commençant ou finissant en janvier :)

Eléphant du PHP | 72 Messages

22 févr. 2006, 11:47

Bonjour !

Ryle merci de ton intervention, mais le problème c'est que je n'ai pas vraiment compris comment fonctionnait la requête :
$sql = "... WHERE tonChampMoisEnBase = MONTH($_POST['num_mois']) ... ";
Quand tu dis "tonChampMoisEnBase" c'est bien des champs datedebut ou datefin dont il s'agit ? Désolé mais il me faut plus d'explications car je suis très nulle ! :shock:
Aussi, je ne l'avais pas spécifié avant, à quel moment je transforme le format us pour les dates afin de pouvoir les afficher en fr dans ma page résultat ?
Encore merci de tout cette aide ! :lol:
y a un début à tout !

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

22 févr. 2006, 15:33

En effet, il s'agit bien de tes deux champs datedebut et datefin (je me suis d'ailleurs planté dans la derniere requête que j'ai donné, le month() est pas du bon côté :)

Avec tout plein détail ça nous donne ceci :
// $_POST['num_mois'] contient le mois sélectionné par l'utilisateur

// La requête SQL recherche (SELECT) les entrées (champ1, champ2, ...) dans la table maTable 
$sql = "SELECT champ1, champ2, ..., datedebut, datefin FROM maTable "; 
// DONT le mois de la date "début" est supérieur ou égal au mois sélectionné
$sql.= " WHERE MONTH(dateDebut) >= $_POST['num_mois'] "; 
// ET le mois de la date "fin" est inférieur ou égal au mois sélectionné 
$sql.= " AND MONTH(dateFin) <= $_POST['num_mois'] "; 
Concernant ta deuxième question, dans MySql, les dates sont au format AAAA-MM-JJ (ce qui n'est pas le format us : MM-JJ-AAAA). Pour l'affichage, il n'y a pas de règle quant au moment ou il faut les transformer. En ce qui me concerne et pour me simplifier la tâche, je les change au format JJ/MM/AAAA juste après l'exéction de la requête, au moment ou je viens lire le champ, comme ça je suis toujours sûr du format que je manipule dans mes variables, mais tu peux tout aussi bien ne le faire qu'au moment où tu l'affiches :)

Prépare toi une petite fonction pour basculer d'un format à l'autre. C'est quelque chose que l'on fait régulièrement dès le moment où on manipule des dates ;)

N'hésites pas à me le dire si je ne suis pas clair ou si tu as besoin de plus d'infos :)