PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 17-08-2011 21:37:27

nala26
Membre
Inscription : 17-08-2011
Messages : 6

loadobjectlist + php

Bonjour j'essaye de faire un module pour joomla j'ai un message d'erreur

Voici mon code si quelqu'un voit l'erreur ça serai sympa:

<?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".
     "RIGHT JOIN #__f_soustype AS st ON 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>';


}

Le message d'erreur m'indique que l'erreur vient de cette ligne

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

foreach ($list as $item) {

Merci d'avance de votre aide.

Hors ligne

#2 18-08-2011 08:26:06

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : loadobjectlist + php

Saluton,
Merici de ne pas relancer les hostilités de la guerre des étoiles.
Apparemment ce CMS utilise une abstraction d'accès aux BDD (PEAR DB ?) dont la méthode loadobjectlist() est censée retourner un array.
Que donne un var_dump($list) en lieu et place de la boucle foreach ?


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#3 18-08-2011 10:31:26

nala26
Membre
Inscription : 17-08-2011
Messages : 6

Re : loadobjectlist + php

Tout d'abord merci de ton aide

Var_dump($list) me donne NULL.

Qu'est ce que cela veut dire ?

Est ce que $list est vide ?

Merci

Hors ligne

#4 18-08-2011 12:21:06

nala26
Membre
Inscription : 17-08-2011
Messages : 6

Re : loadobjectlist + php

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

<?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

<?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 !!

Hors ligne

#5 18-08-2011 12:39:26

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : loadobjectlist + php

Il est évident que la requête soumise ne retourne pas de résultat.
IL te faut tester en amont toute la chaîne de connexion de $db.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#6 18-08-2011 14:00:08

nala26
Membre
Inscription : 17-08-2011
Messages : 6

Re : loadobjectlist + php

Merci mais peut tu me dire comment je fais pour tester toute la chaine de connexion de $db

Parce que si c'est pour vérifier la connexion à la base, je pense qu'elle se fait bien

Hors ligne

#7 18-08-2011 14:36:48

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : loadobjectlist + php

Je ne sais pas, je n'ai jamais utilisé JOOMLA, et je ne sais pas quel module d'abstraction aux BD il utilise.
Mais de ce que j'en vois, ça fait pas envie.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#8 18-08-2011 23:19:07

nala26
Membre
Inscription : 17-08-2011
Messages : 6

Re : loadobjectlist + php

Bon finalement c'était un problème d'espace dans ma requête !!! grrrr !!

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

 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

  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

  $query2 = "SELECT distinct JOUR_DEBUT,JOUR_FIN FROM #__f_evenement ".$filter." order by JOUR_DEBUT ";
        $db->setQuery($query2);
        $date_afficher = $db->loadObjectList();

et

   $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.

Hors ligne

#9 18-08-2011 23:27:49

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : loadobjectlist + php

Comme tu sembles avoir des problèmes avec les quotes et les guillemets, je te conseille plutôt d'utiliser sprintf() pour construire tes requêtes.


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

Pied de page des forums