Page 1 sur 1

'undefined' in 'where clause'

Posté : 09 août 2016, 19:47
par yoann38
Salut à tous.
Voilà j'ai avancé sur mon problème de trie par date.

J'ai donc procédé à un echo de ma requete
Ma requete par defaut:
SELECT * FROM `loisirs` JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1 AND `regions`.`url` = "rhone-alpes"
Ma requete une fois un champ cliqué ' aujourd'hui, demain, week-end ):
SELECT * FROM `loisirs` JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1 AND `regions`.`url` = "undefined" AND `loisirs`.`id_departements` = undefined AND `loisirs`.`genre_loisir` = "undefined" AND (DATE_FORMAT(`loisirs`.`date_debut_sortie`, '%Y-%m-%d') <= '2016-08-09' AND DATE_FORMAT(`loisirs`.`date_fin_sortie`, '%Y-%m-%d') >= '2016-08-09')
L'erreur une fois un champ cliqué:
Warning: PDO::query(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'undefined' in 'where clause' in C:\wamp\www\site\include\rechercheAjax.php on line 41

Coté code j'ai donc mes requetes:
if(!empty($_REQUEST['datetimepicker'])) {
		$date = DateTime::createFromFormat('d/m/Y', $_REQUEST['datetimepicker']);
		$du = $au = $date->format('Y-m-d');
	}
		
	// On récupere le jour de la semaine en fonction de la date
	$jourRecherche = date('N', strtotime($du));
	
	$_REQUEST['departement'] = !empty($_REQUEST['departement']) ? $_REQUEST['departement'] : NULL;
	$_REQUEST['departement'] = !empty($_SESSION['membre']) && empty($_REQUEST['departement']) && empty($_REQUEST['region']) ? $_SESSION['membre']['id_departements'] :$_REQUEST['departement'];
	
    $sql = "SELECT * FROM `loisirs`  JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1";
	
  	$sql .= !empty($_REQUEST['region']) ? ' AND `regions`.`url` = "'.$_REQUEST['region'].'"' : NULL;
    $sql .= !empty($_REQUEST['departement']) ? ' AND `loisirs`.`id_departements` = '.$_REQUEST['departement'] : NULL;
    $sql .= !empty($_REQUEST['loisir']) ? ' AND `loisirs`.`genre_loisir` = "'.$_REQUEST['loisir'].'"' : NULL;

	// Recherche par date
	if(!empty($du)) {
	}
    $sql .= !empty($du) && !empty($au) ? " AND (DATE_FORMAT(`loisirs`.`date_debut_sortie`, '%Y-%m-%d') <= '".$du."' AND DATE_FORMAT(`loisirs`.`date_fin_sortie`, '%Y-%m-%d') >= '".$au."')" : NULL;
	
	echo $sql;
	
    $req = $bdd->query($sql);
Et bien sur mes filtres eux mêmes:
<div class="filter-tabs">
    
                        <ul class="nav nav-tabs list-unstyled list-inline">
                            <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>
Mon js:
// JavaScript Document
// On donne une action dès qu'on clique sur un lien des nav
$(document).ready(function(){
    $('.filter-tabs a, .page:not(.active)').on('click', function(e) {
				
        e.preventDefault(); // On annule le fait d'avoir cliqué sur le lien.
        var du = $(this).attr('data-du');
        var au = $(this).attr('data-au');
        var page = $(this).attr('data-page');
        chargerDonnees(du, au, page);
	});
});
// On déclare la fonction qui va aller chercher les données en base de données selon le bouton cliqué
function chargerDonnees(du, au, page) {
	
	var dep = $('#departement').val();
	var region = $('#departement').attr('data-region');
	var loisir = $('#loisir').val();
	var datetimepicker2 = $('#datetimepicker2').val();
	
    $.ajax({
        type: 'GET',
        url: 'include/rechercheAjax.php',
        data: 'du='+du+'&au='+au+'&page='+page+'&departement='+dep+'&region='+region+'&loisir='+loisir+'&date='+datetimepicker2,
        processData: true,
        async: false,
		

        beforeSend: function() {
            $('#bloc_page').html('Chargement en cours');
        },
        success: function (data) {
            $('#bloc_page').html(data);
            // On doit le rappeller car un nouveau bloc pagination a été créé
			
            $('.page:not(.active)').on('click', function(e) {
				
                e.preventDefault(); // On annule le fait d'avoir cliqué sur le lien.
                var du = $(this).attr('data-du');
                var au = $(this).attr('data-au');
                var page = $(this).attr('data-page');
                chargerDonnees(du, au, page);
            });
        }
    });
}
PS: Pour le coup je suis sur la région rhone-alpes pour l'exemple

Re: 'undefined' in 'where clause'

Posté : 09 août 2016, 21:42
par Aureusms
As tu testé les variables :

var dep = $('#departement').val();
var region = $('#departement').attr('data-region');
var loisir = $('#loisir').val();
var datetimepicker2 = $('#datetimepicker2').val();

Essayes via un console.log (loisir); par exemple. Je te parie que ta console va afficher "undefined " pour certaines.
Si c'est le cas jQuery ne voit pas la cible HTML que tu lui as indiqué et t'indique undefined.

Re: 'undefined' in 'where clause'

Posté : 09 août 2016, 22:35
par yoann38
Salut
Effectivement jQuery ne voit pas la cible HTML pourtant jquery est bien précisé selon cela peut venir de quoi du coup ?

Re: 'undefined' in 'where clause'

Posté : 10 août 2016, 00:07
par Naroth
Bonsoir,

ça veut juste dire qu'un ou plusieurs éléments ayant pour ID "departement", "loisir" ou "datetimepicker2" n'existe pas. Ou que l'attribut "data-region" n'est pas défini

Re: 'undefined' in 'where clause'

Posté : 10 août 2016, 07:03
par yoann38
Puis je faire sans passé par jquery du coup, puisque je trouve pas le problème, je me dis mettre ca dans mes requetes mais comment du coup ....
Casse tête.
Merci à vous ;)

Re: 'undefined' in 'where clause'

Posté : 10 août 2016, 08:41
par Naroth
Bonjour,

Envoie ta partie HTML la solution se trouve dedans

Re: 'undefined' in 'where clause'

Posté : 10 août 2016, 18:09
par yoann38
Alors voilà le html généré du coup par mon php pour ce qui est des filtres.
<div id="return_top">    
        <div id="wrap">
        <div class="b-breadcrumbs f-breadcrumbs">
            <div class="container">
                <div class="filter-tabs">
                    <ul class="nav nav-tabs list-unstyled list-inline">
                        <li class="active"><a href="#home" data-du="" data-au="" data-page="1" data-toggle="tab" >Toutes </a></li>
                        <li><a href="#aujourdhui" data-du="2016-08-10" data-au="2016-08-10" data-page="1" data-toggle="tab">Aujourd'hui </a></li>
                        <li><a href="#demain" data-du="2016-08-11" data-au="2016-08-11" data-page="1" data-toggle="tab">Demain </a></li>
                        <li><a href="#weekend" data-du="2016-08-13" data-au="2016-08-14" data-page="1" data-toggle="tab">Ce week end </a></li>
                    </ul>
                </div> 
            </div>
        </div>
Le but est de lancer en gros une nouvelle page exemple: ma-page/region-rhone-alpes/week-end.html
Merci pour le coup de main ;)

J'ai testé ceci en dur oui c'est juste pour essayé :)
Donc coté filtre de date j'ai :
<div id="return_top">    
        <div id="wrap">
        <div class="b-breadcrumbs f-breadcrumbs">
            <div class="container">
                <div class="filter-tabs">
                    <ul class="nav nav-tabs list-unstyled list-inline">
                        <li class="active"><a href="/Save_site_sortie/region-rhone-alpes.html" data-du="" data-au="" data-page="1" data-toggle="tab" >Toutes </a></li>
                        <li><a href="/Save_site_sortie/region-rhone-alpes/aujourdhui.html" data-du="<?php echo date('Y-m-d'); ?>" data-au="<?php echo date('Y-m-d'); ?>">Aujourd'hui </a></li>
                        <li><a href="/Save_site_sortie/region-rhone-alpes/demain.html" data-du="<?php echo date('Y-m-d', strtotime('+1 day')); ?>" data-au="<?php echo date('Y-m-d', strtotime('+1 day')); ?>">Demain </a></li>
                        <li><a href="/Save_site_sortie/region-rhone-alpes/week-end.html" 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')); ?>">Ce week end </a></li>
                    </ul>
                </div> 
            </div>
        </div>
coté requete:
$du = !empty($_REQUEST['du']) ? $_REQUEST['du'] : NULL;
    $au = !empty($_REQUEST['au']) ? $_REQUEST['au'] : NULL;
    $page = !empty($_REQUEST['page']) ? $_REQUEST['page'] : 1;
		
	// On récupere le jour de la semaine en fonction de la date
	$jourRecherche = date('N', strtotime($du));
	
	$_REQUEST['departement'] = !empty($_REQUEST['departement']) ? $_REQUEST['departement'] : NULL;
	$_REQUEST['departement'] = !empty($_SESSION['membre']) && empty($_REQUEST['departement']) && empty($_REQUEST['region']) ? $_SESSION['membre']['id_departements'] :$_REQUEST['departement'];
	
    $sql = "SELECT * FROM `loisirs`  JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE `loisirs`.`date_fin_sortie` > NOW() AND `loisirs`.`valide` = 1";
	
  	$sql .= !empty($_REQUEST['region']) ? ' AND `regions`.`url` = "'.$_REQUEST['region'].'"' : NULL;
    $sql .= !empty($_REQUEST['departement']) ? ' AND `loisirs`.`id_departements` = '.$_REQUEST['departement'] : NULL;
    $sql .= !empty($_REQUEST['loisir']) ? ' AND `loisirs`.`genre_loisir` = "'.$_REQUEST['loisir'].'"' : NULL;

	// Recherche par date
	if(!empty($du)) {
	}
    $sql .= !empty($du) && !empty($au) ? " AND (DATE_FORMAT(`loisirs`.`date_debut_sortie`, '%Y-%m-%d') <= '".$du."' AND DATE_FORMAT(`loisirs`.`date_fin_sortie`, '%Y-%m-%d') >= '".$au."')" : NULL;
	
	echo 'la région est : '. $_REQUEST['region'].'<br>';
	echo $sql;
	
    $req = $bdd->query($sql);
Alors je bien redirigé sur la bonne page mais les date ne corresponde pas ... toujours pareil selon les filtres
Je fait un echo de la date pour voir:
$h1 .= !empty($du) ? ",  le <strong>" .date('d/m/Y', strtotime($du))."</strong>" : NULL; // La date choisis selon les filtres
Ca renvoi toujours le 01/01/1970

Re: 'undefined' in 'where clause'

Posté : 10 août 2016, 20:29
par Naroth
Bonsoir,

D'après ce que j'ai compris ton script JS recherche des éléments dans tes filtres.

En prenant ton code :

JS :

Code : Tout sélectionner

$('#departement').val();
SI je traduis ce qui est écrit ici : Trouve l’élément ayant pour ID "département" et donne moi sa valeur.

Maintenant si je reprend ton code :

Code : Tout sélectionner

<div id="return_top"> <div id="wrap"> <div class="b-breadcrumbs f-breadcrumbs"> <div class="container"> <div class="filter-tabs"> <ul class="nav nav-tabs list-unstyled list-inline"> <li class="active"><a href="#home" data-du="" data-au="" data-page="1" data-toggle="tab" >Toutes </a></li> <li><a href="#aujourdhui" data-du="2016-08-10" data-au="2016-08-10" data-page="1" data-toggle="tab">Aujourd'hui </a></li> <li><a href="#demain" data-du="2016-08-11" data-au="2016-08-11" data-page="1" data-toggle="tab">Demain </a></li> <li><a href="#weekend" data-du="2016-08-13" data-au="2016-08-14" data-page="1" data-toggle="tab">Ce week end </a></li> </ul> </div> </di
Tu n'as AUCUN élément ayant pour ID "departement"

Re: 'undefined' in 'where clause'

Posté : 10 août 2016, 21:13
par yoann38
Pour simplifier le tout oublions cette histoire de js

Enfait je met en place 4 bouton ( toutes, aujourd'hui, demain, weeek-end )
<!-- Filtre timer-->
         <ul class="nav nav-tabs list-unstyled list-inline">
             <li class="active"><a href="#Toutes" data-du="" data-au="" data-page="1" data-toggle="tab" >Toutes </a></li>
             <li><a href="#Aujourdhui" 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="#Demain" 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="#Weekend" 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>
        <!-- Filtre -->
Maintenant j'aimerais associer ces boutons à mes requetes existante qui sont :
$sql = 'SELECT id_simply_user, id_loisirs, id_departements, id_type_loisirs, genre_loisir, url_rewrite, photo, url_fnac, titre, date_debut_sortie, description, city, manufacturer, heart FROM loisirs JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE  loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1';
 
  // Filtre region
  if(!empty($_REQUEST['region'])){
    $sql .= ' AND regions.url = \''.$_REQUEST['region'].'\'' ;
  }
  
  // Filtre département
  if(!empty($_REQUEST['departement'])){
    $sql .=  ' AND loisirs.id_departements = '.$_REQUEST['departement'];
  }
  
  // Filtre loisir
  if(!empty($_REQUEST['loisir']) ){
    $sql .=  ' AND loisirs.genre_loisir = \''.$_REQUEST['loisir'].'\'' ; // loisir
  }
  
   // Filtre par ville
  if(!empty($_REQUEST['ville'])) {
    $sql .= ' AND loisirs.city = \''. getRealValue($_REQUEST['ville']). '\'';
  }
Je souhaite donc qu'on soit redirigé sur la page par exemple nom-de-page/aujourdhui.html ou nom-de-page/demain.html

PS: Voici un exemple surement plus parlant on voit que quand on clique sur un filtre on est redirigé sur une nouvelle url ...
http://sortir.local.fr/grenoble/
Merci encore

Re: 'undefined' in 'where clause'

Posté : 10 août 2016, 21:33
par Naroth
Alors, "nom-de-page/aujourdhui.html" ce concept est appelé de la réécriture d'url ce qui permet de passer d'une url du type "nom-de-page?periode=aujourdhui" à "nom-de-page/aujourdhui.html".
PHP ne t'aideras en rien pour cela.
Pour ce genre de truc il faut aller voir du côté du "htaccess". C'est du paramétrage serveur

Re: 'undefined' in 'where clause'

Posté : 10 août 2016, 22:22
par yoann38
Ca je sais c'est déjà mis en place avec :
# -- sortie + région + filtre timer -------------------
RewriteRule ^sortie/region-([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+).html$ sortie.php?region=$1&du=$2
Ca marche nikel.

J'ai besoin d'un coup de main pour faire en sorte que quand on clique sur un des boutons: ( via un <form> peut etre je sais pas ) on soit redirigé du coup sur la bonne page
<!-- Filtre timer-->
         <ul class="nav nav-tabs list-unstyled list-inline">
             <li class="active"><a href="#Toutes" data-du="" data-au="" data-page="1" data-toggle="tab" >Toutes </a></li>
             <li><a href="/travail en cours/sortie/region-rhone-alpes/demain.html">Aujourd'hui </a></li>
             <li><a href="#Demain" 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="#Weekend" 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>
        <!-- Filtre -->
Une fois le bouton cliquer lancer la requete sql qui vas bien ... et en place j'ai déjà mis ça:
$du = !empty($_REQUEST['du']) ? $_REQUEST['du'] : NULL;
    $au = !empty($_REQUEST['au']) ? $_REQUEST['au'] : NULL;
    $page = !empty($_REQUEST['page']) ? $_REQUEST['page'] : 1;
	
	if(!empty($_REQUEST['datetimepicker'])) {
		$date = DateTime::createFromFormat('d/m/Y', $_REQUEST['datetimepicker']);
		$du = $au = $date->format('Y-m-d');
	}

	$_REQUEST['departement'] = !empty($_REQUEST['departement']) ? $_REQUEST['departement'] : NULL;
	$_REQUEST['departement'] = !empty($_SESSION['membre']) && empty($_REQUEST['departement']) && empty($_REQUEST['region']) ? $_SESSION['membre']['id_departements'] :$_REQUEST['departement'];
    
	
    $sql = 'SELECT id_simply_user, id_loisirs, id_departements, id_type_loisirs, genre_loisir, url_rewrite, photo, url_fnac, titre, date_debut_sortie, description, city, manufacturer, heart FROM loisirs JOIN `regions` ON `regions`.`region_id` = `loisirs`.`id_region` WHERE  loisirs.date_fin_sortie > NOW() AND loisirs.valide = 1';
 
    // Filtre region
    if(!empty($_REQUEST['region'])){
    $sql .= ' AND regions.url = \''.$_REQUEST['region'].'\'' ;
    }
  
    // Filtre département
    if(!empty($_REQUEST['departement'])){
    $sql .=  ' AND loisirs.id_departements = '.$_REQUEST['departement'];
    }
  
     // Filtre loisir
    if(!empty($_REQUEST['loisir']) ){
    $sql .=  ' AND loisirs.genre_loisir = \''.$_REQUEST['loisir'].'\'' ; // loisir
    }
  
     // Filtre par ville
    if(!empty($_REQUEST['ville'])) {
    $sql .= ' AND loisirs.city = \''. getRealValue($_REQUEST['ville']). '\'';
    }
 
	$req = $bdd->query($sql);