Bonjour à tous !
Malgrè mes nombreuses recherches sur plusieurs Forums, je n'ai pas trouvé de solutions.
Voici mon cas :
Je gère un petit club de football, le but étant de créér des statistiques pour chaque joueur.
(présence aux entrainements, temps de jeu, buts, passes, carton jaunes et carton rouges).
Après chaque entrainement ou match je souhaite, via une interface php/html, mettre à jour les données de la base (plus précisément de la "Table scl_stats_joueurs") pour chaque joueur en une seule fois.
I. PARTIE SQL :
Trois tables sont utilisées dans la gestion des statistiques: scl_membres, scl_saisons, scl_stats_joueurs.
Code SQL : 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 -- -- Structure de la table `scl_membres` -- DROP TABLE IF EXISTS `scl_membres`; CREATE TABLE IF NOT EXISTS `scl_membres` ( `id` int(5) NOT NULL AUTO_INCREMENT, `login` varchar(20) NOT NULL, `pass_md5` varchar(250) NOT NULL, `nom` varchar(50) NOT NULL, `prenom` varchar(50) NOT NULL, `surnom` varchar(50) NOT NULL, `date_naissance` date NOT NULL, `num_licence` int(10) NOT NULL, `id_joueurs` smallint(5) NOT NULL, `adresse1` varchar(50) NOT NULL, `adresse2` varchar(50) NOT NULL, `cp` mediumint(5) NOT NULL, `ville` varchar(100) NOT NULL, `mail` varchar(100) NOT NULL, `tel_p` varchar(14) NOT NULL, `tel_f` varchar(14) NOT NULL, `ip` varchar(15) NOT NULL, `lastquerytime` bigint(20) NOT NULL, `admin` enum('0','1','2','3') NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=20 ; -- -- Structure de la table `scl_saisons` -- DROP TABLE IF EXISTS `scl_saisons`; CREATE TABLE IF NOT EXISTS `scl_saisons` ( `id` int(5) NOT NULL AUTO_INCREMENT, `annee` varchar(4) NOT NULL, `total_tps_jeu` int(4) NOT NULL DEFAULT '0', `total_nbr_entrainements` int(2) NOT NULL DEFAULT '0', `total_nbr_matchs` int(2) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=4 ; -- -- Structure de la table `scl_stats_joueurs` -- DROP TABLE IF EXISTS `scl_stats_joueurs`; CREATE TABLE IF NOT EXISTS `scl_stats_joueurs` ( `idscl_membres` int(5) NOT NULL, `idscl_saisons` int(2) NOT NULL, `tps_jeu` int(4) NOT NULL DEFAULT '0', `nbr_entrainements` int(2) NOT NULL DEFAULT '0', `buts_marques` int(2) NOT NULL DEFAULT '0', `passes_decisives` int(2) NOT NULL DEFAULT '0', `cartons_jaunes` int(2) NOT NULL DEFAULT '0', `cartons_rouges` int(2) NOT NULL DEFAULT '0', PRIMARY KEY (`idscl_membres`,`idscl_saisons`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
II. PARTIE PHP/HTML:
A. REQUETES SQL:
1. Je récupère les informations concernant la saison en cours (logiquement la dernière crééé).
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 <?php // RECUPERATION INFOS DERNIERE SAISON CREEE $derniere_saison = mysql_query("SELECT id, annee FROM scl_saisons ORDER BY id DESC LIMIT 0,1 ") or die(mysql_error()); $affiche_saison = mysql_fetch_array($derniere_saison); $id_saison_en_cours = $affiche_saison['id']; $annee_saison_en_cours = $affiche_saison['annee']; ?>
2. Je récupère dans la "Table scl_membres" les informations concernant les membres qui sont "joueurs dans l'équipe" qui ont donc un numéro de licence.
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 <?php // RECUPERER NOMS PRENOMS & STATS JOUEURS => ID $stats_licencies = mysql_query("SELECT id, nom, prenom, num_licence, idscl_membres, idscl_saisons, nbr_entrainements, tps_jeu, buts_marques, passes_decisives, cartons_jaunes, cartons_rouges FROM scl_membres LEFT JOIN scl_stats_joueurs ON scl_membres.id = scl_stats_joueurs.idscl_membres WHERE scl_membres.num_licence != '0' AND scl_stats_joueurs.idscl_saisons = $id_saison_en_cours ORDER BY id") or die(mysql_error()); ?>
3. Je compte le nombre de membres qui sont licenciés.
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 <?php // COMPTE DU NOMBRE D'ID DE JOUEURS LICENCIES $count_joueurs = mysql_num_rows($stats_licencies); ?>
B. FORMULAIRE HTML + INFOS PHP
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
23
24
25
26
27
28
29
30
31
32
33
34
35 <form action="#ok" method="post"> <table width="80%" border="0"> <?php // BOUCLE DE DECLARATION DE VARIABLES while ($affiche_stats = mysql_fetch_array($stats_licencies)) { ?> <tr> <td width="5%" align="center"><?php $id_x[]=$affiche_stats['id']; ?><?php echo $affiche_stats['id']; ?></td> <td width="35%" align="right"><?php echo $affiche_stats['nom']; ?> <?php echo $affiche_stats['prenom']; ?></td> <td width="10%" align="center"><input name="nbr_entrainements[]" type="text" id="nbr_entrainements" value="<?php echo $affiche_stats['nbr_entrainements']; ?>" size="10"></td> <td width="10%" align="center"><input name="tps_jeu[]" type="text" id="tps_jeu" value="<?php echo $affiche_stats['tps_jeu']; ?>" size="10"></td> <td width="10%" align="center"><input name="buts_marques[]" type="text" id="buts_marques" value="<?php echo $affiche_stats['buts_marques']; ?>" size="5"></td> <td width="10%" align="center"><input name="passes_decisives[]" type="text" id="passes_decisives" value="<?php echo $affiche_stats['passes_decisives']; ?>" size="5"></td> <td width="10%" align="center"><input name="cartons_jaunes[]" type="text" id="cartons_jaunes" value="<?php echo $affiche_stats['cartons_jaunes']; ?>" size="5"></td> <td width="10%" align="center"><input name="cartons_rouges[]" type="text" id="cartons_rouges" value="<?php echo $affiche_stats['cartons_rouges']; ?>" size="5"></td> </tr> <?php } ?> </table> <input type="submit" name="Submit" value="METTRE A JOUR LES STATS"> </form>
C. TRAITEMENT DU FORMULAIRE EN PHP:
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
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 <?php // BOUTON SUBMIT ACTIVE if(isset($_POST["Submit"])) { for($x=0;$x<$count_joueurs;$x++) { $result_stats = mysql_query("UPDATE scl_stats_joueurs SET tps_jeu = '$tps_jeu[$x]', nbr_entrainements = '$nbr_entrainements[$x]', buts_marques = '$buts_marques[$x]', passes_decisives = '$passes_decisives[$x]', cartons_jaunes = '$cartons_jaunes[$x]', cartons_rouges = '$cartons_rouges[$x]' WHERE idscl_membres = '$id_x[$x]' AND idscl_saisons = '$id_saison_en_cours'"); } //SI ERREUR => ALERTE if (!$result_stats) { die('Requête invalide : ' . mysql_error()); } //SINON MESSAGE SUCCES else { echo '<div class="reussite">Table scl_stats_joueurs mise à jour avec succès!</div>'; } //FERMETURE if(isset($_POST["Submit"])) } ?>
PROBLEME :
l'erreur suivante apparait : Requête invalide : Duplicate entry 'x-x' for key 'PRIMARY'.
Pour quelle(s) raison(s) la mise à jour ne s'effectue pas ? Et me renvoie cette erreur.
Je pense que le problème vient soit :
- de la "Table scl_stats_joueurs" et du fait que sa clé primaire rassemble 2 clés étrangères;
- de la requête SQL de mise à jour.
Merci d'avance aux personnes qui jetterons un oeil sur ce cas.
PS: Vous l'aurez compris je ne suis pas développeur de métier, je me suis formé ci et là et je dois avoir pas mal de lacunes notamment coté SGDB.
Partager