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

PHP & Base de données Discussion :

Champ id dans on clause est ambigu [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Par défaut Champ id dans on clause est ambigu
    Bonjour tout le monde,
    j'ai un soucis avec une requete sql qui marche très bien sur la console mysql, mais avec le code php, j'ai l'erreur suivante:

    Erreur de requête : 1052 – Champ: 'id_categorie_produit' dans on clause est ambigu
    ma fonction est la suivante:

    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
    function sqlListerCategoriesProduits($conn,$trier="id_categorie_produit"){
     
    	$req = "SELECT * FROM categories_produits cp 
    	INNER JOIN produits p on CP.id_categorie_produit = P.id_categorie_produit 
    	INNER JOIN marques m ON p.id_marque = m.id_marque 
    	AND cp.id_categorie_produit = $trier
    	GROUP BY cp.id_categorie_produit";
     
    	if($result = mysqli_query($conn,$req,MYSQLI_STORE_RESULT)){
     
    		$nbResult = mysqli_num_rows($result);
            $liste = array();
            if ($nbResult) {
                mysqli_data_seek($result, 0);
                while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
                    $liste[] = $row;
                }
            }
            mysqli_free_result($result);
            return $liste;
        } else {
            errSQL($conn);
            exit;
            }	
    	}
    De l'aide svp!!
    Merci

  2. #2
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 518
    Par défaut
    Salut,

    C'est la variable $trier qui pose problème $trier="id_categorie_produit", de quel id_catégorie_produit s'agit-il ? de celui de la table produits ou categories_produits?

    Ajoutes un p. au début == > $trier="p.id_categorie_produit"
    Ne pas oublier aussi de remettre les alias P et CP en minuscule ==> on cp.id_categorie_produit = p.id_categorie_produit

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Par défaut
    Merci pour ta réponse,

    je dois afficher les produits liés à une catégorie de produits donc cp dans la select

    j'ai fait ce que tu m'as suggéré, maintenant j'ai une SELECT vide, et le var_dump($trier) me renvoie un seul enregistrement et pourtant j'en ai deux
    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
    function sqlListerCategoriesProduits($conn,$trier){
     
    	$req = "SELECT * FROM categories_produits cp 
    	INNER JOIN produits p on cp.id_categorie_produit = p.id_categorie_produit 
    	INNER JOIN marques m ON p.id_marque = m.id_marque 
     	and cp.id_categorie_produit='$trier'
     
    		";
     
    	var_dump($trier);
    	if($result = mysqli_query($conn,$req,MYSQLI_STORE_RESULT)){
     
    		$nbResult = mysqli_num_rows($result);
            $liste = array();
            if ($nbResult) {
                mysqli_data_seek($result, 0);
                while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
                    $liste[] = $row;
     
                }
            }
     
            mysqli_free_result($result);
            return $liste;
        } else {
            errSQL($conn);
            exit;
            }	
    	}
    mon formulaire ressemble à ca:

    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
    $tri_critere = isset($_POST['trier']) ? trim($_POST['tri_critere']) : "id_categorie_produit";
    $liste = sqlListerCategoriesProduits($conn,$tri_critere);
     
    <form id="trier" action="gestionCatalogueProduits.php" method="post">
                <label>Choisir une catégorie de produit</label>
     
                <select name="tri_critere"> 
                 <?php foreach ($liste as $row) : 
    				var_dump($row);
     
    				?>
    <option value="<?php echo $row['nom_categorie_produit']; ?>"><?php echo $row['nom_categorie_produit']; ?></option> 
     
     
               	 <?php endforeach; ?>
                </select>
                <input type="submit" name="trier" value="Afficher">
            </form>
     
        	<?php if (count($liste) > 0) : ?>
            <table>
                <tr>
                    <th>Produit</th>
                    <th>Description</th>
                    <th>Prix</th>
                     <th>Marque</th>
                </tr>
                <?php foreach ($liste as $row) : ?>
                <tr>
                    <td><?php echo $row['nom_produit'] ?></td>
                    <td><?php echo $row['description_produit'] ?></td>
                    <td><?php echo $row['prix_produit'] ?></td>
                    <td><?php echo $row['nom_marque'] ?></td>
                </tr>
                <?php endforeach; ?>
            </table> <?php else : ?>
            <p>Aucun produit trouvé trouvé.</p>
            <?php endif; ?>

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 518
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 518
    Par défaut
    Tu réalises ce que tu fais ici :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    <option value="<?php echo $row['nom_categorie_produit']; ?>">
    , puis and cp.id_categorie_produit='$trier' ?

    La valeur de l'option est celle du nom de la catégorie alors que dans la requête tu la compare avec l'id. Il faut mettre la valeur de l'id catégorie produit dans la value de l'option au lieu du nom.

    J'essaies d'analyser ta requête, et d'après ce que je vois, la valeur de la variable $trier est soit un chiffre (1,2,3....id de la catégorie) soit p.id_categorie_produit, et dans le deuxième cas la requête devient :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT * FROM categories_produits cp 
    INNER JOIN produits p on cp.id_categorie_produit = p.id_categorie_produit 
    INNER JOIN marques m ON p.id_marque = m.id_marque 
    and cp.id_categorie_produit=p.id_categorie_produit
    ce qui donne la même condition du début (les deux conditions des lignes 3 et 5 sont les mêmes !).

    En plus je ne vois pas trop l'utilité de la fonction sqlListerCategoriesProduits($conn,$tri_critere); quand la valeur de l'id catégorie est absente.

    N'oublis pas aussi de préciser seulement les champs dont tu as besoin de sélectionner au lieu de (*).

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Par défaut
    oui, c'est une erreur de débutante,
    je l'ai corrigé , mais ca change rien !!

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 57
    Par défaut
    quand j’enlève la variable $trier de ma requete sql, mon SELECT est rempli, mais j'arrive pas à faire le filtre du tableau, j'ai tout les produits

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. champs calculé dans la clause where
    Par Issam dans le forum Développement
    Réponses: 8
    Dernier message: 18/01/2011, 11h20
  2. Champ inconnu dans where clause
    Par sam01 dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/06/2010, 12h48
  3. [MySQL] erreur champ ' ' inconnu dans where clause
    Par j2eejsp dans le forum PHP & Base de données
    Réponses: 13
    Dernier message: 29/01/2009, 00h28
  4. Réponses: 23
    Dernier message: 11/11/2007, 20h01
  5. est ce que un champs existe dans la base?
    Par cha_cha dans le forum Langage SQL
    Réponses: 9
    Dernier message: 03/10/2005, 11h25

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