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 :

Système de votes (pour les membres) : cmt le créer ?


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut Système de votes (pour les membres) : cmt le créer ?
    Bonjour,

    Sur mon site de rêves, j'ai actuellement des rêves, stockés et identifiés dans la bdd par un id.
    Je suis actuellement en train de coder une petite partie "membres", que j'aurai bientôt terminée je pense. Chaque membre est identifié par un id.

    J'ai dans l'idée d'ajouter un sytème de "vote" pour chaque rêve, permettant aux membres de voter pour les rêves qu'ils lisent. J'utilise le terme de "note" pour transformer mon idée dans des termes plus répendus en programmation, mais l'idée est plutôt de pouvoir mettre en avant les rêves les mieux rédigés, et pas de "noter" le rêve en lui-même...

    Je me demande donc comment réaliser ce système de votes, sachant que je pense laisser la possibilité aux membres d'attrbuer une "note" de 1à 10 pour chaque rêve.

    La création d'une nouvelle table, nommée par exemple "reves_ratings", me parait donc indispensable.
    Mais je ne sais pas sous quelle forme enregistrer mes données de vote par la suite.

    J'imaginais enregistrer les données sous cette forme :

    id_reve | id_votants | notes

    Où :

    - id_reve : id du rêve; il n'y aurait qu'une seule ligne pour tous les votes correspondant à un rêve donné.

    - id_votants : tous les id des membres ayant votés, séparés par un signe de ponctuation ou quelque chose du genre.

    - rates_nb : nombre de votes pour le rêve.

    - rates_total_value : total des valeurs des votes.


    Si je fais comme cela :
    - Est-ce que ce sera facile de repérer si le membre qui soumet une note n'a pas déjà voté pour ce rêve ?

    - Est-ce que ce sera facile de faire les moyennes et de faire une petite liste des rêves les mieux "notés" par exemple ?

    - Est-ce que c'est le meilleur système ^^ ??

    Je vous remercie pour toutes les aides et conseils que vous pourrez m'apporter.

  2. #2
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Ton système n'est pas trop génial car tu aurais une longue chaine de caractères juste pour un reve....ce serait plus simple, disons pour moi de faire la table mais avec l'id du reve, l'id du membre et la note ....

    Mais à chaque vote faire une nouvelle insertion uniquement si le membre n'a pas déjà voté....

    Et s'il y a plusieur fois le meme id du reve il n'y aura pas de bleme de récupération des informations et donc des moyennes


    Ce n'est que mon avis

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    avec un controle sur l'IP pour ne pas que le gars vote 8 fois de suite, en effacant l'eventuel cookie.

    (J'espère ne pas être hors sujet).
    C'est pas parce que j'ai tort que vous avez raison.

  4. #4
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je suis ok avec Kerod. Tu pourrais utiliser une table de ce type :
    vote (#id_reve, #id_membre)
    Si tu souhaites ajouter d'autres questionnaires par la suite, construis plutôt quelque chose de ce style :
    questionnaire (id, titre)
    reponse (id, #id_questionnaire, titre, valeur)
    vote (#id_reve, #id_membre, #id_reponse)
    Tu as deux FOREIGN KEYs en clé primaire, ce qui t'oblige à n'enregistrer qu'un vote par membre et par rêve.
    Je te suggère même d'utiliser REPLACE INTO plutôt qu'INSERT INTO lors du vote par un membre, ainsi son résultat est modifié au lieu d'être ajouté. Pratique, à moins que tu ne souhaites pas que les membres puissent changer d'avis.

    Pour récupérer le nombre de votes de chaque rêve, une simple requête fera l'affaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT r.id, r.nom, COUNT(*) AS votes
    FROM reve AS r
    INNER JOIN vote AS v
       ON r.id=v.id_reve
    GROUP BY r.id, r.nom;
    @ psychobob : Puisqu'on peut gérer la sécurité avec la clé primaire dans la BDD, il n'y a pas besoin de s'embêter davantage

  5. #5
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    avec un controle sur l'IP pour ne pas que le gars vote 8 fois de suite, en effacant l'eventuel cookie.

    les ip peuvent être dynamiques, et les cookies ça se perd facilement
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 221
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 221
    Points : 472
    Points
    472
    Par défaut
    @ psychobob : Puisqu'on peut gérer la sécurité avec la clé primaire dans la BDD, il n'y a pas besoin de s'embêter davantage
    C'est à dire, Kirkis ?
    C'est pas parce que j'ai tort que vous avez raison.

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Eh bien, puisque id_membre fait partie de la clé primaire avec id_reve, il ne peut pas y avoir de doublon dans cette table : un membre ne peut pas voter deux fois pour le même rêve car le SGBD ne le permet pas.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Merci pour vos premières réponses .
    D'après ce que je comprends, vous me conseillez donc de faire une table avec les champs suivants :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_reve | id_membre | note
    Pour un rêve, il y aurait donc autant de lignes enregistrées dans la table qu'il y a de membres qui ont voté pour ce rêve.
    Il n'y aurait donc pas de clé primaire/unique, si ?

    Avec cette structure, on gagne du temps au niveau de l'enregistrement (plus facile et rapide de repérer si le membre a déjà voté pour le rêve ou non).
    Mais est-ce tout autant efficace pour faire les moyennes :- ? Moyennes, qui sont logiquement appelées à être calculées dans le code plus régulièrement que l'enregistrement d'un nouveau vote (il y a plus de consultation des rêves que d'enregistrement de nouveaux votes). Je pose la question très innocemment, je ne m'y connais pas trop dans ces choses là...

    Kirkis > Je ne souhaite faire qu'un seul "questionnaire" à propos des rêves. Mais ta structuration en cas de questionnaires multiples est intéressante .
    Je ne souhaite pas non plus, pour le moment, que les membres puissent modifier leur vote pour un rêve.

    Citation Envoyé par psychoBob
    @ psychobob : Puisqu'on peut gérer la sécurité avec la clé primaire dans la BDD, il n'y a pas besoin de s'embêter davantage
    C'est à dire, Kirkis ?
    Seuls les membres pouront voter. Pas besoin d'un système d'ip/cookie, j'utilise l'id du membre, qui lui ne change jamais (sauf si le membre crée un nouveau compte, mais il n'aurait pas d'intérêt à le faire à priori). Mais la remarque aurait été très pertinente pour un système de vote "classique", ouvert à tous ;-)...

  9. #9
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Points : 20 778
    Points
    20 778
    Par défaut
    Pour les moyennes, il existe des fonctions d'agrégat comme pour SUM et MIN et etc...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Kerod
    Pour les moyennes, il existe des fonctions d'agrégat comme pour SUM et MIN et etc...
    Oki, merci .
    Je vais donc essayer de faire comme ça ! Merci pour votre aide et vos conseils, que j'essaierai d'appliquer aussi bien que je le peux .

  11. #11
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Citation Envoyé par yazerty
    Il n'y aurait donc pas de clé primaire/unique, si ?
    Oh, si !
    Ce que j'ai souligné dans ma proposition n'était pas pour faire joli, ça indiquait les champs de la clé primaire !

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    109
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 109
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Kirkis
    Citation Envoyé par yazerty
    Il n'y aurait donc pas de clé primaire/unique, si ?
    Oh, si !
    Ce que j'ai souligné dans ma proposition n'était pas pour faire joli, ça indiquait les champs de la clé primaire !
    Je ne comprends pas alors, parce que pour ta première proposition, tu soulignes les 2 champs de la table que tu proposes ?

    Dans ma structure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    id_reve | id_membre | note
    Je mettrais id_reve et id_membre en clé primaire ?

Discussions similaires

  1. [MySQL] Système de point pour les membres de mon site
    Par black-hat dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/05/2012, 17h48
  2. [Système] Alternative à PHP pour les uploads HTTP
    Par superjun dans le forum Langage
    Réponses: 2
    Dernier message: 08/07/2006, 00h29

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