IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[POO] [CLASS] config de parametres facultatifs d'une fonction


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut [POO] [CLASS] config de parametres facultatifs d'une fonction
    Bonjour,
    j'ai un soucis avec les parametres d'une fonction de classe.
    J'ai une table "produits" qui est liée à une autre table "categories" via la clé étrangère "catid" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    produits.catid = categories.id
    Dans ma fonction je passe des arguments en parametres.
    Par defaut cela me retourne tous les produits de la table "produits" mais je peux également lui mettre un ordre de tri par exemple.

    Mon problème est que dans une page je veux que cela m'affiche UNIQUEMENT les produits correspondant à 1 catégorie mais je n'y arrive pas.

    Voici ma fonction avec les conditions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    function tableau_produits($params='') {
         $tb = array();
     
        $produits = $this->nom_table('produits');
    	$categories = $this->nom_table('categories');
     
        if (!is_array($params)) $params = array();
     
        if (!isset($params['tables'])) {
        	$params['tables'] = "$produits";
        }
    $conditions = array();
     
    // --- conditions : catégorie
    /-- C'EST LA QUE CELA NE MARCHE PAS
     
        if (isset($params['catid'])) {
    	$c = $params['catid'];
    $conditions[] = "and
            $produits.catid = $categories.id";
    	  $conditions[] = "and
            $produits.catid like '$c'";
     
          if (!eregi($categories, $params['tables'])) {
          	$params['tables'] .= ", $categories";
          }
        }
    //--FIN DU PROBLEME
     
     // --- requête SQL : champs et tables utilises
        $cde = 'select ' . $params['champs'];
        $cde .= ' from ' . $params['tables'];
        $cde .= ' where 1';
     
    // --- requête SQL : ajout des conditions
        for ($i=0; $i<count($conditions); $i++) {
          $cde .= ' ' . $conditions[$i];
        		} 
     
    $result = $this->requete_sql($this->db, $cde);
           while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
          $key = $row['id'];
          $tb["$key"] = $row;
        }
        return($tb);
      }
    Et voici comment je l'appele dans la page où je veux que cela me donne UNIQUEMENT les produits de la categorie selectionnées via "catid" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $params = array('catid'=>$catid,
      'nb_start'=>$nb_start,
      'nb_maxi'=>$nb_items_page,
      'comptage'=>1);
    $tb_produits = $agence->tableau_produits($params);
    ==> donc là je veux qu'il me selectionne les produits en fonction de la "catid" mais cela ne marche pas.
    Quelqu'un voit t-il ?
    merci beaucoup.

  2. #2
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Pourquoi "ca marche pas" ? Tu as afficher la requête ? Tu l'as passée à PhpMyadmin ?

  3. #3
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    Cela m'affiche en fait tous les produits et non pas ceux de la categorie dont le numero "catid" correspond a celui de l'url.
    Comment faire dans phpmyadmin avec les $variables ?
    Merci

  4. #4
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Il faut afficher la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $cde;
    $result = $this->requete_sql($this->db, $cde);

  5. #5
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    Alors voilà déjà l'url de la page qui contient bien la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    index.php?module=categorie&catid=1
    Et voici ce que cela m'affiche comme requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from ag_produits where 1 order by ag_produits.id desc limit 0,12
    ==> 12 etant le nombre maxi par page.
    Cela me prend la valeur par defaut c'est tout, et ne me rajoute pas la condition de la catid :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $params = array('catid'=>$catid,
      'nb_start'=>$nb_start,
      'nb_maxi'=>$nb_items_page,
      'comptage'=>1);
    $tb_produits = $agence->tableau_produits($params);
    Cela devrait m'afficher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "where ag_produits.catid=ag_categories.id"

  6. #6
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    et bien continue dans cette voie !
    Tu as affiché la requête, tu as vu qu'elle ne correspondait pas à tes attentes. Donc maintenant affiche des infos pertinentes aux endroits pertinents. Genre es-tu sur que tu passe bien le parametre escompté ? que vaut $conditions ?

    var_dump et echo sont tes amies 8)

  7. #7
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    et bien cela me met :
    alors que je suis censé passer des parametres

  8. #8
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    Et tout en haut de la fonction ?

  9. #9
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    cela me repond NULL.

  10. #10
    Expert confirmé Avatar de Mr N.
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    5 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 5 418
    Par défaut
    La vérité est ailleurs donc...
    Tu connais un ami qui pratique la magie vaudou ? ^^

  11. #11
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    ben je vais continuer a chercher....

  12. #12
    Membre éclairé Avatar de guy2004
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    805
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 805
    Par défaut
    Bon j'ai trouvé finalement mais j'ai un autre soucis.

    Quand j'affiche ma requete dans phpmyadmin elle me sort 3 resultats, et pourtant ma fonction me renvoie qu'1 resultat ?
    Voici ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from ag_produits, ag_categories where 1 and ag_produits.catid = ag_categories.id order by ag_produits.id desc limit 0,12
    Et voici une partie de la fonction créeant le tableau à partir de la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    .....
        // --- requête SQL : recherche des enregistrements
        // --- et stockage dans un tableau
     
    	echo '<br/>requete = '.$cde;// C'EST LA REQUETE AFFICHEE PLUS HAUT QUI DONNE 3 RESULTATS
     
        $result = $this->requete_sql($this->db, $cde);
     
        if ($this->debug_mode && !$result) {
        	echo "<b>tableau_produits</b> $cde (";
        	echo mysql_num_rows($result) . ")<br>";
        }
        while($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
          $key = $row['id'];
          $tb["$key"] = $row;
     
        }
    echo 'br/> nbre de resultats'.count($tb);// LA CELA ME DONNE 1 ALORS UQE J'ATTENDS 3 ?!
        return($tb);
     
      }
    Quelqu'un voit ?
    merci

Discussions similaires

  1. Réponses: 3
    Dernier message: 03/10/2008, 13h48
  2. Parametre d'entrée : une fonction!
    Par Enayem dans le forum C++
    Réponses: 15
    Dernier message: 04/06/2007, 14h44
  3. Passage de parametre facultatif a une fonction
    Par Rakken dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 06/04/2007, 14h06
  4. [débutant] mettre un parametre optionnel dans une fonction
    Par maximenet dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 03/08/2006, 17h08
  5. Paramètres facultatifs dans une fonction
    Par eric41 dans le forum Langage
    Réponses: 3
    Dernier message: 19/07/2006, 14h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo