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 :

Ne pas afficher les proposition si l'utilisateur a déjà voté [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
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 156
    Par défaut Ne pas afficher les proposition si l'utilisateur a déjà voté
    Bonjour tout le monde, je suis entrain de réaliser une application pour vote sous PHP,
    L'utilisateur doit cliquer sur "Je suis intéréssé" ou "Pas intéréssé", et le vote est transmis ensuite à la base de données.
    Le but étant de rendre ces cases invisibles une fois que le vote est envoyé par l'utilisateur.
    Un utilisateur est identifié par son matricule.
    J'ai créé deux fichiers :
    index.php

    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
    <?php
    session_start();
    $connect = mysqli_connect("localhost", "root", "", "test");
    $query = "SELECT * FROM response WHERE matricule ='" . $mat . "'";
    $result = mysqli_query($connect, $query);
    $mat = $_SESSION['matricule'];
    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>OnClick Insert Radio Button value into Database using PDO in Jquery Ajax PHP | SoftAOX Tutorial</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    </head>
    <body>
    <?php
    //Vérifie si la personne a bien voté ou pas
    while ($row = mysqli_fetch_array($result))
    {
    if( $mat != $row['matricule'] )
     
    {
     
    ?>
    <h1> Vote</h1>
    <input type="radio" name="response" value="Je suis intérésse">Je suis intérésse<br/><br/>
    <input type="radio" name="response" value="Je ne suis pas intéréssé">Je ne suis pas intéréssé<br/><br/>
    <h3 id="result"></h3>
    <br/>
    <?php
    }
      else
    echo "Vous avez déjà voté";
    }
    ?>
     
    <script>
    $(document).ready(function(){
     $('input[type="radio"]').click(function(){
     var response = $(this).val();
     $.ajax({
     url:"insert.php",
     method:"POST",
     data:{response:response},
     success: function(data){
     $('#result').html(data);
     }
     });
     });
    });
    </script>
    </body>
    </html>
    Et un fichier insert.php

    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
    <?php
    session_start();
    //Insert Data
    $hostname = "localhost";
    $username = "root";
    $password = "";
    $databasename = "test";
    $matricule= $_SESSION['matricule'];
    try
    {
     $conn = new PDO("mysql:host=$hostname;dbname=$databasename",$username, $password);
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     if(isset($_POST["response"]))
     {
     $query = "INSERT INTO response(response, matricule) VALUES (:response, :matricule)";
     $statement = $conn->prepare($query);
     $statement->execute(
     array(
     'response' => $_POST["response"],
     ':matricule' => $matricule
     )
     );
     $count = $statement->rowCount();
     if($count > 0)
     {
     echo "Merci d'avoir voté";
     }
     else
     {
     echo "L'insersion a echoué !";
     }
     }
    }
    catch(PDOException $error)
    {
     echo $error->getMessage();
    }
    ?>
    Le vote est bien inséré à la base de données avant que j'introduise la condition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php 
    while ($row = mysqli_fetch_array($result))
    {
     if( $mat != $row['matricule'] )
     
     {
     
    ?>
    J'ai un message d'erreur
    mysqli_fetch_array() expects parameter 1 to be mysqli_result.
    Merci de votre aide

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    ça c'est une erreur typique d'une requête qui ne fonctionne pas. En l'occurrence, tu utilises $mat AVANT de l'avoir affecté, ce qui ne doit pas aider
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 156
    Par défaut
    Exactement, je l'avais remarqué et modifié entretemps, mais ça ne fonctionne pas non plus.

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 156
    Par défaut
    Bonjour Je reviens vers vous par rapport au script.
    J'ai pensé à compter le nombre d'occurrences du matricule de l'employé.
    Si le compteur est égal à 0 j'affiche le formulaire de vote, sinon un message lui indiquera qu'il a déjà voté.
    Ça marche mais tant que la page n'est pas actualisée il renvoie quand même la requête si je reclique sur le bouton radio.
    Voici le code :
    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
     
    <?php
    session_start();
    $connect = mysqli_connect("localhost", "root", "", "test");
    $mat = $_SESSION['matricule'];
    $query = "SELECT * FROM response WHERE matricule ='" . $mat . "'";
    $result = mysqli_query($connect, $query);
    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>OnClick Insert Radio Button value into Database using PDO in Jquery Ajax PHP | SoftAOX Tutorial</title>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    </head>
    <body>
    <?php
    echo $mat;
    $compte =0;
    while ($row = mysqli_fetch_array($result))
    {
      if( $mat == $row['matricule'] )
       {
         $compte+=1;
       }
    }
    var_dump($compte);
     
    if ( $compte == 0) 
       {
    ?>
     
    <h1> Vote</h1>
    <input type="radio" name="response" value="Je suis intérésse">Je suis intérésse<br/><br/>
    <input type="radio" name="response" value="Je ne suis pas intéréssé">Je ne suis pas intéréssé<br/><br/>
    <h3 id="result"></h3>
    <br/>
    <?php }
    else echo "Vous avez déjà voté";
    ?>
    <script>
    $(document).ready(function(){
     $('input[type="radio"]').click(function(){
     var response = $(this).val();
     $.ajax({
     url:"insert.php",
     method:"POST",
     data:{response:response},
     success: function(data){
     $('#result').html(data);
     }
     });
     });
    });
    </script>
    </body>
    </html>
    Avez-vous une solution à ça ?

  5. #5
    Membre Expert
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Par défaut
    Tu peux essayer comme suit.
    ATTENTION. Dans tes scripts tu utilises mysqli et PDO. N'utilise que PDO ! De plus ta table response n'est pas apte à traiter plus d'un type de vote. On ne stocke pas des chaînes de caractères comme "Je suis intéressé". Un tel mode de stockage est un cauchemar en informatique. On préfèrera des codes comme 0 ou 1 qui occupent moins de place et sont plus faciles à gérer. En effet si tu stockes "Je suis intéressé" et que tu utilises ensuite les valeurs dans un programme pour un test il ne faudra pas te tromper et écrire par exemple "je suis intéressé" qui est différent de "Je suis intéressé". Pense aussi à l'internationalisation. Je suis intéressé ne parle qu'aux francophones. 0 ou 1 ça parle à tout le monde.


    test9526.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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    <?php
    //---- DEBUT - POUR SIMULER UN LOGIN EFFECTUE
    if ( ! session_id() ) @ session_start();
    // Modifier la valeur du matricule pour tester plusieurs fois
    $_SESSION['matricule'] = '12348';
    $matricule = $_SESSION['matricule'];
    //---- FIN - POUR SIMULER UN LOGIN EFFECTUE//---- DATABASE
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
    $pdo    = new PDO('mysql:host='.DB_HOST.'; dbname='.DB_NAME,DB_USER,DB_PWD, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    $query  = "SELECT * FROM response WHERE matricule = :matricule ";
    $sth    = $pdo->prepare($query);
    $sth->bindParam(':matricule', $matricule, PDO::PARAM_STR);
    $sth->execute(); 
    $resultat =  $sth->rowCount(); 
    ?>
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>OnClick Insert Radio Button value into Database using PDO in Jquery Ajax PHP | SoftAOX Tutorial</title>
    <script src="<a href="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script" target="_blank">https://cdnjs.cloudflare.com/ajax/li...n.js"></script</a>>
    </head>
    <body>
     
    <h1> Vote</h1>
    <div id="vote">
    <?php 
     if ($resultat == 0) {?>
     <input type="radio" name="response" value="0">Je suis intéressé<br/><br/>
     <input type="radio" name="response" value="1">Je ne suis pas intéressé<br/><br/><?php  
     } else {?>
      Vous avez déjà voté<?php
     }
    ?>
    </div>
    <br/>
    <script>
    $(document).ready(function(){
      $('input[type="radio"]').click(function(){
       var response = $(this).val();
       $.ajax({
        url : "test9526B.php",
        method:"POST",
        data:{response:response},
        success: function(data){
        $('#vote').html(data);
        }
       });
      });
    });
    </script>
    </body>
    </html>

    test9526B.php => fichier que tu appelles insert.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
    42
    <?php
    session_start();
    //Insert Data
    define('DB_HOST', '127.0.0.1');
    define('DB_NAME', 'tests');
    define('DB_USER', 'root');
    define('DB_PWD' , '');
    $hostname     = DB_HOST;
    $username     = DB_USER;
    $password     = DB_PWD;
    $databasename = DB_NAME;
    $matricule= $_SESSION['matricule'];
    try
    {
     $conn = new PDO("mysql:host=$hostname;dbname=$databasename",$username, $password);
     $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
     if(isset($_POST["response"]))
     {
     $query = "INSERT INTO response(response, matricule) VALUES (:response, :matricule)";
     $statement = $conn->prepare($query);
     $statement->execute(
     array(
     'response' => $_POST["response"],
     ':matricule' => $matricule
     )
     );
     $count = $statement->rowCount();
     if($count > 0)
     {
     echo "Merci d'avoir voté";
     }
     else
     {
     echo "L'insertion a echoué !";
     }
     }
    }
    catch(PDOException $error)
    {
     echo $error->getMessage();
    }
    ?>

  6. #6
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 156
    Par défaut
    Merci @Badaze pour tes conseils.
    Le script marche bien dorénavant.
    J'avais seulement une erreur avec la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <script src="<a href="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script" target="_blank">https://cdnjs.cloudflare.com/ajax/li...n.js"></script</a>>
    que j'ai remplacé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
    Merci encore pour ta disponibilité habituelle

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

Discussions similaires

  1. Ne pas afficher les faces cachées
    Par gamerome dans le forum OpenGL
    Réponses: 21
    Dernier message: 27/01/2006, 15h51
  2. [JTable] Ne pas afficher les entêtes de colonnes
    Par nicolas.pied dans le forum Composants
    Réponses: 2
    Dernier message: 27/01/2006, 11h22
  3. [Sécurité] Ne pas afficher les variables de l'URL
    Par Wormus dans le forum Langage
    Réponses: 17
    Dernier message: 23/10/2005, 14h13
  4. [JTable] Comment ne pas afficher les titres ?
    Par FabienBxl dans le forum Composants
    Réponses: 3
    Dernier message: 08/10/2003, 15h01

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