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 vote [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Par défaut système de vote
    Bonjour à tous,

    Voilà, j'ai fait un système de vote avec restriction dans le temps (un vote toute les 2H), mais le souci est que quand un membre vote, ça bloque tout les autres. Dans la BDD, ça ne veut pas faire la différence entre le guid d'un membre par rapport à un autre.
    J'ai essayé plein de "bidouille" mais rien ne veut y faire, avez-vous une solution à me proposer svp.?
    je vous transmet le code.
    Merci d'avance de vos réponses.

    Cordialement
    Vazer7070

    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
    // recupération de la ligne de vote de l'utilisateur
            $sql = $db1->prepare("SELECT time FROM votes WHERE ip=?");
            $retour = $sql->execute([$_SESSION['id']]);
            if ($retour) { // la requête s'est bien passée
                $data = $sql->fetch(PDO::FETCH_ASSOC); // ligne sous forme de tableau associatif
     
                $now = time();
                // le temps enregistré est il supérieur à maintenant ?
                if($data['time'] > $now) { // oui il est supérieur le vote n'est pas possible
                    // temps restant à attendre avant le prochain vote
                    $time_calc = ceil(((int) $data['time'] - $now) / 60);
     
                    echo "<fieldset class=\"erreur\"><p class=\"red\">Vous devez attendre " . $time_calc . " minutes avant de pouvoir revoter !</p></fieldset>\n";
     
                } else { // non le temps enregistré est inférieur à maintenant, l'utilisateur peut revoter
     
                    //
     
     
                    // ici traitement du nouveau vote
                    // ...
     
                }
     
     
     
            } else {
     
                // traitement de l'erreur de la requête
                // ...
            }
    		 $time_vote = 7200;
             $time_db = time() + $time_vote;
     $sql = "INSERT INTO votes (ip,time) VALUES ('".$_SERVER['REMOTE_ADDR']."', '".$time_db."')";
    		 $sql = $db1->prepare($sql);
    		 $sql->execute();
    		 $sql = "INSERT INTO votes (ip,time) VALUES ('".$_SESSION['id']."', '".$time_db."')";
    		 $sql = $db1->prepare($sql);
    		 $sql->execute();
    		$a = get_info($_SESSION['id'],'point');
    		$b = get_info($_SESSION['id'],'pts_vote');
    		$point1 = $vote + $a;
    		  $point2 = 1 + $b;
    		 $sql = "UPDATE accounts SET point=$point1 WHERE guid='".$_SESSION['id']."'";
    			$sql = $db2->prepare($sql);
    			$sql->execute();
     
    			$sql = "UPDATE accounts SET pts_vote=$point2 WHERE guid='".$_SESSION['id']."'";
    			$sql = $db2->prepare($sql);
    			$sql->execute();
    		 //header('Location:'.$rpg.'');
    		 echo '<meta http-equiv="refresh" content="0; url='.$rpg.'">';
     
     
    	  }
    	 ?>

  2. #2
    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
    Par défaut
    Est-ce que dans ta table les valeurs "time" sont bien différentes ?

    En tout cas c'est sûr que ton code est un peu en bazar, c'est difficile de suivre ce que tu fais à partir de la ligne 32.

    Pourquoi il y a deux requêtes d'INSERTION et deux requêtes d'UPDATE ?
    A quoi sert la fonction get_info() ?
    Est-ce que 'pts_vote' dans la session ça n'est pas simplement la valeur contenue dans la table ?
    Tu fais des requêtes préparées mais sans paramètres donc la préparation ne sert à rien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Par défaut
    non elles ne le sont pas, la plupart du temps, une seule ligne se crée et fait loi pour tout les membres :-/

    oui, navré, comme je me suis pris la tête dessus pendant plusieurs heures, forcement, ça a mis le bazar :-/
    la fonction "get_info()", récupère les infos pour l'afficher sur la page.

    ben les 2 fonctions UPDATE, une s'occupe de "pts_vote" indiquant le nombre de fois où l'on vote et l'autre du nombre de points total^^
    (ce qui répond à ta questions sur "pts_vote" aussi)

    Si tu parles de la préparation de départ, c'est que normalement, c'est censé préparé en fonction du "guid" de chaque membre, mais ça ne le fait pas, que je mette "$_SESSION['id']" qui est l'équivalent des guid membre ou que je mette "tarte" ça fait pareil :-/

    et la doublure des fonctions INSERT, c’est pour insérer la confirmation du vote du dit membre effectuant l'action.

  4. #4
    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
    Par défaut
    Bon concernant la partie UPDATE, si j'ai bien compris le fonctionnement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $a = get_info($_SESSION['id'],'point');
    		$b = get_info($_SESSION['id'],'pts_vote');
    		$point1 = $vote + $a;
    		  $point2 = 1 + $b;
    		 $sql = "UPDATE accounts SET point=$point1 WHERE guid='".$_SESSION['id']."'";
    			$sql = $db2->prepare($sql);
    			$sql->execute();
     
    			$sql = "UPDATE accounts SET pts_vote=$point2 WHERE guid='".$_SESSION['id']."'";
    			$sql = $db2->prepare($sql);
    			$sql->execute();
    se résume à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db2->exec("UPDATE accounts SET point = point + $vote, pts_vote = pts_vote + 1 WHERE guid = " . $_SESSION['id']);
    Concernant les INSERT, tu as modifié le code dans le premier message et je comprends encore moins pourquoi il y a deux insertions.
    Quelle est la structure de cette table vote ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2016
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2016
    Messages : 135
    Par défaut
    ah oui effectivement, je me suis pris la tête pour rien Oo

    oui j'ai modifié le code, car il n'était pas comme ce que j'avais fait en dernier, je te fournis ma table "votes"
    tu vas voir la ligne qui s'inscrit constamment et qui par son unique présence cause le souci (son ip est celle qui s'affiche quelque soit le guid des membres)

    table

  6. #6
    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
    Par défaut
    Si les votants sont identifiés par un id, que vient faire l'ip dans notre histoire ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] Système de vote sécurisé
    Par mathieu3392 dans le forum Langage
    Réponses: 4
    Dernier message: 22/11/2007, 14h18
  2. Système de votes
    Par Auden dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/05/2007, 13h27
  3. [AJAX] système de vote ajax
    Par sisco97 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 07/05/2007, 03h52
  4. [Système] Questions système de votes
    Par masseur dans le forum Langage
    Réponses: 2
    Dernier message: 03/10/2006, 15h47
  5. [MySQL] Système de votes (pour les membres) : cmt le créer ?
    Par yazerty dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 20/02/2006, 12h58

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