Se connecter / S'enregistrer
Votre question

Créer les tables pour un concours par choix de critères

Tags :
  • Mot de passe
  • Programmation
Dernière réponse : dans Programmation
25 Août 2007 23:57:14

Bonsoir,

Je suis débutante et je suis en train d'essayer de mettre au point un petit concours où des gens peuvent s'inscrire (sans système de session ni mot de passe) et où des visiteurs non-inscrits peuvent choisir un ou plusieurs critères (par checkbox) parmi un certain nombre déjà définis (ici, il y en a quatre, tous les mêmes pour tous les inscrits) pour une seule nana et un seul gars chacun.

Plus de précisions :
Il y a l'inscrit, qui diffère selon si c'est une nana ou un gars. Le choix dans la table `concours_inscrits` est 'n' pour nana et 'g' pour gars via le champ `inscrit_sexe` qui a 'a' pour valeur par défaut et dont je valide ou non l'inscription avec le champ `inscrit_valid` qui a une valeur de '0' par défaut et qui prend '1' quand c'est validé.
Cet inscrit, a accès à sa fiche via la liste des inscrits nana ou la liste gars selon son sexe, les votants (non-inscrits) y ont accès aussi, pour pouvoir voter.
Sur cette fiche, il y a donc le pseudo de l'inscrit, son sexe en rappel, sa description, et un formulaire pour que le votant (le non-inscrit) puisse choisir les critères de l'inscrit.
Pour l'instant, l'inscription, la page de la liste des nanas ainsi que celle des gars et l'affichage des fiches individuelles avec formulaire sont au point.

J'aimerais savoir si mes tables sont bien structurées pour ce genre de projet :

  1. -- Structure de la table `concours_inscrits`
  2. --
  3.  
  4. CREATE TABLE `concours_inscrits` (
  5. `inscrit_id` int(11) NOT NULL auto_increment,
  6. `inscrit_ip` varchar(15) NOT NULL default '',
  7. `inscrit_pseudo` varchar(50) NOT NULL default '',
  8. `inscrit_description` text NOT NULL,
  9. `inscrit_email` varchar(250) NOT NULL default '',
  10. `inscrit_sexe` enum('a','n','g') NOT NULL default 'a',
  11. `inscrit_valid` bigint(1) default '0',
  12. PRIMARY KEY (`inscrit_id`),
  13. KEY `id` (`inscrit_id`)
  14. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=57 ;
  15.  
  16. --
  17. -- Contenu de la table `concours_inscrits`
  18. --
  19.  
  20. INSERT INTO `concours_inscrits` VALUES (3, '234.16.8.10', 'Truc', 'pouet', '', 'n', 1);
  21. INSERT INTO `concours_inscrits` VALUES (8, '227.38.32.25', 'Bidule', 'truc', '', 'g', 1);
  22. INSERT INTO `concours_inscrits` VALUES (10, '121.58.78.36', 'Machine', 'description', '', 'n', 1);
  23. INSERT INTO `concours_inscrits` VALUES (13, '223.30.75.13', 'Agaga', 'bidule', '', 'g', 1);
  24. INSERT INTO `concours_inscrits` VALUES (14, '245.42.57.17', 'Shoobeedoo', 'Petite description pour voir comment marche le script', '', 'n', 1);
  25. INSERT INTO `concours_inscrits` VALUES (15, '127.0.0.1', 'dudul', 'description de dudul', '', 'g', 1);
  26. INSERT INTO `concours_inscrits` VALUES (21, '127.0.0.1', 'Machin', 'youpla', '', 'g', 1);
  27. INSERT INTO `concours_inscrits` VALUES (22, '127.0.0.1', 'boubou', 'bouiboui', '', 'n', 1);
  28. INSERT INTO `concours_inscrits` VALUES (56, '127.0.0.1', 'Doudoudidon', ' Parlez un peu de vous..\r\nok', 'truc@mail.fr', 'n', 1);
  29.  
  30. -- --------------------------------------------------------
  31.  
  32. --
  33. -- Structure de la table `concours_criteres`
  34. --
  35.  
  36. CREATE TABLE `concours_criteres` (
  37. `critere_id` int(11) NOT NULL auto_increment,
  38. `critere_nom` varchar(50) NOT NULL default '',
  39. PRIMARY KEY (`critere_id`)
  40. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
  41.  
  42. --
  43. -- Contenu de la table `concours_criteres`
  44. --
  45.  
  46. INSERT INTO `concours_criteres` VALUES (1, 'Bon animateur');
  47. INSERT INTO `concours_criteres` VALUES (2, 'Assez à l''écoute');
  48. INSERT INTO `concours_criteres` VALUES (3, 'Répondant aux demandes d''aide');
  49. INSERT INTO `concours_criteres` VALUES (4, 'Toujours courtois');
  50.  
  51. -- --------------------------------------------------------
  52.  
  53. --
  54. -- Structure de la table `concours_votants`
  55. --
  56.  
  57. CREATE TABLE `concours_votants` (
  58. `votant_id` int(11) NOT NULL auto_increment,
  59. `votant_ip` varchar(15) NOT NULL default '',
  60. `votant_email` varchar(250) NOT NULL default '',
  61. PRIMARY KEY (`votant_id`),
  62. KEY `id` (`votant_id`)
  63. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
  64.  
  65. --
  66. -- Contenu de la table `concours_votants`
  67. --
  68.  
  69. INSERT INTO `concours_votants` VALUES (1, '129.38.82.50', 'pouet@mail.com');
  70. INSERT INTO `concours_votants` VALUES (4, '127.0.0.1', 'pouet2@mail.com');
  71. INSERT INTO `concours_votants` VALUES (5, '127.0.0.1', 'pouet3@mail.fr');
  72.  
  73. -- --------------------------------------------------------
  74.  
  75. --
  76. -- Structure de la table `concours_insc_crit_vot`
  77. --
  78.  
  79. CREATE TABLE `concours_insc_crit_vot` (
  80. `icv_crit_id` int(11) NOT NULL default '0',
  81. `icv_votant_id` int(11) NOT NULL default '0',
  82. `icv_inscrit_id` int(11) NOT NULL default '0',
  83. `icv_valeur` char(1) NOT NULL default '0',
  84. PRIMARY KEY (`icv_crit_id`)
  85. ) ENGINE=MyISAM DEFAULT CHARSET=latin1;


j'espère que je n'ai pas été trop floue.

Merci d'avance.

Autres pages sur : creer tables concours choix criteres

a c 232 L Programmation
26 Août 2007 12:23:53

Bonjour,

Je dirais que ça va moi, rien ne m'a choqué là dedans.
26 Août 2007 13:22:03

pareil tout a l'air bon. Par contre je comprend pas trop pourquoi tu met le champ "inscrit_valid" de la table `concours_inscrits` de type bigint. Surtout que ce champ ne va contenir qu'un booleen ( soit un 1 ou soit un zero.
Au pire, tu met en int(1), ca te prendra 4 octets par enregistrement, au lieu de 8 avec un bigint(1).
Ca parait pas grand chose mais quand tu as des centaine ou meme des milliers d'enregistrements ... ;) 
Contenus similaires
26 Août 2007 16:03:21

Bonjour,

Merci beaucoup pour vos réponses ainsi que pour ton conseil/info pour le type d'`inscrit_valid` Le22, je vais pouvoir essayer de continuer (je pense que je vais bloquer un peu pour le traitement des données du résultat en rapport avec la dernière table qui lie les trois premières).

Encore merci, à bientôt :jap: 
5 Septembre 2007 00:12:52

Bonsoir,

Cette fois, j'ai un problème avec la requête qui enregistre mes dernières données dans la dernière table :

  1. foreach ($_POST['critere_nom'] as $critere)
  2. {
  3. $values[] = '( NULL , "' .
  4. mysql_real_escape_string(htmlentities($_POST['votant_id'])) . '", "' .
  5. mysql_real_escape_string(htmlentities($_POST['inscrit_id'])) . '", "' .
  6. mysql_real_escape_string(htmlentities($critere)) .
  7. '")';
  8.  
  9. $req = "INSERT INTO concours_insc_crit_vot
  10. (icv_id, icv_votant_id, icv_inscrit_id, icv_valeur)
  11. VALUES " . implode( ',' , $values ) . ';';
  12. $result = mysql_query($req)
  13. or die ("erreur sql : Impossible de sauvegarder les données. ".mysql_error());
  14. }

Si par exemple je choisie les deux premiers critères dans mon formulaire,
la requête me rentre deux fois le premier critère et une fois le second dans le champ `icv_valeur`,
comme ceci :

Et si je choisie les trois premiers critères, ça m'enregistre les données de la façon suivante :

1, puis 1 et 2, puis 1, 2 et 3..
En fait, je ne devrais avoir que les trois dernières entrées pour bien faire..

Est-ce que quelqu'un pourrait m'aider à résoudre ce problème s'il vous plaît ?

Merci d'avance.
5 Septembre 2007 14:27:30

Bonjour,

Mon problème est résolu, on m'a conseillé ceci :
  1. foreach ($_POST['critere_nom'] as $key=>$critere){
  2. $values = '( NULL , "' .
  3. mysql_real_escape_string(htmlentities($_POST['votant_id'])) . '", "' .
  4. mysql_real_escape_string(htmlentities($_POST['inscrit_id'])) . '", "' .
  5. mysql_real_escape_string(htmlentities($critere)) .'")';
  6. $req = "INSERT INTO concours_insc_crit_vot
  7. (icv_id, icv_votant_id, icv_inscrit_id, icv_valeur)
  8. VALUES ".$values.';';
  9.  
  10. $result = mysql_query($req)
  11. or die ("erreur sql : Impossible de sauvegarder les données. ".mysql_error());
  12. }

Ça marche comme je voulais.

À bientôt.
5 Septembre 2007 14:36:37

c'est parce que avant tu utilisais $values[], ce qui veut dire ajouter une entrée au tableau values.
donc tu ajoutais d'abord {1} puis {1,2} et enfin {1,2,3}
5 Septembre 2007 15:09:36

Ah oui ok, je comprends encore mieux ce qui n'allait pas.
Merci pour tes explications :jap: 
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS