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 :

Mettre une Variable dans une requête SELECT


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 32
    Points
    32
    Par défaut Mettre une Variable dans une requête SELECT
    Bonjour,
    Dans mon script php j'ai une requête comme celle-ci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT nom, prenom, age FROM Personne WHERE nom ="Dupont"';
    Je souhaiterais remplacer la condition nom ="Dupont" par une variable qui sera transmise depuis mon Fla as3, j'ai donc écrit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $nom = $_POST['want_nom'];
    $sql = 'SELECT nom, prenom, age FROM Personne WHERE nom ='.$nom;
    mais ça ne fonctionne pas, je commence tout juste dans le php et le sql, pouvez-vous m'aider à résoudre ce problème ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ça ne fonctionne pas parce que la chaîne obtenue est SELECT nom, prenom, age FROM Personne WHERE nom =Dupont et qu'il manque les quotes autour de Dupont.
    Mais quoi qu'il en soit, il ne faut surtout pas faire ça (c'est à dire introduire directement le contenu d'une variable dans une requête SQL), car c'est un trou de sécurité qui ouvre la porte aux injections SQL.
    Tu dois utiliser des requêtes préparées (ça consiste à mettre un placeholder dans la requête qui ensuite sera remplacer par le contenu de ta variable dont certains caractères seront automatiquement échappés pour éviter les injections).

    En utilisant PDO, ça donne ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $dbh = new PDO('mysql:host=myhost;dbname=mydb', 'login', 'password');
     
    $sql = 'SELECT nom, prenom, age FROM Personne WHERE nom = :nom';
     
    $sth = $dbh->prepare($sql);
    $sth->execute(array(':nom', $nom));
    Cherche les tutoriels sur PDO et les requêtes préparées sur le site et regarde le manuel PHP.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 32
    Points
    32
    Par défaut
    Euh oui, effectivement j'ai pas encore rencontré le PDO, je vais me pencher dessus, sinon j'ai modifié ma ligne comme ça et ça fonctionne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT nom, prenom, age FROM Personne WHERE nom="'.$nom.'"';
    mais j'ai bien compris que ce n'est pas la bonne façon d'opérer côté sécurité.

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

    A LIRE en priorité :


  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 32
    Points
    32
    Par défaut
    Bonjour j'ai message d'erreur:
    Fatal error: Uncaught exception 'PDOException' with message 'could not find driver
    .... dans notepad++ quand j'écris PDO il reste en grisé comme si il n'était pas reconnu, vous m'expliquer ce qui ce passe, svp ?
    Mon php avec notepad++ et phpmyadmin.free.fr et Windows 10

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 32
    Points
    32
    Par défaut
    Bonjour,
    Je n'ai trouvé aucune solution pour régler ce message d'erreur qui m'empèche du coup d'utiliser du PDO, quelqu'un pourrait-il m'aider svp ?

  7. #7
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Montre ton code.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  8. #8
    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
    "Could not find driver" c'est soit que ton serveur n'a pas correctement configuré, soit que ta chaîne de connexion est incorrecte.
    Il faut donc 1) vérifier que PDO est actif sur ton serveur et que le driver correspondant à ton SGDB est également présent et actif (un php_info() peut aider)
    2) vérifier la syntaxe de ta connexion.
    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]

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 32
    Points
    32
    Par défaut
    Bonsoir,
    Désolé je suis rentré tard ce soir, merci d'avance pour votre aide, voici dans un premier temps mon script que j'ai établi d'après un tuto sur Youtube:
    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>
     
    $serveur = "sql.free.fr";
    $login = "monlogin";
    $pass = "monmdp";
     
    try
    {
     
    $connexion = new PDO("mysql:host=$serveur;dbname=Personne", $login, $pass);
    $connexion -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo 'Connexion à la base de données réussie';
    }
     
    catch(PDOException $e)
     
    {
     
    echo 'Echec de la connexion : ' .$e->getMessage();
     
    }
     
    ?>
    J'ai ce message d'erreur; Echec de la connexion : could not find driver

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Et que t'affiche la commande php suivante:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo phpversion(), PHP_EOL, implode(' ; ', preg_grep('~pdo|sql~i', get_loaded_extensions())), PHP_EOL;

    J'ai lu ça et là que l'hébergement de free ne proposait PDO qu'avec SQLite mais pas avec MySQL. Si ça s'avère exacte (consulte l'assistance de free pour en avoir confirmation), inutile de s'acharner avec un hébergeur aussi pourri, change d'hébergeur (mais tu peux cela dit aussi utiliser l'extension mysqli à la place, si elle est fournie bien sûr).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  11. #11
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 32
    Points
    32
    Par défaut
    Ca me donne: Echec de la connexion : could not find driver5.1.3RC4-dev PDO ; SQLite ; pgsql ; pdo_sqlite ; mysql

  12. #12
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ok, il n'y a pas mysqli non plus et la version de PHP est obsolète depuis plus de 10 ans. Donc je te conseille de te dégoter un nouvel hébergement, fait une petite recherche, il y en a des gratuits ou des mutualisés pas chères (vérifie la version de php > 7 et la présence de MySQL, mais aussi l'espace fourni et le nombre de bdd autorisées pour tes besoins, par exemple l'offre World Lite de PlanetHoster). Pour info la version actuelle de PHP est 7.3.

    C'est hallucinant qu'avec le blé que se fait le groupe Iliad (free) ils ne soient pas foutu de fournir un hébergement correct (même gratuit).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  13. #13
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 32
    Points
    32
    Par défaut
    OUI effectivement je m'aperçois que free est encore plus pourri que je ne le pensais et pour l'assistance c'est même pas la peine dit penser, sinon je ne savais pas qu'il en existait des gratuit je vais tenter dans trouver gratos car je suis fauché, si tu en a un à me proposer je suis preneur, je voudrais vraiment pouvoir commencer mon apprentissage php avec du PDO.

  14. #14
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Je t'en ai suggéré un dans mon précédent post, mais il y en a d'autres (vérifie aussi qu'ils soient sans pub) une petite recherche te les donnera. Il existe aussi des hébergements mutualisés pas cher. Maintenant, si tu n'as pas la nécessité d'être hébergé, rien ne t'empêche de faire des sites sur ta propre machine (en local), mais bon, un projet à mettre en ligne c'est aussi quelque chose de motivant.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

    Non, free.fr n'est plus si "pourri".
    Il faut savoir l'amadouer...

    Je ne suis pas sur mon ordi. Mais on peut utiliser PDO chez free.
    (Je pourrais tester demain...)

  16. #16
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    74
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 74
    Points : 32
    Points
    32
    Par défaut
    OUi je vais voir pour World Lite il parait pas mal au premier abors, je vais toutefois voir ce que jreaux62 va annoncer demain, sinon mon projet est d'envoyer des données depuis mon smartphone à la base de données et que c'est données puissent être récuperées dans un fichier Excel depuis un pc, la première partie est déjà terminé, il me reste à modifier mes scripts php avec du PDO pour la sécurité et la dernière étape récupérer les données depuis Excel.

Discussions similaires

  1. Mettre des variables dans une requête SQL
    Par tamtam64 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 20/01/2015, 13h25
  2. Réponses: 4
    Dernier message: 27/04/2006, 14h05
  3. [CSS] Mettre des variable dans une feuille de style???
    Par Shakta dans le forum Mise en page CSS
    Réponses: 9
    Dernier message: 24/02/2006, 10h39
  4. fusion de 2 colonnes dans une requête select?
    Par epeichette dans le forum Requêtes
    Réponses: 1
    Dernier message: 04/11/2005, 23h05
  5. C'est possible dans une requête SELECT ?
    Par Kokito dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/04/2005, 16h59

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