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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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
    Membre averti
    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
    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 confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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
    Membre averti
    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
    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();
     
    ?>

  6. #6
    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 à 18h42.

  7. #7
    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 : 41
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    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]

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

Discussions similaires

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

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