Page 1 sur 1

systeme de filtre par date

Posté : 11 févr. 2014, 16:39
par blinz
Bonjour à toutes et a tous, j'ai créer un site d'annonce en quelque sorte mon soucis aujourd'hui est pour mettre en place un systeme de filtre.
Je m'explique mes annonces s'affiche par l'appel à ma base de donnée et affiche toutes les annonces.
J'aimerais que l'utilisateur puisse filtrer sa recherche par un bouton : aujourd'hui; un bouton: demain et un bouton: ce week- end. comment procéder svp.
Merci pour votre aide à venir

Re: systeme de filtre par date

Posté : 11 févr. 2014, 23:44
par moogli
Salut,

Il te faut ajouter un un prédicat dans la requête.
Sans plus d'info de ta part on ne peux pas trop t'aider.

En gros : select * from laTable where leChampDate= now()

@+

Re: systeme de filtre par date

Posté : 20 févr. 2014, 20:08
par blinz
Salut,
Je reviens à la charge car petit problème.
Je cherche donc a faire un filtre avec 4 boutons: Toutes les annonces, aujourd'hui, demain, ce week-end.
Je travaille avec une bdd et pour mes dates de mes annonces j'ai un champ de type DATETIME

Voici un bout du code, je vous évite le reste :
<?php 
			while($loisirs=mysql_fetch_array($resultat)) {   ?>
			<?php $date_sortie = DateTime::createFromFormat('Y-m-d', $loisirs['date_debut_sortie']);?>
        	<?php $date = DateTime::createFromFormat('Y-m-d H:i:s', $loisirs['date_debut_sortie']);?>
        	<?php $datef = DateTime::createFromFormat('Y-m-d H:i:s', $loisirs['date_fin_sortie']);?>
        	<?php $diff = floor(($datef->getTimestamp() - $date->getTimestamp())/86400) ;?>
    	<div class="annonce_wrap">
        	<div class="annonce_photo"><?php if(!empty($loisirs['photo'])){?><img border=1 solid #a8a8a8 src="img/annonce/petite/<?php echo $loisirs['photo'];?>" ><?php }?></div>
          <div class="annonce_date"><?php echo ucfirst($jour[$date->format('N')]); ?> <?php echo $date->format('d'); ?> <?php echo ucfirst($mois[$date->format('n')]); ?> - <?php echo $date->format('Y'); ?> au
						<?php echo ucfirst($jour[$datef->format('N')]); ?> <?php echo $datef->format('d'); ?> <?php echo ucfirst($mois[$datef->format('n')]); ?> - <?php echo $datef->format('Y'); ?></div>
          <div class="annonce_titre"><?php echo $loisirs['titre']; ?></div>
Comment procéder svp, merci à tous

Re: systeme de filtre par date

Posté : 21 févr. 2014, 15:03
par Aureusms
Comme je ne vois pas ni le code pour les boutons ni celui de la requête, je te donne ma piste : il te faut envoyer des données vers le serveur (via un formulaire par exemple) pour donner la possibilité à l'utilisateur de choisir sa date :
<form mode="post" >
Aujourd'hui <input type="radio" name="date" value="aujourdhui" > 
<br />
Demain <input type="radio" name="date" value="demain" >  
<br />
Ce week-end <input type="radio" name="date" value="we" > 
<input type="submit" value"=Envoyer" >
</form>
Ensuite tu récupères la valeur :
$typeDate = $_POST["date"];
Tu vérifies si ce que tu attends ou sinon tu lui donnes une valeur par défaut (sécurité) :
$typeDate = (in_array($typeDate, array("aujourdhui", "demain", "we")) ? $typeDate : "aujourdhui";

Ensuite tu lui assignes la bonne requète :
switch ($typeDate) :
  default:
  case "aujourdhui" :
  $requete = "select * from laTable where leChampDate = '".date('Y-m-d h:i:s',strtotime('today'))."'";
  break;

  case "demain":
  $requete = "select * from laTable where leChampDate = '".date('Y-m-d h:i:s',strtotime('tomorrow'))."'";
  break;

  case "we" :
  $requete = "select * from laTable where leChampDate BETWEEN '".date('Y-m-d h:i:s',strtotime('next Saturday'))."' AND ".date('Y-m-d h:i:s',strtotime('next Monday'))."'"; //démarre à minuit
  break;
endswitch;

Re: systeme de filtre par date

Posté : 21 févr. 2014, 15:14
par blinz
Mon simple code pour les boutons.:
<
<form>
<input class="input_filtre" type="button" value="Toutes les annonces">
            <input class="input_filtre" type="button" value="Aujourd'hui">
            <input class="input_filtre" type="button" value="Demain">
            <input class="input_filtre" type="button" value="Ce week-end">
</form>
Je tiens à préciser que j'aimerais que ce filtre fonctionne sans submit uniquement au clik du bouton.
Je sais suis un peut chiant

mon tab pour les date:
$jour = array('1'=>'lundi', '2'=>'mardi', '3'=>'mercredi', '4'=>'jeudi', '5'=>'vendredi', '6'=>'samedi', '7'=>'Dimanche');
$mois = array('1'=>'janvier', '2'=>'février', '3'=>'mars', '4'=>'avril', '5'=>'mai', '6'=>'juin', '7'=>'juillet', '8'=>'août', '9'=>'septembre', '10'=>'octobre', '11'=>'novembre', '12'=>'décembre');


Je ne vois pas trop comment ta methode pe calculer la date en du jour et ainsi faire marcher mes filtre en fonction de la date du jour.
Il me reste que ça à fair pour mon site, j'aimerais finir avt que ma femme accouche parceque bah ca va etre chaux patate :).

Si tu a skype j'aimerais qu'on puisse en parler afin de mieux comprendre.

Cordialement

Re: systeme de filtre par date

Posté : 21 févr. 2014, 15:22
par Aureusms
J'ai skype mais je dois repartir bosser...

Le type button ne transmet rien au serveur (sauf en utilisant javascript). Il s'agit juste d'un bouton.
Pour que cela soit plus simple (pour commencer), utilise "radio" comme mon exemple.

Ensuite en fonction de ce que reçois le serveur, la requête est différente et donc le résultat est différent.
La date est calculée via la fonction strtotime() avec trois choix :
  • date('Y-m-d h:i:s',strtotime('today')) = aujourd'hui à minuit => résultat : 2014-02-21 00:00:00
    date('Y-m-d h:i:s',strtotime('tomorrow')) = Demain à minuit => résultat : 2014-02-22 00:00:00
    BETWEEN '".date('Y-m-d h:i:s',strtotime('next Saturday'))."' AND ".date('Y-m-d h:i:s',strtotime('next Monday'))."'" => résultat BETWEEN '2014-02-22 00:00:00' AND '2014-02-24 00:00:00'

Re: systeme de filtre par date

Posté : 25 févr. 2014, 11:21
par blinz
Me, revoilà bon j'ai terminé mon (mic-mac) :D avec mes select pour mes liste déroulante mais je ne vois pas comment procéder pour la mise en place de mon ( filtre de recherche par date ).
Sachant que je veut que mes input marche sans submit mais juste au clik, engros javascript onclik ....,( je suppose ).
J'ai tout sous la main mais manque d'expérience pour réussir à le faire fonctionner. PS: nom de la table : loisirs et le nom du champ est date_debut_sortie
Merci encore à ce qui pourront m'aider à finir mon projet


Voici mon fichier nommé recherche.php
<?php
$nbParPage = 5;

$lstDep = array();
$departement = '-1';
if(isset($_GET['departement']) && !empty($_GET['departement'])){
	$departement = $_GET['departement'];
}
$region = -1;
//requete pour le select par département.
if(isset($_GET['region']) && !empty($_GET['region']) && $_GET['region'] != -1){
	$region = $_GET['region'];
	$req_departement = "select * from departements WHERE region_id = ".$region." ORDER BY nom";
	if($departement == '-1'){
		$res_dep = mysql_query($req_departement);
		while($line = mysql_fetch_array($res_dep)){
			$lstDep[] = $line['departement_id'];
		}
	}
}else{
	$req_departement = "select * from departements ORDER BY nom";
}

//requete pour le select loisir
$loisir = '-1';
if(isset($_GET['loisir']) && !empty($_GET['loisir'])){
	$loisir = $_GET['loisir'];
}
$req_sortie = "select * from type_loisir ORDER BY type";


$requete="SELECT * FROM loisirs where date_fin_sortie > NOW() and valide = 1";
if($departement != -1){
	$requete .= " and id_departements = ".$departement;
}
if($loisir != -1){
	$requete .= " and id_type_loisirs = ".$loisir;
}
if(!empty($lstDep)){
	$requete .= " and id_departements IN (".implode(",", $lstDep).")";
}
$calculPage =mysql_query($requete);
$nbTotal = mysql_num_rows($calculPage);
$nbPages = ceil($nbTotal/$nbParPage);

if(isset($_GET['page'])){
	$pageActuelle=intval($_GET['page']);

	if($pageActuelle>$nbPages){
		$pageActuelle=$nbPages;
	}
}else {
	$pageActuelle=1; 
}

$startLimit=($pageActuelle-1)*$nbParPage;
$resultat=mysql_query($requete." limit ".$startLimit.",".$nbParPage);
?>

Voici mes boutons pour mon filtre ( vu que je n'arrive pas les boutons sont là pour l'instant just pr ma mise en page )
	<input class="input_filtre" type="button" value="Toutes les annonces">
            <input class="input_filtre" type="button" value="Aujourd'hui">
            <input class="input_filtre" type="button" value="Demain">
            <input class="input_filtre" type="button" value="Ce week-end">

Re: systeme de filtre par date

Posté : 26 févr. 2014, 15:03
par blinz
personne peut m'aider, svp ?