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 :

Accès à une table [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut Accès à une table
    Bonjour,

    Je débute vraiment en php. Mon site a php5 et une base MySQL déjà en service grâce à un autre logiciel php.
    Cette base contient plusieurs tables dont une table "customer".

    J'essaie de faire un php tout simple : savoir si un email ou un prénom existent dans la table "customer". J'ai fait un formulaire qui renvoie à une page php. La base MySQL est trouvée, le problème ne vient pas de là.

    Je fais ensuite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $strCorr = htmlspecialchars($_POST["prenom"]);
    $quer = "SELECT fname FROM customer WHERE fname =";  
    $queret = $quer.$strCorr;
    $ret = mysql_query ($queret) or die (mysql_error ());
    Cela marche si je rentre "fname" dans mon formulaire, mais si je rentre un des prénoms qui y est inscrit (je peux les lire depuis myAdminPHP ou depuis le logiciel installé), cela ne marche pas :
    Unknown column 'Tim' in 'where clause'
    En clair, mon code permet de savoir si une colonne existe dans la table, mais pas ce qu'il y a dedans.

    Que dois-je faire selon vous? Cela fait déjà deux jours que je patine... Merci d'avance.

    Note : la base contient plusieurs tables, "category", "customer", etc.

  2. #2
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Salut

    Tu as oublié d'entourer la valeur à chercher avec des quotes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $strCorr = htmlspecialchars($_POST["prenom"]);
    $quer = "SELECT fname FROM customer WHERE fname = '" . $strCorr . "'";
    $ret = mysql_query ($quer) or die (mysql_error ());
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci Torgar,

    Cette fois, je rentre n'importe quoi dans mon formulaire, et c'est bon à chaque fois!!!

    Bon, je vais me renseigner sur cette histoire de colonne...

  4. #4
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    la solution de Torgar est fonctionnelle (+simple) par contre elle est mauvaise dans le sens ou elle permet de créer une belle injection SQL.

    http://us2.php.net/manual/fr/functio...ape-string.php

  5. #5
    Rédacteur

    Avatar de Torgar
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 334
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 334
    Par défaut
    Dans ce cas il est plutôt conseillé d'utiliser PDO avec les requêtes préparés.
    Je ne suis pas schizophrène, nous sommes unanime !!!

    ► Pensez à la balise code et au CODE HTML GENERE !!!!
    ► Au si c'est le cas et au à ceux qui vous ont aidé.
    Vous souhaitez participer aux rubriques CSS et (X)HTML ? Contactez-nous !

    Créer des colonnes de même hauteur en CSS
    Glossaire CSS
    Les bordures en CSS3
    Les transitions en CSS3

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci pour vos réponses à tous.

    J'ai su écrire la connexion en pdo : apparemment, ça marche.

    Par contre, comment écrire la requête?
    J'essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $stmt = $dbh->prepare("SELECT * FROM customer where fname = ?");
    $stmt->bindParam($strCorr);
    if ($stmt->execute(array($_GET['fname']))) {
      while ($row = $stmt->fetch()) {
        print_r($row);
      }
    }
    et j'ai cela :
    Fatal error: Call to a member function prepare() on a non-object in /homepages/9/d229586126/htdocs/saisie.php on line 24
    la ligne 24 étant
    $stmt = $dbh->prepare("SELECT * FROM customer where fname = ?");
    Bon, j'en suis au même point en somme : comment me faire comprendre par mon site??

  7. #7
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Es ce que tu te connectes bien à ta base de données?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $dbh = new PDO('mysql:host=localhost;dbname=[lenomdetabase]', 'root', 'motdepasse'); //par défaut, à changer pour tes besoins

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci ledisciple pour ton post,

    Je me suis posé la même question et j'ai essayé ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $sql =  'SELECT fname, lname, email FROM customer ORDER BY lname';
        foreach  ($dbh->query($sql) as $row) {
            print $row['fname'] . "\t";
            print  $row['lname'] . "\t";
            print $row['email'] . "\n". "<br/>";
      }
    Tous les noms inscrits dans cette base s'affichent bien à l'écran. Bon, me voilà rassuré!! Je suis bien connecté à ma base, et le problème de vient pas des "colonnes" que ce script parcoure très bien.

    Le problème vient bien de comment formuler la requête. J'ai essayé aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $stmt = $dbh->exec($queret);
    Pas mieux!

    Ni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $quer = "SELECT fname FROM customer WHERE fname = ";
    $queret = $quer.$strCorr;
    ,
    ni
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $queret = "SELECT fname FROM customer WHERE fname = '$strCorr'";
    ne fonctionnent ($strCorr est le nom donné par le formulaire.)

    Ah là là!!

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Bon, merci à tous,

    en faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql =  "SELECT email FROM customer WHERE email = '" . $strCorr . "'";
    puis en affichant le tableau, cela marche. Je pensais que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ($dbh->query($sql) as $row)
    renvoyait en boolean, en fait il renvoie un tableau...

    Je débute, comme je vous le disais! Merci encore.

  10. #10
    Membre extrêmement actif Avatar de ledisciple
    Homme Profil pro
    observateur de nuage niveau 2.3
    Inscrit en
    Août 2008
    Messages
    860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : observateur de nuage niveau 2.3

    Informations forums :
    Inscription : Août 2008
    Messages : 860
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $dbh = new PDO('mysql:host=localhost;dbname=[lenomdetabase]', 'root', 'motdepasse'); //par défaut, à changer pour tes besoins
    $sql =  'SELECT fname FROM customer WHERE fname = ?';
    $sql = $dbh->prepare($sql);
    $sql->execute("[ta valeur]"); //tu executes ta requête avec ta valeur : soit une variable, issu d'un $_POST ou autre
    $tabresult = $sql->fetchAll(); //tu mets tes résultats en tableau
    foreach ($tabresult as $indice=>$valeur){
    echo $indice." : "$valeur;
    }
    J'ai pas testé

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

Discussions similaires

  1. droit d'accès à une table
    Par Adren dans le forum Requêtes
    Réponses: 4
    Dernier message: 10/07/2006, 16h39
  2. Accès à une Table Indexée (index composite) en VBA ACCESS
    Par Denis VERNON dans le forum Access
    Réponses: 1
    Dernier message: 21/04/2006, 19h47
  3. [POSTGRESQL - C#] Probleme d'accès à une table
    Par angusyoung34 dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 31/12/2005, 14h33
  4. problème droit accès à une table
    Par lio33 dans le forum Administration
    Réponses: 3
    Dernier message: 04/10/2005, 20h35
  5. [ADO] [MSACCESS] Problème d'accès à une table nommée OF
    Par FredRaid dans le forum Bases de données
    Réponses: 3
    Dernier message: 15/02/2005, 18h22

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