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 :

Requêtes différentes pour récupérer un ou plusieurs enregistrements [Débutant(e)] [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut Requêtes différentes pour récupérer un ou plusieurs enregistrements
    [edit : et également requête pour récupérer un ou plusieurs champs d'un même enregistrement]

    Attention, c'est une question de débutante...


    Dans ma requête sql, j'ai bossé des tutos bien sûr, mais bon, je débute...

    Je vous mets le passage de l'excellent tuto que j'ai utilisé pour mon code qui fonctionne, mais qui me pose question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    // lancement de la requete  
    $sql = 'SELECT telephone FROM liste_proprietaire WHERE nom = "LA GLOBULE"';  
     
    // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)  
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
     
    // on recupere le resultat sous forme d'un tableau  
    $data = mysql_fetch_array($req);  
     
    // on libère l'espace mémoire alloué pour cette interrogation de la base  
    mysql_free_result ($req);
    Ma question donc : Pourquoi la requête suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = 'SELECT telephone FROM liste_proprietaire WHERE nom = "LA GLOBULE"';
    est-elle un tableau ?

    Je pensais qu'il n'y avait qu'une donnée à récupérer ?
    Ou bien est-ce que le tableau, c'est la suite de caractères du téléphone de la Globule ?

    Désolée hein, et si mes questions énervent, dites-vous que je ne peux que m'améliorer !
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  2. #2
    Membre averti Avatar de sacricri
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 384
    Points
    384
    Par défaut
    Bonjour,

    Ce n'est pas ta requête qui est un tableau, c'est le résultat du lancement de ta requête qui est mis dans un tableau via la fonction mysql mysql_fetch_array().

    Ici, tu ne sélectionnes que le champ telephone de la table liste_proprietaire. Pour cet exemple, l'intérêt de créer un tableau des résultats de ta requête n'est pas énorme mais si tu faisais une sélection de plus d'un champ, ça te serait nécessaire.
    par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $sql = 'SELECT telephone, adresse FROM liste_proprietaire WHERE nom = "LA GLOBULE"'; 
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error()); 
    $data = mysql_fetch_array($req);
    pour récupérer les données, tu fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo $data['telephone'];
    echo $data['adresse'];
    Ce qui t'écriras la valeur insérée dans le champ telephone puis celle du champ adresse.

    Dans ton cas, tu souhaites vérifier si l'email est déjà présent, le mysql_fetch_array() n'est donc pas nécessaire. Le plus simple serait ceci alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $num = mysql_num_rows($req);
    if($num>0){
     echo "Votre email existe déjà en base de données !";
    }else{
     echo "Merci de vous être inscrit !"; 
    }
    mysql_num_rows() compte le nombre de résultat(s) ce qui t'intéresse plus ici
    symfony power user !

  3. #3
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut agreable
    Tudieu, ce que ce forum est agréable !

    Une bonne fée vient mettre les balises code que j'avais oublié (promis, j'oublie plus).

    Et une réponse précise et détaillée est donnée à ma question.

    Merci à vous deux.

    Je vais tester de ce pas ta proposition de code condensé sur une autre partie de mon code.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  4. #4
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Sacricri, ça marche pas ta solution, que j'ai appliquée à la lettre...
    Enfin ça marche pour $num, mais pas pour $data...
    Ca ne m'affiche que le premier ID...

    Il y a 215 abonnés à la publication Machin.
    Voici leurs ID :
    ID : 13


    En désespoir de cause, je mets mon 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
     
    function liste($publi){
     
    $sql = 'SELECT ID FROM options WHERE '.$publi.'="1"';  
     // on lance 
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
    // on range ds tableau
    $data = mysql_fetch_array($req);
    $num = mysql_num_rows($req);
     
     // on libère l'espace mémoire alloué pour cette interrogation de la base  
    mysql_free_result ($req);  
     
    //on exploite les 2 variables recuperees
     echo '<h4>Il y a '.$num.' abonnés à la publication '.$publi.'.<br/>
     Voici leurs ID :<br/></h4>';
    echo '<h4>ID : '.($data['ID']).'</h4>';
    mysql_close (); 
    }

    [edit : Je n'avais pas compris au premier abord en fait que sacricri me conseillait pour récupérer un seul enregistrement et plusieurs champs :

    de garder la commande "array"

    puis de récupérer les deux champs ainsi :

    echo $data['telephone'];
    echo $data['adresse'];
    ]
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  5. #5
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Et comme ça:
    Code php : 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
    function liste($publi){
     
    $sql = 'SELECT ID FROM options WHERE '.$publi.'="1"';  
     // on lance 
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
     
     
    $num = mysql_num_rows($req);
     
     // on libère l'espace mémoire alloué pour cette interrogation de la base  
    mysql_free_result ($req);  
     echo '<h4>Il y a '.$num.' abonnés à la publication '.$publi.'<br/> Voici leurs ID :<br/></h4>';
    while($data = mysql_fetch_array($req)){
    //on exploite les 2 variables recuperees
     
     
    echo '<h4>ID : '.($data['ID']).'</h4>';
    }
    //Il faut parcourir tout le résultat sachant qu'il y en a 213 on boucle ici 213 fois 
    //en affichant à chaque fois l'id
    mysql_close (); 
    }
    Par contre je ne connais pas le fonctionnemnt de mysql_free_result ($req); ... donc faut voir^^
    ►Ne pas oublier le

  6. #6
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut Merci Obito...
    Il y avait de ça...

    Le code qui marche :
    dans la page fonctions.php
    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
     
    function liste($publi){
     
    $sql = 'SELECT ID FROM options WHERE '.$publi.'="1"';  
     // on lance 
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
    //on scanne le data
    while($data = mysql_fetch_array($req)){
    //on affiche l'ID
     echo '<h4>ID : '.($data['ID']).'</h4>';
    }
    // on recup num
    $num = mysql_num_rows($req);
     // on libère l'espace mémoire alloué pour cette interrogation de la base  
    mysql_free_result ($req); 
    mysql_close (); 
    //on renvoie le num
    return $num;
    }
    dans la page 'd'appel'

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    				include('fonctions.php');
    				connectlocal();
    				$abo=liste('Machin');
    				echo '<h2>Il y a '.$abo.' abonnés à Machin.</h2>';
    				?>
    Ouf... Au moins maintenant je comprends précisément qui fait quoi et à quel moment dans le code.

    Dernière petite coquetterie, plus pour jouer et m'améliorer...

    Si moi je voulais d'abord mettre dans l'affichage de ma page

    Il y a tant d'abonnés à Machin.
    Voici leur ID.

    boum liste...



    Et bien je n'y parviens pas. La fonction nécessite la fin de la boucle pour afficher le $num. Bon ça c'est logique !
    Mais dans la récupération du return (mon nombre de boucles), je ne peux pas non plus l'afficher au début... C'est plus frustrant ça. Car l'opération est finie quand j'affiche.

    Je sais pas si je suis claire...

    Et je vous vois déjà songer "Pfiou, avec celle-là, on ne cochera jamais la case "résolu"...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  7. #7
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    Ben comme ça, ça marche pas?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    $sql = 'SELECT ID FROM options WHERE '.$publi.'="1"';  
     // on lance 
    $req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());  
    $num = mysql_num_rows($req);
    Pour le nombre de ligne y a pas besoin de parcourir toute la boucle, donc après la boucle fait un return $num...

    M'enfin je suis pas sur d'avoir bien compris la question^^
    ►Ne pas oublier le

  8. #8
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Wow, j'adore ce forum.

    Obito, tu as parfaitement répondu à ma question.

    En fait, je me mettais bêtement dans la tête que le $num était forcément associé à la boucle et non... Du coup, je peux traiter la totalité de ma fonction dans fonctions.php sans return... Coooooooool...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  9. #9
    Membre éprouvé Avatar de obito
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2008
    Messages
    773
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Janvier 2008
    Messages : 773
    Points : 948
    Points
    948
    Par défaut
    La question1 en ravanche j'ai pas très bien compris... Lorsqu'on clique sur modifier (si l'e-mail existe déjà) que voulez qu'il se passe?
    ►Ne pas oublier le

  10. #10
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut post à retirer
    J'ai finalement annulé la question 1 dont parle Obito ci-dessus... cette question n'ayant rien à voir.

    Si la modération a le temps, elle peut supprimer ce post et celui qui précède, puisque j'ai annulé la "question 1"...

    Merci !
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  11. #11
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Par ailleurs, je continue à bosser mon code...
    et le résultat de la requête 'mysql_fetch_array()' comme son nom l'indique, et même s'il est unique, ne peut être récupéré que dans un tableau.

    Merci d'avoir résolu mon problème !
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/04/2014, 18h12
  2. Requête HTTP pour récupérer des quotations.
    Par Pierre8r dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 18/01/2008, 16h41
  3. [MySQL] Requête pour récupérer les 5 derniers enregistrement dans l'ordre croissant
    Par Jonathan.b dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 07/01/2008, 09h50
  4. Réponses: 2
    Dernier message: 09/11/2006, 07h37
  5. Réponses: 11
    Dernier message: 13/07/2006, 16h15

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