Filtrer une requete avec des dates

Mammouth du PHP | 643 Messages

17 juil. 2016, 18:37

Salut à tous.
J'ai put voir que lpost que j'avais mis sur ce sujet à beaucoup était consulté mais sans réponse j'ai donc essayé de simplifier au maxmimum la chose.

J'ai donc actuellement des requetes qui marche bien:
$sql = 'SELECT * FROM loisirs JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE  loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1';
	// region
	if(!empty($_REQUEST['region'])){
	  // FIXME : sql injectin spoted
	  $sql .= ' AND regions.url = \''.$_REQUEST['region'].'\'' ;
	}
	if(!empty($_REQUEST['departement'])){
	  $sql .=  ' AND loisirs.id_departements = '.$_REQUEST['departement'];
	}
	
	if(!empty($_REQUEST['loisir']) ){
	  // FIXME : sql injectin spoted
	  $sql .=  ' AND loisirs.genre_loisir = \''.$_REQUEST['loisir'].'\'' ; // loisir
	}
	
	// Recherche par date
	// FIXME : $du et $au n'existe pas ici ;)
	// FIXME : sql injectin spoted
	if(!empty($du) && !empty($au)) {
	  $sql .= ' AND (DATE_FORMAT(loisirs.date_debut_sortie, \'%Y-%m-%d\') <= \''.$du.'\' AND DATE_FORMAT(loisirs.date_fin_sortie, \'%Y-%m-%d\') >= \''.$au.'\')';
	}
	
	 // Recherche par ville
	if(!empty($_REQUEST['ville'])) {
	  $sql .= ' AND loisirs.city = \''. getRealValue($_REQUEST['ville']). '\'';
	}
	
	// Recherche par salle
	if(!empty($_REQUEST['manufacturer'])){
	  $sql .= ' AND loisirs.manufacturer = \''. getRealValue($_REQUEST['manufacturer'] , 'manufacturer') .'\'';
	}

if (empty($_REQUEST['loisir']) && empty($_GET['page']) && empty($_REQUEST['departement'])) {
		$sql .= ' GROUP BY id_type_loisirs ORDER BY loisirs.id_loisirs';
		}else {
		  $sql .= 'ORDER BY loisirs.id_loisirs';
		}
		$sql .= ' DESC LIMIT '.intval(($page-1)*$parPage).', '.$parPage ;
		
		// la première partie de la requête permet de filtrer et de grouper, celle ci d'avoir les données
		$sqlFinal = 'SELECT * FROM loisirs JOIN regions ON regions.region_id = loisirs.id_region WHERE loisirs IN ('.$sql.')';
		
		// $sqlFinal;
Et plus loin ds la page j'ai mes "boutons" qui doivent filtrer selon les date mais rien ne se passe et un echo $sql n'a aucun effet completement ignorer pourquoi ?
<!-- Nav filtre Rapide -->
<nav class="navbar_filter navbar-default">
    <div class="container">
        <div class="filter-tabs">
        <div class="navbar-header">
        <button type="button" class="navbar-toggle collapsed pull-left" data-toggle="collapse" data-target="#nav-secondary" aria-expanded="false" aria-controls="navbar">
        <span class="sr-only pink_filter">Toggle navigation</span>
        FILTRE RAPIDE <i class="fa fa-clock-o"></i>
        </button>       
        </div>
        
        <!-- Filtre rapide -->
        <div id="nav-secondary" class="navbar-collapse collapse">
        <ul class="nav navbar-nav time">
        <li class="active"><a href="#home" data-du="" data-au="" data-page="1" data-toggle="tab" >Toutes </a></li>
        <li><a href="#profile" data-du="<?php echo date('Y-m-d'); ?>" data-au="<?php echo date('Y-m-d'); ?>" data-page="1" data-toggle="tab">Aujourd'hui </a></li>
        <li><a href="#messages" data-du="<?php echo date('Y-m-d', strtotime('+1 day')); ?>" data-au="<?php echo date('Y-m-d', strtotime('+1 day')); ?>" data-page="1" data-toggle="tab">Demain </a></li>
        <li><a href="#settings" data-du="<?php $strtotime = (date('N') == 7) ? 'Saturday - '.date('N').' days' : 'Saturday'; echo date('Y-m-d', strtotime($strtotime)); ?>" data-au="<?php echo date('Y-m-d', strtotime('Sunday')); ?>" data-page="1" data-toggle="tab">Ce week end </a></li>              
        </ul>
        </div>
        <!-- End Filtre rapide -->
        </div>
	</div>
</nav>
<!-- End nav -->
Merci à vous

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

18 juil. 2016, 15:09

salut,

tu parles de ce sujet la php-debutant/affiche-les-resultat-une-r ... 76560.html ?

au pif : $du et $au n'existe pas ?

il faut tester tes services web seul, sans la moulinette JS.
Pour cela tu peux utiliser un client reste (par exemple boomerang dans les extensions de chrome) ou simplement mettre ce que tu as besoin dans l'url en cas de service prenant uniquement les informations dans l'url.
ensuite tu fais une requête serveur mais n'exploite pas le resultat du coup y a peu de chance que cela soit utile ;)
$.ajax({
        type: 'POST',
        url: 'list.php',
        data: 'du='+du+'&au='+au+'&page='+page+'&departement='+dep+'&region='+region+'&loisir='+loisir+'&ville='+vil+'&date='+datetimepicker2,
        processData: true,
        async: false, 
// success , complete, error ????
    });
dans la validation de la requête serveur tu doit mettre a jour tes données.


Pour debuger simplement un script il est très intéressant d'utiliser un IDE (eclipse, netbeans, phpstorm / idea etc etc) et Xdebug

Pour les cas désespérés il y a var_dump()

@+
Il en faut peu pour être heureux ......