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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de VIRGINIE87
    Femme Profil pro
    Sans Emploi
    Inscrit en
    Avril 2006
    Messages
    286
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Par défaut probléme jointure pour inscrire un joueur
    Coucou,
    Je suis en train de réaliser un formulaire d'inscription permettant d'inscrire un joueur à un tournoi en considérant que cela est possible seulement si le joueur a été crée au préalable.

    Pour cela j'ai 3 tables :
    joueur : Numlicence,Nom,Prenom,Joueur,Adresse,Classement
    tournoi : id,DateDebut,Lieu,NbRonde,NbMaxInscrit,TournoiClos
    inscription : idinscrit,Lieu,Joueur,idjoueur,Classement

    Dans la table joueur, j'ai la liste de tous les joueurs crées.
    Dans la table tournoi, jai la liste des tournois.
    Dans la table inscription, j'ai la liste des joueurs inscrits, en fait pour alimenter cette table j'utilise un formulaire d'inscription. Ce formulaire d'inscription contient deux listes déroulantes, une l'id et le Lieu du tournoi (dans la table tournoi) et l'autre liste déroulante contient le Nom et Prenom d'un joueur(dans la table joueur), la concaténation de ces deux champs devient le champs Joueur dans la table Inscription.
    Voila pour les explications.

    Ce que je souhaiterai réaliser est de pouvoir obtenir dans la table inscription le classement du joueur sélectionné.

    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
     
     
    <?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">
    <h3><p align="center">Inscription d'un joueur</p></h3>
     
     
    <form action="inscriptionjoueur.php" method="post">
        <table border="0" align="center" cellspacing="2" cellpadding="2">
            <tr>
                <td>Tournoi concerné :</td>
                 <td>
                    <select name="Lieu" >
                        <?php
                        $result = mysql_query("SELECT lieu FROM tournoi WHERE TournoiClos='non'");
                        while ($row = mysql_fetch_array($result))
                        {
                            echo '<option>'.$row["lieu"].' </option>';
                        }
                        ?>
                    </select>
                </td>
            </tr>
     
            <tr align="center">
                <td>Joueurs déjà crée :</td>
                <td>
                    <select name="Joueur" >
                        <?php
                        $result = mysql_query("SELECT nom,prenom FROM joueur ");
                        while ($row = mysql_fetch_array($result))
                        {
                            echo '<option>'.$row["nom"].' '.$row["prenom"].' </option>';
                        }
                        ?>
                    </select>
                </td>
            </tr>
     
            <tr align="center">
     
                <td colspan="2">
                    <input type=submit value="Inscription" name="submit" />
                </td>
            </tr>
        </table>
    </form>	
     
    <?php
    if(isset($_POST['Lieu'], $_POST['Joueur']))
    {
    	//récupération des valeurs des champs:
    	//nombre de joueur max inscrits :
    	$lieu = mysql_real_escape_string($_POST['Lieu']) ;
    	//numéro de téléphone:
    	$joueur = mysql_real_escape_string($_POST['Joueur']) ;
    	$sql = mysql_query("SELECT COUNT(*) FROM inscription WHERE Lieu = '$lieu' AND Joueur = '$joueur'");
    	$doublon = mysql_fetch_row($sql);
    	$doublon = $doublon[0];
    	// Cette entrée n'existe pas !
     
    	if(!$doublon)
    	{	
    		//création de la requête SQL:
    		$query= "INSERT INTO inscription VALUES ('', '$lieu', '$joueur','') " ;
    		if(mysql_query($query) or die (mysql_error()))
    		{
    			echo '
    			<p>
    				La nouvelle inscription a été enregistrée !
    			</p>';
    		}
    		else
    		{
    			echo '
    			<p>
    				Erreur dans la requête SQL !
    			</p>';
    		}
    	}
    	else
    	{
    		echo '
    		<p>
    			Cette inscription existe déjà !
    		</p>';
    	}
    }	 
    ?>
    </div> 
     </body>
    </html>
    j'ai testé la requete suivante sur la table inscription mais j'obtient que des valeurs 0 pour idjoueur et classement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT idinscrit,inscription.Lieu,joueur.Joueur,idjoueur,joueur.Classement
    FROM inscription
    LEFT JOIN joueur ON inscription.idjoueur = joueur.NumLicence
    WHERE inscription.Joueur=joueur.Joueur

  2. #2
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    J'aurais deux questions sur ta requête:

    Premièrement, pourquoi est ce que tu mets une clause where en plus de ta jointure et deuxièment, à quoi correspond le champ "joueur" qui sert dans ta clause where

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

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Par défaut
    si je ne met pas de where j'obtient des valeurs null et pour faciliter ce que je souhaite réaliser je pensais qu'il était utile d'avoir un champs commun.
    En fait j'étais en train de réfléchir à une autre solution totalement différente mais je ne sais pas du tout comment procéder.
    en fait je demande s'il ne serait pas mieux d'avoir la table inscription avec les champs NumLicence,id (id du tournoi) ,Classement , mais comment faire pour que lorsque je selectionne le tournoi et le joueur dans mon formulaire cela se traduit par NumLicence et id au lieu d'obtenir Joueur et Lieu.
    J"espere avoir été claire.

  4. #4
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    En fait, si on reprend un peu ton design, je crois que la table inscription aurait un peu avantage à être repensée de la façon suivante:

    inscription:idinscription,idtournoi,idjoueur

    Les autres champs étant disponibles dans les autres tables, tu peux aller les chercher en faisant des jointures dans ta requête et ça mêle plus les choses de les avoir avec l'inscription. Maintenant, si tu veux aller chercher le classement d'un joueur en particulier faisant parti d'un tournoi, tu peux faire un truc du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select idinscript, tournoi.lieu, joueur.nom, joueur.prenom, joueur.classement
    from inscription
    left join joueur on inscription.idjoueur = joueur.numlicense
    left join tournoi on inscription.idtournoi = tournoi.id
    where inscription.idjoueur = "numéro de license du joueur" AND
    inscription.idtournoi = "Id du tournoi à vérifier"
    En espérant que ceci te soit utile .

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

    Informations professionnelles :
    Activité : Sans Emploi

    Informations forums :
    Inscription : Avril 2006
    Messages : 286
    Par défaut
    je suis d'accord avec toi.
    Je vais reconstruire la table inscription de la façon suivante :
    idinscription, idtournoi,idjoueur

    Mais comment je dois procéder pour que les infos sélectionnées dans le formulaires soient récupérés dans la table inscription de maniére à ce que le lieu du tournoi soit traduit par idtournoi et nom et prenom soit traduit par idjoueur dans la table inscription.

  6. #6
    Membre expérimenté
    Inscrit en
    Mai 2010
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 177
    Par défaut
    Lorsque tu fais une liste en HTML, la valeur affichée est détachée de la valeur réelle de l'élément. Voici un exemple concret:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    <select name='liste'>
         <option value="1">Élément 1</option>
         <option value="2">Élément 2</option>
         <option value="3">Élément 3</option>
    </select
    Dans ce code, ce que l'utilisateur voit dans la liste est Élément 1, mais la valeur effectivement transmise est 1. Donc, quand tu construit ta liste, tu n'as qu'à mettre l'ID voulu dans la partie "value" et ce que tu veux afficher à la place de "Élément 1".

    Ceci se fait très bien en PHP, voici un exemple d'une liste que j'ai construite et qui fait apparaître le nom de l'employé et stocke son numéro comme valeur effective dans la liste.

    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
     
    <select name='demandeur' style="width:150px">
     
    <?php
     
    	$query = "SELECT * FROM tblcartetempspersonnes WHERE statut=1 ORDER BY NomPersonne ASC";
    	$result = mysql_query($query) or die("Couldn't execute query"); 
     
    //on fait afficher une ligne blanche en début de liste
    	echo "<option value='null'></option>" . "\n";
     
    	while($ligne = mysql_fetch_array($result))
    	{
    		echo "<option value='" . $ligne['NoPersonne'] . "'>" . $ligne['NomPersonne'] . "</option>" . "\n";
    	}
     
    ?>
     
    </select>
    Voilà pour ça, si tu as d'autre questions n'hésite pas .

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