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 :

probléme jointure pour inscrire un joueur


Sujet :

PHP & Base de données

  1. #21
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    j'ai crée un fichier classementjoueur.php qui contient un formulaire qui a une liste déroulante contenant les tournois clos quand je clique sur le bouton rechercher alors la liste des joueurs inscrit à ce tournois apparait. Je dois visualiser le nom,prenom et classement en sachant que le tri du classement doit etre décroissant.

    voila ce que j'ai commencé à faire :
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
     
     
    <?php 
    include "entete.html";
    include "menuadmin.html";
     
    $serveur='localhost';
    $user='root';
    $motdepasse=''; 
    $bdd='gestiontournoi';
    $connect= mysql_connect($serveur,$user,$motdepasse) or die ("Impossible de se connecter: "); 
    mysql_select_db($bdd);    
    ?>
     
     
    <div id="corps">
     
      <form action="classementjoueur.php" method="post">
          <label for="search">Rechercher :</label>
    <select name="search" >
    <?php
     
    $result = mysql_query("SELECT id,lieu FROM tournoi WHERE TournoiClos='oui'");
    while ($row = mysql_fetch_array($result))
    {
    echo '<option value="'.$row["lieu"].'">'.$row["lieu"].' </option>';
    }
    ?>
    </select>      
    <input type="submit" value="Rechercher" />
    </form>
     
    <?php
    $search = (isset($_POST['search'])) ? $_POST['search'] : '';
    if($search!="")
     
    {
    //$req = mysql_query("SELECT * FROM tournoi WHERE `lieu` LIKE '%$search%' ");
    $req= mysql_query("SELECT Nom, Prenom, Classement from Joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by Classement DESC,Nom, Prenom");
     
    while ($row2 = mysql_fetch_array($req))
    {
     
    ?>
     
     <table><tr>
     
    <th>Nom</th>
    <th>Prenom</th>
    <th>Classement</th>
    </tr>
     
    <tr>
     
    <td><?php echo $row2['Nom'];?></td>
     
    <td><?php echo $row2['Prenom'];?></td>
     
    <td><?php echo $row2['Classement'];?></td>
     
     
    </tr>
    </table> 
    <?php
     
     
    }
    }
    ?>
     
    <br/>
    </div> 
     </body>
    </html>
    voila l'erreur :

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in H:\Wamp\wamp\wamp\www\Projet\classementjoueur.php on line 44

  2. #22
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    Je crois que le problème viens de la boucle qui crée ton tableau. Il est toujours préférable de garder les structures de contrôle comme les IF et les WHILE dans la même paire de balises <?php ?> autrement, on peut des fois se retrouver avec des choses assez bizarre, sans compter que c'est beaucoup plus dur à lire. Essaye comme ça pour voir si l'erreur se reproduit:

    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
     
    <table>
    <tr> 
    <th>Nom</th>
    <th>Prenom</th>
    <th>Classement</th>
    </tr>
     
    <?php
    $search = (isset($_POST['search'])) ? $_POST['search'] : '';
    if($search!="")
     
    {
    //$req = mysql_query("SELECT * FROM tournoi WHERE `lieu` LIKE '%$search%' ");
     
    $req= mysql_query("SELECT Nom, Prenom, Classement from Joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by Classement DESC,Nom, Prenom");
     
    while ($row2 = mysql_fetch_array($req))
    {
         echo "<tr>\n";
         echo "<td>" . $row2['Nom'] . "</td>\n";
         echo "<td>" . $row2['Prenom'] . "</td>\n";
         echo "<td>" . $row2['Classement'] . "</td>\n";
         echo "</tr>\n";
    }
    }
    ?>
     
    </table>
    Si l'erreur se reproduit et bien tu sais où trouver de l'aide . Et juste pour clarification, les "\n" que j'ai mis ne servent qu'à effectuer un changement de ligne au niveau du code lui-même, si tu décides de faire afficher la source de la page, tu n'auras pas un paquet de HTML sur la même ligne .

    Bonne chance.

  3. #23
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    voici l'ensemble du 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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    <?php 
    include "entete.html";
    include "menuadmin.html";
     
    $serveur='localhost';
    $user='root';
    $motdepasse=''; 
    $bdd='gestiontournoi';
    $connect= mysql_connect($serveur,$user,$motdepasse) or die ("Impossible de se connecter: "); 
    mysql_select_db($bdd);    
    ?>
     
     
    <div id="corps">
     
      <form action="classementjoueur.php" method="post">
          <label for="search">Rechercher :</label>
    <select name="search" >
    <?php
     
    $result = mysql_query("SELECT id,lieu FROM tournoi WHERE TournoiClos='oui'");
    while ($row = mysql_fetch_array($result))
    {
    echo '<option value="'.$row["lieu"].'">'.$row["lieu"].' </option>';
    }
    ?>
    </select>      
    <input type="submit" value="Rechercher" />
    </form>
     
     
     
    <?php
    $search = (isset($_POST['search'])) ? $_POST['search'] : '';
    if($search!="")
     
    {
    //$req = mysql_query("SELECT * FROM tournoi WHERE `lieu` LIKE '%$search%' ");
     
    $req= mysql_query("SELECT Nom, Prenom, Classement from Joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by Classement DESC,Nom, Prenom");
     
    while ($row2 = mysql_fetch_array($req))
    {
         echo "<tr>\n";
         echo "<td>" . $row2['Nom'] . "</td>\n";
         echo "<td>" . $row2['Prenom'] . "</td>\n";
         echo "<td>" . $row2['Classement'] . "</td>\n";
         echo "</tr>\n";
    }
    }
    ?>
     
    </table>
     
     
    <br/>
    </div> 
     </body>
    </html>
    et voici l'erreur :
    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in H:\Wamp\wamp\wamp\www\Projet\classementjoueur.php on line 47

  4. #24
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Cela signifie que ta requête a une erreur.
    Affiche mysql_error() pour voir cette erreur et/ou teste la requête dans phpmyadmin.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #25
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    j'ai modifié ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $req= mysql_query("SELECT Nom, Prenom, Classement from joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by Classement DESC,Nom, Prenom")  or die(mysql_error());
    et voila l'erreur :
    Column 'Classement' in field list is ambiguous

  6. #26
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Le colonne Classement existe dans les deux tables, il faut préciser laquelle tu veux.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #27
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    en fait je me pose la question s'il est utile d'avoir un champ classement dans la table inscription alors que le meme champs est présent dans la table joueur avec le meme contenu.
    l'objectif c'est de classer les joueurs de la table inscription en fonction de leur classement pour un tournoi donné.

  8. #28
    Membre actif
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Points : 210
    Points
    210
    Par défaut
    En fait, avec la requête telle qu'elle est, tu n'as pas besoin d'avoir le champ classement dans la table inscription puisque tu fais une jointure sur la table du joueur... et si tu te souviens, la question que tu te poses actuellement est la même que je t'avais posé un peu plus tôt, ce qui prouve que tu commences à comprendre .

    Et je me permet de dire que j'aurais dû être un peu plus précis dans ma requête en précisant que le champ classement que je demandais était situé dans la table joueur et non dans la table inscription. Voici exactement ce que j'avais en tête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    $req= mysql_query("SELECT Nom, Prenom, joueur.Classement from joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by joueur.Classement DESC,Nom, Prenom")  or die(mysql_error());
    Avec ça normalement tu n'as plus du tout besoin de dupliquer le champ classement dans la table inscription puisque tu fais la liaison avec le joueur grâce à ta jointure. Donc voilà pour mon dernier conseil de la journée .

  9. #29
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Citation Envoyé par VIRGINIE87
    en fait je me pose la question s'il est utile d'avoir un champ classement dans la table inscription alors que le meme champs est présent dans la table joueur avec le meme contenu.
    Théoriquement il ne faut, je dirais même, surtout pas.
    Ceci c'est de la redondance, et si on regarde bien, ça apporte que des ennuis.
    D'une part, même si ça représente peu, c'est du poids en trop (des octets), mais en plus, si on fait une modif d'un coté, il faudra l'appliquer impérativement de l'autre, et inversement.
    Puis si par malheur ces 2 données ne sont pas cohérentes (identiques), c'est source de bug dans son programme.

    La redondance est toute fois utile, elle peut être même obligatoire, mais ça reste rare, c'est dans des cadres bien particuliers.
    La plupart du temps il faut l'éviter.
    Faut voir.


    Après, je ne connais pas bien ton domaine, je vais peut être dire une bêtise.
    Mais cette table joueurs et inscription, sont elles réellement nécessaires ?
    Ne faudrait il pas les fusionner pour en faire qu'une ?
    Car finalement, l'inscription d'un joueur concerne qu'1 seul et unique joueur non ?
    En faite, dans ton fonctionnement, est il possible d'enregistrer un joueur non inscrit ?
    Ou encore, est ce qu'un joueur peu avoir plusieurs inscriptions ?
    Ou même, est ce que plusieurs joueurs peuvent appartenir à une même inscription ? (là, ça me parais impossible).
    En faite, faut voir la relation qu'il y a entre ces 2 tables.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT ... etc ... NumLicence = Joueur ... etc ...
    Je réagit un petit peu sur cette jointure qui se fait sur NumLicence et Joueur.
    Bon, c'est un avis purement personnel car chacun à sa manière de faire.
    Ces 2 données sont inévitablement les mêmes, c'est grâce à cela que la jointure se fera.
    Pourquoi alors les avoir nommées différemment ?
    N'est il pas mieux que 2 données contenant exactement la même chose (clé primaire d'un coté, clé étrangère de l'autre) portent le même nom ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  10. #30
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    j'ai appliqué ta requete osuwariboy et lorsque je clique sur le bouton Rechercher aucune liste apparait en plus je n'ai aucun message d'erreur.
    Je viens de supprimer le champs Classement que j'avais crée dans la table inscription( désormais j'ai 3 champs : idinscrit,Lieu,Joueur).
    voila 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
     
    <?php 
    include "entete.html";
    include "menuadmin.html";
     
    $serveur='localhost';
    $user='root';
    $motdepasse=''; 
    $bdd='gestiontournoi';
    $connect= mysql_connect($serveur,$user,$motdepasse) or die ("Impossible de se connecter: "); 
    mysql_select_db($bdd);    
    ?>
     
     
    <div id="corps">
     
      <form action="classementjoueur.php" method="post">
          <label for="search">Rechercher :</label>
    <select name="search" >
    <?php
     
    $result = mysql_query("SELECT id,lieu FROM tournoi WHERE TournoiClos='oui'");
    while ($row = mysql_fetch_array($result))
    {
    echo '<option value="'.$row["lieu"].'">'.$row["lieu"].' </option>';
    }
    ?>
    </select>      
    <input type="submit" value="Rechercher" />
    </form>
     
     
     
    <?php
    $search = (isset($_POST['search'])) ? $_POST['search'] : '';
    if($search!="")
     
    {
    //$req = mysql_query("SELECT * FROM tournoi WHERE `lieu` LIKE '%$search%' ");
     $req= mysql_query("SELECT Nom, Prenom, joueur.Classement from joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by joueur.Classement DESC,Nom, Prenom")  or die(mysql_error());
     
     
    while ($row2 = mysql_fetch_array($req))
    {
         echo "<tr>\n";
         echo "<td>" . $row2['Nom'] . "</td>\n";
         echo "<td>" . $row2['Prenom'] . "</td>\n";
         echo "<td>" . $row2['Classement'] . "</td>\n";
         echo "</tr>\n";
    }
    }
    ?>
     
    </table>
     
     
    <br/>
    </div> 
     </body>
    </html>
    Pour répondre à RunCodePhp, les tables joueur et inscription sont toutes deux utiles car pour inscrire un joueur il faut que celui soit impérativement crée, si le joueur est présent dans la table joueur alors on peut l'inscrire à un ou plusieurs tournois mais il faut que le tournois ne soit pas clos.
    Concernant la jointure, j'ai nommé les deux champs différement mais ce n'est pas volontaire, j'ai essayé de renommer Joueur en NumLicence mais dans mon code j'avais des erreurs que je ne suis pas parvenu à rectifier c'est pour cela que cela est resté ainsi.

  11. #31
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Pour répondre à RunCodePhp, les tables joueur et inscription sont toutes deux utiles car pour inscrire un joueur il faut que celui soit impérativement crée, si le joueur est présent dans la table joueur alors on peut l'inscrire à un ou plusieurs tournois mais il faut que le tournois ne soit pas clos.
    Ok, très bien dans ce cas là.
    Pense y tout de même sur cette donnée "classement", car si c'est la même, quelle doit contenir la même chose, alors il n'est pas souhaitable de l'avoir 2 fois.
    Une seule fois suffit, les jointures de tables sont faites justement pour ça.

    Concernant la jointure, j'ai nommé les deux champs différement mais ce n'est pas volontaire, j'ai essayé de renommer Joueur en NumLicence mais dans mon code j'avais des erreurs que je ne suis pas parvenu à rectifier c'est pour cela que cela est resté ainsi.
    Il faut soit désigner à quelle table appartient tel champ, soit plus simple, utiliser des alias.

    Exemple, en désignant la table (manière longue)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT licence.NumLicence, joueur.NumLicence FROM licence, joueurs
    En plus simple, avec des alias :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT l.NumLicence, j.NumLicence FROM licene l, joueurs j
    Ceci ce fait couramment.
    Pour ma part, je le fais systématiquement, car finalement, un seul coup d'oeil à la requête suffit de savoir à quelle table appartient tel champ.
    Disons qu'avec le temps on oubli, et ceci évite d'aller voir sa structure de table pour le savoir.

    D'ailleurs, et concernant ce champ "lieu", c'est sensiblement la même chose (de la redondance).
    Il peut être intéressant d'avoir une table "lieu" regroupant tous les lieux, et mettre des Identifiants dans les tables réclamant ces lieux.
    Ensuite, plus besoin de LIKE %lieu%, mais une jointure sur cette table lieu avec comme condition : id_lieu = un_id.
    Ca laisse moins de place au hasard, de plus, c'est plus sécurisant, car un ID est un nombre, et doit l'être.
    Enfin, c'est une idée.


    Il faudrait voir ce que contient la chaine de requête, sait on jamais si ça ne contient ce qui est attendu.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $sql = "SELECT Nom, Prenom, joueur.Classement from joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by joueur.Classement DESC,Nom, Prenom";
    // On affiche la requête
    echo $sql.'<br />';
     
    $req = mysql_query($sql)  or die(mysql_error());
    D'ailleurs, est ce que la valeur de $search qui elle est obtenue du menu déroulant qui lui même est généré par la table "tournois" sont la même que celle de la table "inscription" ?
    Exemple :
    Dans la table tournois : Paris
    Dans la table inscription : Parris (un r de trop).
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  12. #32
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    voila ce qui s'affiche :
    SELECT Nom, Prenom, joueur.Classement from joueur left join inscription on NumLicence = Joueur WHERE `Lieu` LIKE '%mezieres%' order by joueur.Classement DESC,Nom, Prenom

    D'ailleurs, est ce que la valeur de $search qui elle est obtenue du menu déroulant qui lui même est généré par la table "tournois" sont la même que celle de la table "inscription" ?
    Exemple :
    Dans la table tournois : Paris
    Dans la table inscription : Parris (un r de trop).
    dans la table inscription j'ai l'id qui correpond à ce que j'ai sélectionné donc la valeur de $search est la même.

  13. #33
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    voila ce qui s'affiche :
    Cette requête me parait syntaxiquement correcte.

    L'as tu copier et exécuté dans PhpMyAdmin ? Obtiens tu des résultats, ceux attendus ?
    As tu vérifier visuellement par rapport à ce qu'il y a dans ta Bdd, est tu certain qu'il y a des enregistrements correspondant à "mezieres" dans cette table inscription ?
    Est ce que les N° de licences sont réellement concordant (inscription/joueur) ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  14. #34
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    je viens de vérifier dans phpmyadmin est cela m'affiche le nom,prenom et classement en sachant que pour le test j'ai supprimer la ligne avec le WHERE.
    Dans ma table inscription j'ai 3 enregistrements ayant la valeur "mezieres"

  15. #35
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    je viens de vérifier dans phpmyadmin est cela m'affiche le nom,prenom et classement en sachant que pour le test j'ai supprimer la ligne avec le WHERE.
    Arfff, mais non, mais oui

    Supprimer le WHERE pour faire l'essai dans PhpMyAdmin, ok, mais il faut d'abord exécuter exactement la même requête, sinon ça fausse la donne, ça débouche sur une mauvaise conclusion.

    Donc qu'est ce que cette requête retourne en exécutant exactement la même (copier/coller quoi) ?
    Selon le résultat obtenu, est ce que ça te parais normal ?
    Si ça parait anormal, alors il n'y a pas d'autre choix que d'analyser le contenu de la Bdd, détecter ou est l'incohérence.
    A condition bien sûr que c'est très exactement cette requête que l'on veut exécuter,et les résultats qui doivent aller avec.

    Dans ma table inscription j'ai 3 enregistrements ayant la valeur "mezieres"
    Mais est ce que les N° de licence sont concordants pour ce "mezieres" ?
    D'ailleurs, est ce que tu souhaites qu'ils concordent ? Faut il qu'ils y est des joueurs (table joueurs) ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  16. #36
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    quand je test exactement cette requete dans phpmyadmin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Nom, Prenom, joueur.Classement from joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by joueur.Classement DESC,Nom, Prenom
    j'obtient :
    MySQL n'a retourné aucun enregistrement. ( Traitement en 0.0007 sec. )
    je pense que cela est tout à fait normal vu que l'on fait aucune sélection
    Est tu d'accord avec mon raisonnement ?

    En fait je viens de tester avec des valeurs et cela ne me retourne aucun résultat donc pas étonnant que rien ne s'affiche lors de ma sélection.

  17. #37
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    quand je test exactement cette requete dans phpmyadmin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Nom, Prenom, joueur.Classement from joueur
     left join inscription on NumLicence = Joueur
      WHERE `Lieu` LIKE '%$search%'
    order by joueur.Classement DESC,Nom, Prenom
    Mais non


    C'est celle ci qu'il faut exécutée dans PhpMyAdmin, la chaine générée par Php :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT Nom, Prenom, joueur.Classement
    from joueur left join inscription on NumLicence = Joueur
    WHERE `Lieu` LIKE '%mezieres%'
    order by joueur.Classement DESC,Nom, Prenom
    C'est ce résultat final qui sera exécuter coté MySQL, car MySQL ne sait c'est pas ce que c'est $search, MySQL ne comprend rien en Php, on est d'accord ?
    Pour PhpMyAdmin, c'est pareil.

    Pourquoi crois tu que je t'ai demandé de faire un echo sur $sql, hein ?
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  18. #38
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    donc si ma requete ne me retourne rien avec les différentes valeurs de Lieu( j'ai vérifier que ces valeurs sont bien présentes dans la table inscription ) donc ya un gros soucis dans ma requete

  19. #39
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    donc si ma requete ne me retourne rien avec les différentes valeurs de Lieu( j'ai vérifier que ces valeurs sont bien présentes dans la table inscription ) donc ya un gros soucis dans ma requete
    Tu n'est pas assez précis dans tes réponses, pourtant, c'est nécessaire pour bien comprendre, c'est le but de mes questions.

    Déjà, il faudrait savoir très exactement ce que tu veux obtenir.
    Tu dois pouvoir exprimer ce que la requête doit faire, doit retourner comme résultat.

    Si on se tient à cette requête, elle demande que chaque ligne dans la table "inscription" qui contient "mezieres", qu'il y ait une ligne dans la table "joueur" dont le N° de licence correspond.
    S'il n'y a pas de ligne coté table joueur correspondante, elle sera ignorée.
    C'est à mon avis ce qu'il se passe.
    Faut donc voir si c'est normal ou pas.
    Ca peut être la requête qui ne va pas. Ici, ne pas faire de jointure avec la table joueur.
    Mais ça peu être aussi un problème au niveau des données : il en manquerait coté table joueur.
    Mais encore, ça peut être un souci de conception par rapport au besoin (mais là, pure hypothèse, sans fondement).
    Enfin, sauf erreur.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  20. #40
    Débutant Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Points : 72
    Points
    72
    Par défaut
    Déjà, il faudrait savoir très exactement ce que tu veux obtenir.
    Tu dois pourvoir exprimer ce que la requête doit faire, doit retourner comme résultat.
    dans mon formulaire je sélectionne le tournoi qui est clos en cliquant sur le bouton rechercher je souhaite que la requete me permette d'afficher le nom prenom et le classement des joueurs qui sont inscrit pour un tournois donné.

    Si on se tient à cette requête, elle demande que chaque ligne dans la table "inscription" qui contient "mezieres", qu'il y ait une ligne dans la table "joueur" dont le N° de licence correspond.
    S'il n'y a pas de ligne coté table joueur correspondante, elle sera ignorée.
    C'est à mon avis ce qu'il se passe.
    Faut donc voir si c'est normal ou pas.
    Ca peut être la requête qui ne va pas. Ici, ne pas faire de jointure avec la table joueur.
    Mais ça peu être aussi un problème au niveau des données : il en manquerait coté table joueur.
    si je reprend l'exemple de la valeur "mezieres" dans la table inscription j'ai deux Joueur qui correspondent valeur 5 et 14 et quand je regarde dans la table joueur NumLicence=5 et NumLicence=14 existe. J'ai testé pour d'autre valeur de tournoi et c'est le meme constat.
    Donc n'est ce pas un soucis de requete.

Discussions similaires

  1. [MySQL] Problème de jointure pour une requête
    Par HAbroc dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 31/08/2014, 13h05
  2. problème de jointure pour archivage
    Par doudou8mc dans le forum Développement
    Réponses: 1
    Dernier message: 07/10/2009, 14h57
  3. Problème pour inscrire une dll
    Par aloisio11 dans le forum Windows
    Réponses: 0
    Dernier message: 22/04/2008, 09h30
  4. [MySQL] Problème avec les jointure pour un menu
    Par Glocman dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 31/07/2006, 17h44
  5. Problème de jointure pour affichage "speciale"
    Par webjeux dans le forum Requêtes
    Réponses: 3
    Dernier message: 22/06/2006, 12h23

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