Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/08/2011, 19h20   #1
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut Function + jointure

Bonjour je suis en train de reprendre une function qui à été créer sur mon site mais je n'arrive pas à la modifier

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
 
function createwhere() {
        $session =& JFactory::getSession();
        $where = ' where published = 1 ';
		if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and id_soustype='.$type.' ';
        }
		$retour = JRequest::getvar('retour');
		if(!$retour){
        $ou = JRequest::getvar('ou',false);
        $quand = JRequest::getvar('quand',false);
        $horaire = JRequest::getvar('horaire',false);
        $qui = JRequest::getvar('qui',false);
		$type = JRequest::getvar('type',false);
		//$retour = JRequest::getvar('retour',false);
        $limitstar = JRequest::getvar('limitstart',$session->get('qui',false));
        }else{
		$ou = $session->get('ou');
        $quand = $session->get('quand');
        $horaire = $session->get('horaire');
        $qui = $session->get('qui');
		$type = $session->get('type');
		//$retour = $session->get('retour');
        $limitstar = $session->get('limitstart');
		}
        $session->set('ou',$ou);
        $session->set('quand',$quand);
        $session->set('horaire',$horaire);
        $session->set('qui',$qui);
		$session->set('type',$type);
		//$session->set('retour',$retour);
        $session->set('limitstart',$limitstar);
        $this->limitstart = $limitstar;
 
        if($ou) {
            $ouvalue = implode(',', $ou);
            $where .= ' and lieu in ('.$ouvalue.') ';
        }
        if($quand) {
            $quandvalue = explode(',', $quand);
            $where .= ' and JOUR_DEBUT ="'.$quandvalue[0].'" and JOUR_FIN ="'.$quandvalue[1].'"';
        }
        if($horaire) {
            /*$horairevalue = implode('","', $horaire);
            $where .= ' and horaire_afficher in ("'.$horairevalue.'") ';*/
			 if(in_array('matin',$horaire)) {
                $horairearray[] = ' HFIN < "12:00" ';
            }
            if(in_array('midi',$horaire)) {
                $horairearray[] = ' (HDEB >= "12:00" and HFIN <= "14:00") ';
            }
            if(in_array('apresmidi',$horaire)) {
                $horairearray[] = ' (HDEB > "14:00" and HFIN <= "18:00") ';
            }
            if(in_array('soir',$horaire)) {
                $horairearray[] = ' HDEB > "18:00"  ';
            }
			if(in_array('journeeentiere',$horaire)) {
                $horairearray[] = ' (HDEB <= "10:00" and HFIN >= "17:00")  ';
			}
            $where .= 'and ( '.implode(' or ', $horairearray ).' )';
        }
		if($qui) {
            switch($qui){
            case 'Adultes':
            $where .= ' and age_min <= 24 and age_max >= 18';
            break;
            case 'Seniors':
            $where .= ' and age_min >= 25 ';
            break;
            default :           
            $where .= ' and age_min <= '.$qui.' and age_max >= '.$qui.'';
            break;
 
        }
        }
        if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and id_soustype='.$type.' ';
        }
 
        return $where ;
    }

Je crois que c'est cette ligne qui me pose probleme
Code :
1
2
3
4
5
 
if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and id_soustype='.$type.' ';
        }
car en faite avec la fonction actuelle il liste les evenement qui ont comme id_soustype='.$type.' ' alors que moi je voudrais qui affiche les evenement qui ont
Code :
1
2
3
 
FROM #__f_evenement e, #__f_soustype st
$where .= ' and e.id_soustype = st.id and st.id_type ='.$type.' ';
Je n'arrive pas à insérer à placer la jointure dans cette fonction.

EN espérant avoir été clair.
Si quelqu'un à une piste !!
Merci d'avance de votre aide.
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 20h52   #2
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut Re : help function

Je me dis que je n'ai peut etre pas été assez clair alors je vais essayer d'expliquer un peu mieux parce que la je bug sur mon code

donc j'ai une fonction qui permet d'afficher une liste d'événement en fonction de son id soustype
par exemple tous les événements qui ont l'id soustype 121 doivent s'afficher dans ma page, et en plus de ça j'ai un moteur de recherche qui permet de filtre les résultats en fonction de la date, de l'age, du lieu...

Voilà les 2 fonctions qui sont utiliser sur la page

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
 
	function createwheresaad() {
        $session =& JFactory::getSession();
        $where = ' where published = 1 ';
 
		if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and id_soustype='.$type.' ';
        }
		$retour = JRequest::getvar('retour');
		if(!$retour){
        $ou = JRequest::getvar('ou',false);
        $quand = JRequest::getvar('quand',false);
        $horaire = JRequest::getvar('horaire',false);
        $qui = JRequest::getvar('qui',false);
		$type = JRequest::getvar('type',false);
		//$retour = JRequest::getvar('retour',false);
        $limitstar = JRequest::getvar('limitstart',$session->get('qui',false));
        }else{
		$ou = $session->get('ou');
        $quand = $session->get('quand');
        $horaire = $session->get('horaire');
        $qui = $session->get('qui');
		$type = $session->get('type');
		//$retour = $session->get('retour');
        $limitstar = $session->get('limitstart');
		}
        $session->set('ou',$ou);
        $session->set('quand',$quand);
        $session->set('horaire',$horaire);
        $session->set('qui',$qui);
		$session->set('type',$type);
		//$session->set('retour',$retour);
        $session->set('limitstart',$limitstar);
        $this->limitstart = $limitstar;
 
        if($ou) {
            $ouvalue = implode(',', $ou);
            $where .= ' and lieu in ('.$ouvalue.') ';
        }
        if($quand) {
            $quandvalue = explode(',', $quand);
            $where .= ' and JOUR_DEBUT ="'.$quandvalue[0].'" and JOUR_FIN ="'.$quandvalue[1].'"';
        }
        if($horaire) {
            /*$horairevalue = implode('","', $horaire);
            $where .= ' and horaire_afficher in ("'.$horairevalue.'") ';*/
			 if(in_array('matin',$horaire)) {
                $horairearray[] = ' HFIN < "12:00" ';
            }
            if(in_array('midi',$horaire)) {
                $horairearray[] = ' (HDEB >= "12:00" and HFIN <= "14:00") ';
            }
            if(in_array('apresmidi',$horaire)) {
                $horairearray[] = ' (HDEB > "14:00" and HFIN <= "18:00") ';
            }
            if(in_array('soir',$horaire)) {
                $horairearray[] = ' HDEB > "18:00"  ';
            }
			if(in_array('journeeentiere',$horaire)) {
                $horairearray[] = ' (HDEB <= "10:00" and HFIN >= "17:00")  ';
			}
            $where .= 'and ( '.implode(' or ', $horairearray ).' )';
        }
		if($qui) {
            switch($qui){
            case 'Adultes':
            $where .= ' and age_min <= 24 and age_max >= 18';
            break;
            case 'Seniors':
            $where .= ' and age_min >= 25 ';
            break;
            default :           
            $where .= ' and age_min <= '.$qui.' and age_max >= '.$qui.'';
            break;
 
        }
        }
        if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and id_soustype='.$type.' ';
        }
 
        return $where ;
    }
	 function getlistage($limit,$type) {
 
        $db = & JFactory :: getDBO();
        $result = array();
       $filter = $this->createwheresaad();
        $where = ' where published = 1 ';
        $where .= ' and  id_soustype = '.$type.'';
      $query1 = "SELECT COUNT(id) FROM #__f_evenement ";
        if($filter)
            $query1 .= $filter ;
        $query1 .= ' and  id_soustype = '.$type.'';
 
        $db->setQuery($query1);
        $total = $db->loadResult();
        $query1 = "SELECT COUNT(id) FROM #__f_evenement ";
        if($filter)
            $query1 .= $filter;
        $db->setQuery($query1);
        $totalcategorie = $db->loadResult();
        //$arrayquand = "('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche')";
        $query2 = "SELECT distinct JOUR_DEBUT,JOUR_FIN FROM #__f_evenement ".$filter." order by JOUR_DEBUT ";
        $db->setQuery($query2);
        $date_afficher = $db->loadObjectList();
 
		$query2 = "SELECT count(*) FROM (SELECT distinct JOUR_DEBUT,JOUR_FIN FROM #__f_evenement ".$filter.") as saad ";
		$db->setQuery($query2);
        $totaldate = $db->loadResult();
 
        $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and  HFIN < '12:00' ";
        $db->setQuery($query3);
        $horaire_afficher['matin'] = $db->loadresult();
 
        $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and  (HDEB >= '12:00' and HFIN <= '14:00') ";
        $db->setQuery($query3);
        $horaire_afficher['midi'] = $db->loadresult();
 
        $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and (HDEB > '14:00' and HFIN <= '18:00') ";
        $db->setQuery($query3);
        $horaire_afficher['apresmidi'] = $db->loadresult();
 
        $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and  HDEB > '18:00' ";
        $db->setQuery($query3);
        $horaire_afficher['soir'] = $db->loadresult();
 
		$query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and (HDEB <= '10:00' and HFIN >= '17:00') ";
        $db->setQuery($query3);
        $horaire_afficher['journeeentiere'] = $db->loadresult();
 
 
        $query = "SELECT * FROM #__f_evenement ";
 
        if($filter)
            $query .= $filter;
        $query .= ' order by id ';
        $db->setQuery($query,$this->limitstart, $limit);
        $this->_application = $db->loadObjectList();
		$saad=$query;
        $query = 'SELECT lieu , count(*) as counter FROM #__f_evenement  '.$filter.' group by lieu ' ;
        $db->setQuery($query);
        $lieu = $db->loadObjectlist();
        $query = 'select id, Nom_Lieu from #__f_lieuHY where id in (select distinct(lieu) FROM #__f_evenement ) order by Nom_Lieu' ;
        $db->setQuery($query);
        $lieunom = $db->loadObjectlist();
 
        $result[0] = $this->_application;
        $result[1] = $total;
        $result[2] = $date_afficher;
        $result[3] = $horaire_afficher;
        $result[4] = $lieu;
        $result[5] = $lieunom;
        $result[6] = $totalcategorie;
		$result[7] = $saad;
		$result[8] = $totaldate;
 
 
        return $result;
 
    }
id_soustype se trouve dans la table f_evenement
dnc la tout fonctionne tres bien sauf que moi je voudrais afficher les evenement qui ont un
id_soustype = st.id and st.id_type ='.$type.' ';

J'ai une table sous_type (st) avec
id
id_type

Donc si id type =121
il devrait afficher tous les evenement qui ont un st.id_type = à 121

Mais je mais ce code
Code :
1
2
3
4
5
 
if($type) {
            FROM #__f_evenement e, #__f_soustype st
$where .= ' and e.id_soustype = st.id and st.id_type ='.$type.' ';
        }
Cela ne fonctionne pas je ne comprend vraiment pas comment lui utiliser cette jointure.

Merci d'avance pour toutes les piste qui pourrait être proposer et aussi merci si vous avez lu ce message jusqu'à la fin, c'est déjà sympa.
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 21h06   #3
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 772
Points : 2 329
Points : 2 329
Bonsoir,

Un message d'erreur quelque part peut être ? Explique plus précisément pourquoi "ça ne marche pas".
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 21h17   #4
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut re : help function

Quand je remplace ce code à la ligne 79

Code :
1
2
3
4
5
 
       if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and id_soustype='.$type.' ';
        }
Par celui ci

Code :
1
2
3
4
5
6
 
     if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and id_soustype = st.id and st.id_type ='.$type.' '.
					  'FROM #__f_evenement , #__f_soustype st ';
        }
Il m'affiche
Aucune activité ne correspond à vos critère de recherche

Alors que j'ai des activités qui ont sous type qui appartient au type id 121

Je ne comprend pas pourquoi il ne me trouve aucun activités
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 21h22   #5
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 772
Points : 2 329
Points : 2 329
Peux-tu mettre la structure des tables qui te servent dans la requête ? Car au premier coup d'oeil, tu n'as pas de jointures comme tu dis. Et si tu cherches à en faire une, il y a un problème dans ton where, tu ne dois pas utiliser les bons champs.
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 21h40   #6
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut re : help function

Merci de ton aide et voici la structure des tables evenement et soustype


Table f_evenement

id
nouveau
Id_evenement
id_soustype int(11)
INTIT1
INTIT2
age_min
age_max
age_afficher
horaire_afficher
niveau
JOUR
JOUR_DEBUT
JOUR_FIN
HDEB
HFIN
NB
NB_Budget
Cd_Tarif
Statut
NOCPT
NOCPTVE
FAM_ACTIV
lien_connexes
sujets_connexes
alias
mots_photos
titre_objectif
text_objectif
media_details
image_details
accueil
published
Chemin_album
lieu
Cde_Sous_Lieu

Table f_soustype

id
nom
alias
image
id_type
published
ordering
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/08/2011, 22h21   #7
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut function + jointure

Est ce bien cela dont tu parlais, quand tu disais structure des tables ?
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 12h05   #8
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut function + jointure

Je viens de faire un var_dump et cela me renvoie un NULL

Je ne comprend pas pourquoi, il doit y avoir un problème dans ma requête mais je ne vois pas ce qui pose probleme.

Et si je fais un echo $query; cela plante le site, est ce possible.

Merci
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 13h21   #9
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut function + jointure

Je viens d'essayer les requetes suivantes dans phpmyadmin

SELECT *
FROM jos_f_evenement
LEFT JOIN jos_f_soustype AS st ON id_soustype = st.id
AND st.id_type = '33'
LIMIT 0 , 830

Résultat >> Aucun filtrage tous est liste

SELECT *
FROM jos_f_evenement
RIGHT JOIN jos_f_soustype AS st WHERE id_soustype = st.id
AND st.id_type = '33'
LIMIT 0 , 830

Résultat >> Aucun filtrage tous est liste avec des null par endroit


SELECT *
FROM jos_f_evenement, jos_f_soustype st WHERE id_soustype = st.id AND st.id_type = '33'
LIMIT 0 , 830

Résultat >> Ok le filtrage est fait il n'affiche que les événements qui ont en commun id type 33

Par contre quand je test le code dans ma page php il n'y a toujours pas de résultat

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 
<?php 
require_once(dirname(__FILE__).DS.'helper.php'); 
$model = new dernier_evenement2; 
$id_type = $params->get('id_type',0); 
$db =& JFactory::getDBO(); 
$query = "SELECT * ". 
     "FROM #__f_evenement, jos_f_soustype st". 
     "WHERE id_soustype = st.id".
     "and st.id_type = ".$id_type." ". 
     " LIMIT 0 , 1"; 
//echo $query; 
$db->setQuery($query); 
$list = $db->loadobjectlist(); 
var_dump($list); 
if ($list) { 
foreach ($list as $item) { 
 
    $detailssoustype = $model->getdetailssoustype($item->id_soustype); 
    if($item->image_list) 
    $image = 'images/formation/type/'.$detailssoustype['typeimage']; 
    else 
    $image = 'images/formation/type/'.$detailssoustype['typeimage']; 
    echo '<br><div class="evenement">'; 
   echo '<div class="groupeventhome">'.$detailssoustype['type'].'</div>'; 
    echo '<a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="'.$image.'" /></a><div class="evenementimg"><a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="/images/stories/fond-opacity.png" /></a></div>'; 
    echo '</div>'; 
 
 
} 
} 
echo $id_type
?>
Résultat >> NULL 33

Et le meme code sans le var_dump et le if

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<?php 
require_once(dirname(__FILE__).DS.'helper.php'); 
$model = new dernier_evenement2; 
$id_type = $params->get('id_type',0); 
$db =& JFactory::getDBO(); 
$query = "SELECT * ". 
     "FROM #__f_evenement, jos_f_soustype st". 
     "WHERE id_soustype = st.id".
     "and st.id_type = ".$id_type." ". 
     " LIMIT 0 , 1"; 
//echo $query; 
$db->setQuery($query); 
$list = $db->loadobjectlist(); 
foreach ($list as $item) { 
 
    $detailssoustype = $model->getdetailssoustype($item->id_soustype); 
    if($item->image_list) 
    $image = 'images/formation/type/'.$detailssoustype['typeimage']; 
    else 
    $image = 'images/formation/type/'.$detailssoustype['typeimage']; 
    echo '<br><div class="evenement">'; 
   echo '<div class="groupeventhome">'.$detailssoustype['type'].'</div>'; 
    echo '<a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="'.$image.'" /></a><div class="evenementimg"><a href="index.php?option=com_formation&view=categorie&layout=categorie-event&id='.$id_type.'&Itemid=14"><img height ="180" width ="276" src ="/images/stories/fond-opacity.png" /></a></div>'; 
    echo '</div>'; 
 
 
} 
echo $id_type
?>
Résultat >> Message d'erreur suivant

Warning: Invalid argument supplied for foreach() in /www/modules/mod_derniere_evnement2/mod_derniere_evnement2.php on line 14
33

Je ne comprend pas pourquoi cela fonctionne sur php my admin mais pas dans ma page php.

SI quelqu'un à une piste !!
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/08/2011, 19h33   #10
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 772
Points : 2 329
Points : 2 329
Tu as un problème avec ta première table : .
Remplace le # par jos.
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 00h23   #11
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut function + jointure

Bon finalement c'était un problème d'espace dans ma requête !!! grrrr !!
et effectivement je m'étais tromper en nommant ma table f_soustype merci FirePrawn.


Néanmoins j'ai un autre problème

j'essaie de modifier un filtre de recherche qui doit lister les événement en fonction de certain critere (qui, quand, ou) cela fonctionne bien mais il la fonction qui doit calculer le nombre de resultat ne fonctionne pas

Voici le code de ma page

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
function getlistage($limit,$type) {
 
        $db = & JFactory :: getDBO();
        $result = array();
        $filter = $this->createwheresaad();
        $where = ' where e.published = 1 ';
        $where .= ' and e.id_soustype = st.id';
    $where .= ' and st.id_type = '.$type.'';
        $query1 = "SELECT COUNT(e.id) FROM #__f_evenement e, #__f_soustype st ";
        if($filter)
            $query1 .= $filter ;
        $query1 .= ' and e.id_soustype = st.id';
    $query1 .= ' and st.id_type = '.$type.'';
 
        $db->setQuery($query1);
        $total = $db->loadResult();
        $query1 = "SELECT COUNT(e.id) FROM #__f_evenement e, #__f_soustype st ";
        if($filter)
            $query1 .= $filter;
        $db->setQuery($query1);
        $totalcategorie = $db->loadResult();
        //$arrayquand = "('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche')";
        $query2 = "SELECT distinct JOUR_DEBUT,JOUR_FIN FROM #__f_evenement ".$filter." order by JOUR_DEBUT ";
        $db->setQuery($query2);
        $date_afficher = $db->loadObjectList();
 
    $query2 = "SELECT count(*) FROM (SELECT distinct JOUR_DEBUT, JOUR_FIN FROM #__f_evenement  ".$filter.") as saad ";
    $db->setQuery($query2);
        $totaldate = $db->loadResult();
 
        $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and  HFIN < '12:00' ";
        $db->setQuery($query3);
        $horaire_afficher['matin'] = $db->loadresult();
 
        $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and  (HDEB >= '12:00' and HFIN <= '14:00') ";
        $db->setQuery($query3);
        $horaire_afficher['midi'] = $db->loadresult();
 
        $query3 = "SELECT count(*) FROM #__f_evenement ".$filter." and (HDEB > '14:00' and HFIN <= '18:00') ";
        $db->setQuery($query3);
        $horaire_afficher['apresmidi'] = $db->loadresult();
 
        $query3 = "SELECT count(*) FROM #__f_evenement  ".$filter." and  HDEB > '18:00' ";
        $db->setQuery($query3);
        $horaire_afficher['soir'] = $db->loadresult();
 
    $query3 = "SELECT count(*) FROM #__f_evenement  ".$filter." and (HDEB <= '10:00' and HFIN >= '17:00') ";
        $db->setQuery($query3);
        $horaire_afficher['journeeentiere'] = $db->loadresult();
 
 
        $query = "SELECT *, e.id as eid FROM #__f_evenement e, #__f_soustype st ";
 
        if($filter)
            $query .= $filter;
        $query .= ' order by st.id ';
        $db->setQuery($query,$this->limitstart, $limit);
        $this->_application = $db->loadObjectList();
    $saad=$query;
        $query = 'SELECT lieu , count(*) as counter FROM #__f_evenement  '.$filter.' group by lieu ' ;
        $db->setQuery($query);
        $lieu = $db->loadObjectlist();
        $query = 'select id, Nom_Lieu from #__f_lieuHY where id in (select distinct(lieu) FROM #__f_evenement ) order by Nom_Lieu' ;
        $db->setQuery($query);
        $lieunom = $db->loadObjectlist();
 
        $result[0] = $this->_application;
        $result[1] = $total;
        $result[2] = $date_afficher;
        $result[3] = $horaire_afficher;
        $result[4] = $lieu;
        $result[5] = $lieunom;
        $result[6] = $totalcategorie;
    $result[7] = $saad;
    $result[8] = $totaldate;
 
 
        return $result;
 
    }
et

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
function createwheresaad() {
        $session =& JFactory::getSession();
        $where = ' where e.published = 1 ';
 
    if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and e.id_soustype = st.id';
        $where .= ' and st.id_type = '.$type.'';
        }
    $retour = JRequest::getvar('retour');
    if(!$retour){
        $ou = JRequest::getvar('ou',false);
        $quand = JRequest::getvar('quand',false);
        $horaire = JRequest::getvar('horaire',false);
        $qui = JRequest::getvar('qui',false);
    $type = JRequest::getvar('type',false);
    //$retour = JRequest::getvar('retour',false);
        $limitstar = JRequest::getvar('limitstart',$session->get('qui',false));
        }else{
    $ou = $session->get('ou');
        $quand = $session->get('quand');
        $horaire = $session->get('horaire');
        $qui = $session->get('qui');
    $type = $session->get('type');
    //$retour = $session->get('retour');
        $limitstar = $session->get('limitstart');
    }
        $session->set('ou',$ou);
        $session->set('quand',$quand);
        $session->set('horaire',$horaire);
        $session->set('qui',$qui);
    $session->set('type',$type);
    //$session->set('retour',$retour);
        $session->set('limitstart',$limitstar);
        $this->limitstart = $limitstar;
 
        if($ou) {
            $ouvalue = implode(',', $ou);
            $where .= ' and lieu in ('.$ouvalue.') ';
        }
        if($quand) {
            $quandvalue = explode(',', $quand);
            $where .= ' and JOUR_DEBUT ="'.$quandvalue[0].'" and JOUR_FIN ="'.$quandvalue[1].'"';
        }
        if($horaire) {
            /*$horairevalue = implode('","', $horaire);
            $where .= ' and horaire_afficher in ("'.$horairevalue.'") ';*/
       if(in_array('matin',$horaire)) {
                $horairearray[] = ' HFIN < "12:00" ';
            }
            if(in_array('midi',$horaire)) {
                $horairearray[] = ' (HDEB >= "12:00" and HFIN <= "14:00") ';
            }
            if(in_array('apresmidi',$horaire)) {
                $horairearray[] = ' (HDEB > "14:00" and HFIN <= "18:00") ';
            }
            if(in_array('soir',$horaire)) {
                $horairearray[] = ' HDEB > "18:00"  ';
            }
      if(in_array('journeeentiere',$horaire)) {
                $horairearray[] = ' (HDEB <= "10:00" and HFIN >= "17:00")  ';
      }
            $where .= 'and ( '.implode(' or ', $horairearray ).' )';
        }
    if($qui) {
            switch($qui){
            case 'Adultes':
            $where .= ' and age_min <= 24 and age_max >= 18';
            break;
            case 'Seniors':
            $where .= ' and age_min >= 25 ';
            break;
            default :          
            $where .= ' and age_min <= '.$qui.' and age_max >= '.$qui.'';
            break;
 
        }
        }
        if($type) {
            //$typevalue = implode('","', $type);
            $where .= ' and e.id_soustype = st.id';
      $where .= ' and st.id_type = '.$type.'';
        }
 
        return $where ;
    }
C'est surtout c'est ligne la qui pose problème me semble t'il

Code :
1
2
3
4
 
$query2 = "SELECT distinct JOUR_DEBUT,JOUR_FIN FROM #__f_evenement ".$filter." order by JOUR_DEBUT ";
        $db->setQuery($query2);
        $date_afficher = $db->loadObjectList();
et

Code :
1
2
3
4
 
  $query = 'SELECT lieu , count(*) as counter FROM #__f_evenement  '.$filter.' group by lieu ' ;
        $db->setQuery($query);
        $lieu = $db->loadObjectlist();
Lorsque j'enlève le '.$filter.' pour les 2 requetes j'ai bien un résultat qui s'affiche mais il ne filtre pas il compte tous les événements alors qu'il devrait prendre en compte les événement qui ont
where e.published = 1
and e.id_soustype = st.id
and st.id_type = '.$type.'

Donc uniquement ceux qui ont st.id_type = '$type'

Du coup dans ma page php qui utilise cette fonction
j'ai les message d'erreur suivant

Warning: Invalid argument supplied for foreach() in www/components/com_formation/views/categorie/tmpl/list-stage.php on line 377

Et si je fait un var_dump il m'affiche null pour les deux, par contre la fonction de filtrage au clic de la checbox fonctionne.

Merci d'avance à tous ceux qui se seront intéressé a ce problème.
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 10h38   #12
Modérateur
 
Avatar de FirePrawn
 
Homme Sébastien
Ingénieur réalisateur
Inscription : mars 2011
Messages : 772
Détails du profil
Informations personnelles :
Nom : Homme Sébastien
Âge : 24
Localisation : France, Haut Rhin (Alsace)

Informations professionnelles :
Activité : Ingénieur réalisateur
Secteur : Industrie

Informations forums :
Inscription : mars 2011
Messages : 772
Points : 2 329
Points : 2 329
Il est où le foreach ?
__________________
- Avant toute chose : lire le mode d'emploi du forum et ses règles.
- avant de poster
- Je ne réponds pas aux questions techniques en MP.
FirePrawn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2011, 10h43   #13
Invité de passage
 
Inscription : août 2009
Messages : 50
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 50
Points : 2
Points : 2
Par défaut function + jointure

Voici le code avec le foreach,

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
 
<?php
                        foreach ($this->oulistnom as $lieunom) {
                            $ounom[$lieunom->id] = $lieunom->Nom_Lieu;
                        }
//                        $query = 'SELECT distinct(lieu) FROM #__f_evenement ' ;
//                        $db->setQuery($query);
//                        $alllieu = $db->loadObjectlist();
                         $alllieu = array('3','4','2','1');
foreach($alllieu as $q) {
    $i = 0;
    //echo $q->lieu;
 
							foreach ($oulist as $lieu) {
                                if($q == $lieu->lieu) {
                                    if($ou && in_array($lieu->lieu, $ou))
                                        echo '<input type="checkbox" name="ou[]" onchange="filter()" checked="checked" value="'.$lieu->lieu.'" />'.$ounom[$lieu->lieu].' ('.$lieu->counter.')<br>' ;
                                    else
                                        echo '<input type="checkbox" name="ou[]" onchange="filter()" value="'.$lieu->lieu.'" />'.$ounom[$lieu->lieu].' ('.$lieu->counter.')<br>';
                                    $i = 1;
                                }
                            }
                            if($i == 0) {
                                if($ou && in_array($q, $ou))
                                    echo '<input type="checkbox" name="ou[]" onchange="filter()" checked="checked" value="'.$q.'" />'.$ounom[$q].' (0)<br>' ;
                                else
                                    echo '<input type="checkbox" name="ou[]" onchange="filter()" value="'.$q.'" />'.$ounom[$q].' (0)<br>';
                            }
                        }
                        ?>
Le foreach qui pose probleme est celui ci

foreach ($oulist as $lieu) {
nanou22 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h04.


 
 
 
 
Partenaires

Hébergement Web