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 :

Variable de type INT dans un SELECT WHERE


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut Variable de type INT dans un SELECT WHERE
    Bonsoir à tous,

    Je m'arrache les cheveux sur un problème apparemment basique, mais pas tant que ça...

    Pour avoir dans un formulaire une liste déroulante, ça fonctionne parfaitement avec cet extrait de code (pour avoir une liste déroulante qui n'affiche que les fournisseurs dont l'id_echoppe =2
    Code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query("SELECT * FROM fournisseur WHERE id_echoppe='2'");
    Or je veux récupérer l'id_echoppe via une variable POST, mais cela ne fonctionne pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $id_echoppe = $_POST['id_echoppe'];
    $reponse = $bdd->query("SELECT * FROM fournisseur WHERE id_echoppe='$id_echoppe'");

    Je pensais que le problème venait de mon post, mais en faisant un printr de $id_echoppe il me renvoie bien la valeur 2.

    Et si je code ainsi pour "forcer" la valeur 2 dans ma variable (pour comprendre) cela ne fonctionne pas plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $id_echoppe =2;
    $reponse = $bdd->query("SELECT * FROM fournisseur WHERE id_echoppe='$id_echoppe'");
    J'ai essayé toutes les solutions : variable encadrée ou non par les points, quotes précédées de \... etc... rien n'y fait...

    D'où cela peut-il venir ?

    D'avance merci.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Salut,

    et comme ça t'as essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $reponse = $bdd->query('SELECT * FROM fournisseur WHERE id_echoppe = '.(int)$id_echoppe);

  3. #3
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Top !! Effectivement ça fonctionne maintenant parfaitement ! Même sans le (int) cela fonctionne. De ce que je comprend mon erreur était donc une erreur de syntaxe. Je croyais qu'il fallait toujours commence et finir la requête par une simple quote comme ici ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		$id_echoppe = $_POST['id_echoppe'];
    			$reponse = $bdd->query('SELECT * FROM fournisseur WHERE id_echoppe='$id_echoppe'');
    Là où ce que tu m'indiques, et qui fonctionne devient :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    		$id_echoppe = $_POST['id_echoppeF'];
    			$reponse = $bdd->query('SELECT * FROM fournisseur where id_echoppe='.$id_echoppe);
    C'est donc bien ça ? La référence à une variable doit toujours sortir des quotes ? Et être précéder d'un point (.) ?

    Merci pour tout en tout cas...

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    attention, t'emballe pas.
    Vu que tu ne prépares pas la requête, tu ne vires surtout pas le cast (le (int) devant la variable). On a la certitude que la valeur qui sera passée au sql sera un entier.
    Un entier doit être passé au sql tel quel, sans artifice.
    Une chaîne de caractère doit être entourée de guillemets et surtout échappée (ses caractères dangereux rendus inoffensifs)
    Ou mieux, bascule sur PDO : PDO, une soupe et au lit

  5. #5
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par gdelarminat Voir le message
    C'est donc bien ça ? La référence à une variable doit toujours sortir des quotes ? Et être précéder d'un point (.) ?
    ça dépend de la syntaxe que tu utilise pour construire la chaine Apostrophes ou guillemets : lesquels choisir ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  6. #6
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Effectivement tu as raison ;-). Ce que je voulais dire c'est qu’au-delà du (int) j'avais aussi un problème de syntaxe. D'ailleurs je rencontre maintenant un autre souci avec le reste du code.

    En gros, j'ai 2 tables, une table produit (id, nom, id_fournisseur), et une table fournisseur (id, nom, id_echoppe). Je souhaite afficher la liste des produits dont les fournisseurs appartiennent à un échoppe (sorte de magasin) particulière (que je récupère dans une variable via un $_POST issue d'une précédente page .php.

    Voici mon code ... avec PDO, une soupe et au lit ;-)

    J'ai l'impression que ma requette sql est bonne : je fais ma jointure, j'identifie la clé commune, et je mets ma condition via ma variable comme vu au début...
    Mais j'ai une erreur :
    ( ! ) Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 16
    ( ! ) Error: Call to a member function fetch() on boolean in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 16

    Encore un problème de syntaxe ?

    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
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=bdd_test;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
     
            die('Erreur : '.$e->getMessage());
    }
     
    $id_echoppe = $_POST['id_echoppeF'];
    $reponse = $bdd->query('SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe='.(int)$id_echoppe);
     
     
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
        <strong>liste des produits</strong> : <?php echo $donnees['produit.nom']; ?>
       </p>
    <?php
    }
     
    $reponse->closeCursor();
     
    ?>

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    il faut que tu apprennes à préparer les requêtes :




    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql_select = $bdd->prepare("SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ";
    $sql_select->execute([
       ':id_echoppe' => $id_echoppe
       ]);
    Ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql_select = $bdd->prepare("SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = ? ";
    $sql_select->execute([
       $id_echoppe
       ]);
    Ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql_select = $bdd->prepare("SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ";
    $sql_select->bindValue(':id_echoppe', $id_echoppe, PDO::PARAM_INT);
    $sql_select->execute();
    Puis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while ($donnees = $sql_select->fetch())
    {
    Dernière modification par Invité ; 23/09/2019 à 17h42.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Merci beaucoup du conseil. Pour autant même en préparant la requête (cf ci dessous) j'ai toujours la même erreur suivante au niveau de la fonction fetch():

    ( ! ) Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 23
    ( ! ) Error: Call to a member function fetch() on boolean in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 23
    Une idée ?

    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
    <?php
    try
    {
    	$bdd = new PDO('mysql:host=localhost;dbname=les_zechoppes;charset=utf8', 'root', '');
    }
    catch(Exception $e)
    {
     
            die('Erreur : '.$e->getMessage());
    }
     
    $id_echoppe = $_POST['id_echoppeF'];
    $sql_prepare = $bdd->prepare("SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ");
    $reponse = $sql_prepare->execute([
       ':id_echoppe' => $id_echoppe
       ]);
     
     
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
        <strong>liste des produits</strong> : <?php echo $donnees['produit.nom']; ?>
       </p>
    <?php
    }
     
    $reponse->closeCursor();
     
    ?>

  9. #9
    Invité
    Invité(e)
    Par défaut
    Et avec un try catch, ça dit quoi ?
    Dernière modification par Invité ; 23/09/2019 à 17h40.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Avec le try/catch autour de la requete j'ai toujours le même message d'erreur:
    ( ! ) Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 23
    ( ! ) Error: Call to a member function fetch() on boolean in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 23
    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
    <?php
    try{$bdd = new PDO('mysql:host=localhost;dbname=les_zechoppes;charset=utf8', 'root', '');}
    catch(Exception $e){die('Erreur : '.$e->getMessage());}
     
    /****************************************************************************/
     
    $id_echoppe = $_POST['id_echoppeF'];
     
    /****************************************************************************/
     
    try
    {
    $sql_prepare = $bdd->prepare("SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ");
    $reponse = $sql_prepare->execute([':id_echoppe' => $id_echoppe]);
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    /****************************************************************************/
     
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
        <strong>liste des produits</strong> : <?php echo $donnees['produit.nom']; ?>
       </p>
    <?php
    }
     
    /****************************************************************************/
     
    $reponse->closeCursor();
     
    ?>
    Idem, même erreur en mettant le try/catch autour du while... Même intitulé d'erreur à la ligne 25...
    ( ! ) Fatal error: Uncaught Error: Call to a member function fetch() on boolean in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 25
    ( ! ) Error: Call to a member function fetch() on boolean in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 25
    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
    <?php
    try{$bdd = new PDO('mysql:host=localhost;dbname=les_zechoppes;charset=utf8', 'root', '');}
    catch(Exception $e){die('Erreur : '.$e->getMessage());}
     
    /****************************************************************************/
     
    $id_echoppe = $_POST['id_echoppeF'];
     
    /****************************************************************************/
     
    try
    {
    $sql_prepare = $bdd->prepare("SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ");
    $reponse = $sql_prepare->execute([':id_echoppe' => $id_echoppe]);
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    /****************************************************************************/
     
    try
    {
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
        <strong>liste des produits</strong> : <?php echo $donnees['produit.nom']; ?>
       </p>
    <?php
    }
    }
    catch(Exception $e)
    {
            die('Erreur : '.$e->getMessage());
    }
     
    /****************************************************************************/
     
    $reponse->closeCursor();
     
    ?>

  11. #11
    Invité
    Invité(e)
    Par défaut
    OUPS !
    Je me suis (complètement) planté dans la syntaxe ! (habituellement, je n'utilise pas les même noms de variables...)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql_select = $bdd->prepare("SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ");
    $sql_select->execute([':id_echoppe' => $id_echoppe]);
     
    while ($donnees = $sql_select->fetch())
    {
    (j'ai aussi corrigé mon précédent message...)
    Dernière modification par Invité ; 23/09/2019 à 17h45.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    J'ai essayé avec ta bonne syntaxe pour "préparer" la requête et je n'ai plus de message d'erreur. Par contre la page est vide !
    Sachant que pour info sous phpmyadim la requête fonctionne très bien (quand j’écris la requête sous PMA j'indique comme valeur d'$id_echoppe = 1 et cela me renvoie bien le bon résultat (12 lignes pour info).

    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
    <?php
    try{$bdd = new PDO('mysql:host=localhost;dbname=les_zechoppes;charset=utf8', 'root', '');}
    catch(Exception $e){die('Erreur : '.$e->getMessage());}
     
    /****************************************************************************/
     
    $id_echoppe = $_POST['id_echoppeF'];
     
    /****************************************************************************/
     
    $sql_select = $bdd->prepare("SELECT * FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ");
    $sql_select->execute([':id_echoppe' => $id_echoppe]);
     
    while ($donnees = $sql_select->fetch())
    {
    ?>
        <p>
        <strong>liste des produits</strong> : <?php echo $donnees['produit.nom']; ?>
       </p>
    <?php
    }
     
    $sql_select->closeCursor();

  13. #13
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    en complément de mon precedent message,

    Si je ne passe pas par ma variable $_POST mais que je force la valeur de mon "Where" à 1 avec le code ci dessous, j'ai alors les 12 erreurs suivantes (qui correspondent au 12 enregistrements que je m'attend à avoir). Visiblement je suis donc bien rentré dans la boucle mais avec une erreur malgré tout. N'est ce pas une piste ? Si on trouve la solution sans passé par la variable peut être pourra t on la rajouter dans un second temps ? Mais j'avoue ne pas comprendre comment corriger ce code en forçant la valeur du WHERE fournisseur.id_echoppe=1 : Probleme de syntaxe la aussi ?

    Voici les erreurs (x12)
    ( ! ) Notice: Undefined index: produit.nom in C:\wamp64\www\les-zechoppes\dev\bdd\formulaire_bdd\commande_client_2ter.php on line 16
    Et le code :
    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
    <?php
    try{$bdd = new PDO('mysql:host=localhost;dbname=les_zechoppes;charset=utf8', 'root', '');}
    catch(Exception $e){die('Erreur : '.$e->getMessage());}
     
     
    /****************************************************************************/
     
     
    $reponse = $bdd->query("SELECT * FROM produit INNER JOIN fournisseur ON produit.id_fournisseur=fournisseur.id WHERE fournisseur.id_echoppe=1");
     
     
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
        <strong>liste des produits</strong> : <?php echo $donnees['produit.nom']; ?>
       </p>
    <?php
    }
     
    $reponse->closeCursor();
     
    /****************************************************************************/
    ?>

  14. #14
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    A noter que sur mon dernier message en forçant la valeur de mon WHERE à fournisseur.id_echoppe =1 j'avais donc 12 message d'erreur.
    Le souci vient de mon echo j'ai l'impression : echo $donnees['produit.nom'];.

    Or si je modifie mon echo ainsi : echo $donnees['nom'] alors je n'ai plus de message d'erreur et j'ai la liste de 12 noms qui s'affiche. Mais pas les bons ! Il affiche le champs nom de la table "fournisseur". Or je veux celui de la table "produit". Raison pour laquelle dans le echo j'avais mis 'produit.nom'... Syntaxe la encore ?

  15. #15
    Invité
    Invité(e)
    Par défaut
    Ah ben non...
    Tu ne peux pas écrire $donnees['produit.nom'], mais $donnees['nom'], sauf que "nom" peut être ambigu si tu as une colonne "nom" dans les 2 tables.

    La bonne méthode est de :
    • récupérer, via la requête, uniquement les colonnes qu'on veut afficher (pas de "SELECT * ...")
    • éventuellement, mettre des ALIAS (AS...)

    Par exemple ici :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT produit.nom AS produit_nom, ..."
    Par conséquent, à l'affichage :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo htmlspecialchars($donnees['produit_nom'])

    IMPORTANT : on utilise TOUJOURS htmlspecialchars() à l'AFFICHAGE.

  16. #16
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Yesssssss !

    J'obtiens bien le résultat escompté. Le problème venait bien du champs "nom" présent dans les deux tables...
    Ce qui donne ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $reponse = $bdd->query("SELECT produit.nom as nom_produit, fournisseur.nom as nom_fournisseur FROM produit INNER JOIN fournisseur ON produit.id_fournisseur=fournisseur.id WHERE fournisseur.id_echoppe=1");
     
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
        <?php echo 'Produit '.$donnees['nom_produit'].' du fournisseur '.$donnees['nom_fournisseur']; ?>
       </p>
    <?php
    }
     
    $reponse->closeCursor();
    Maintenant j'ai toujours mon problème quand je veux passer mon fournisseur.id_echoppe avec une variable. Si je résume nos échanges et tes conseils je devrais l'écrire ainsi. Or ma page est vierge ! Rien ne s'affiche !

    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
    <?php
    try{$bdd = new PDO('mysql:host=localhost;dbname=les_zechoppes;charset=utf8', 'root', '');}
    catch(Exception $e){die('Erreur : '.$e->getMessage());}
     
    /****************************************************************************/
     
    $id_echoppe = $_POST['id_echoppeF'];
     
    $sql_select = $bdd->prepare("SELECT produit.nom as nom_produit, fournisseur.nom as nom_fournisseur FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ");
    $sql_select->execute([':id_echoppe' => $id_echoppe]);
     
    while ($donnees = $sql_select->fetch())
    {
    ?>
        <p>
        <?php echo 'Produit '.$donnees['nom_produit'].' du fournisseur '.$donnees['nom_fournisseur']; ?>
       </p>
    <?php
    }
     
    $sql_select->closeCursor();
    ?>

  17. #17
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    En complément de mon précédent message, le problème semble venir de la manière de coder la requete preparé. Car sans requete preparé, ça marche nickel ainsi ! Ce qui solutionne donc mon problème mais j'aurais aimé comprendre pourquoi ça fonctionne pas en "préparé"...

    Voici le code qui fonctionne :
    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
    $id_echoppe = $_POST['id_echoppeF'];
    $reponse = $bdd->query("SELECT produit.nom as nom_produit, fournisseur.nom as nom_fournisseur FROM produit INNER JOIN fournisseur ON produit.id_fournisseur=fournisseur.id WHERE fournisseur.id_echoppe=$id_echoppe");
     
     
    while ($donnees = $reponse->fetch())
    {
    ?>
        <p>
        <?php echo 'Produit '.$donnees['nom_produit'].' du fournisseur '.$donnees['nom_fournisseur']; ?>
       </p>
     
    <?php
    }
     
    $reponse->closeCursor();

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

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

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 407
    Points : 4 844
    Points
    4 844
    Par défaut
    Salut,

    Et avec (int), toujours le même problème ? (rawsrc te l'a suggéré dans son post)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $sql_select->execute([':id_echoppe' =>(int)$id_echoppe]);

  19. #19
    Futur Membre du Club
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2019
    Messages : 19
    Points : 5
    Points
    5
    Par défaut
    Effectivement j'ai finis par l’oublier lui ;-)
    Mais ça ne marche pas plus. Pas d'erreur, mais page vierge...

    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
    $id_echoppe = $_POST['id_echoppeF'];
     
    $sql_select = $bdd->prepare("SELECT produit.nom as nom_produit, fournisseur.nom as nom_fournisseur FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ");
    $sql_select->execute([':id_echoppe' => (int)$id_echoppe]);
     
    while ($donnees = $sql_select->fetch())
    {
    ?>
        <p>
        <?php echo 'Produit '.$donnees['nom_produit'].' du fournisseur '.$donnees['nom_fournisseur']; ?>
       </p>
    <?php
    }
     
    $sql_select->closeCursor();

  20. #20
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    la doc de PDO indique que tous les paramètres sont par défaut des string, donc il faut lier ton paramètre entier séparément.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql_select = $bdd->prepare("SELECT produit.nom as nom_produit, fournisseur.nom as nom_fournisseur FROM produit INNER JOIN fournisseur ON produit.idfournisseur=fournisseur.id WHERE fournisseur.id_echoppe = :id_echoppe ");
    $sql_select->bindValue(':id_echoppe', (int)$id_echoppe, PDO::PARAM_INT);
    $sql_select->execute();

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/01/2008, 09h54
  2. Critère de type texte dans une clause WHERE
    Par VBBBA dans le forum Access
    Réponses: 4
    Dernier message: 03/09/2006, 16h23
  3. Réponses: 8
    Dernier message: 16/08/2006, 14h39
  4. [Tableaux] Variable de type array dans un formulaire
    Par ThAOTh dans le forum Langage
    Réponses: 3
    Dernier message: 14/03/2006, 17h49
  5. Réponses: 3
    Dernier message: 23/02/2006, 09h37

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