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

Langage PHP Discussion :

code pour reprendre session de l'utilisateur


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut code pour reprendre session de l'utilisateur
    Bonjour, je n'arrive pas à comprendre quel est le code pour reprendre la session de l'utilisateur. Regardez le commentaire de la ligne 13, je n'arrive pas à compléter cette ligne. Merci d'avance.
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
     
    <?php
     
    $bdd = new PDO('mysql:host=localhost;dbname=espace_membre', 'root', '');
     
    if(isset($_POST['validate'])) {
        $answer = htmlspecialchars($_POST['answer']);
        if(!empty($_POST['answer'])){
            $answerlength = strlen($answer);
          if($answerlength <= 255) {
              if($answer == 3) {
              $erreur = "Right answer";
              $id = //Mets ici le code pour reprendre la session de l'utilisateur et donc, son id
              $points = $bdd->exec('SELECT points FROM tadb WHERE id = '.$id.'');
              $newpoints = ($points + 1);
              $insertpoints = $bdd->exec('INSERT INTO `tadb`(`points`) VALUES ('.$newpoints.')');
              }
              else {
                 $erreur = "Wrong answer" ;
              }
             } else {
                 $erreur = "Your answer must not exceed 255 print";
             }
        } else {
            $erreur = "Your answer is empty";
        }
    }
    ?>
     <html>
      <head>
      <meta charset="utf-8" />
      <title>Solving problem</title>
      </head>
      <body style="background-color: #FFD700; text-align: center;" >
    <div>
    <h1> Recent problems to solve </h1>
     <div>
     <p> <TABLE BORDER="1" style="margin: auto; width: 1000px; height: 900px;">
       <TR>
      <TH>   </TH>
     <TH> Name </TH>
     <TH> Age </TH>
     <TH> Country </TH>
     <TH> Problem </TH>
     <TH> Answer to the problem </TH>
      </TR>
      <TR>
     <TH> Problem 1 </TH>
     <TD>  </TD>
     <TD>  </TD>
     <TD>  </TD>
     <TD>  </TD>
     <TD style="width: 200px; height: 276px;">
                     <form action="" method="POST">
                         <label for="answer">Your solution :</label>              
                         <input type="text" placeholder="Your answer" id="answer" name="answer" value="<?php if (!empty($answer)) { echo $answer; } ?>" />
                         <br />
                         <input type="submit" name="validate" value="Validate my answer" />
                         <?php
             if(isset($erreur)) {
                echo '<font color="red">'.$erreur."</font>";
             }
             ?>
     
     
                   </TD>
      </TR>
      </form>
      <TR>
     <TH> Problem 2 </TH>
     <TD>  </TD>
     <TD>  </TD>
     <TD>  </TD>
     <TD>  </TD>
     <TD>
     <form action="" method="POST">
        <label for="answer">Your solution :</label>              
                         <input type="text" placeholder="Your answer" id="answer" name="answer" value="<?php if(isset($answer2)) { echo $answer2; } ?>" />
                         <br />
                         <input type="submit" name="validate2" value="Validate my answer" />
                         <?php
             if(isset($erreur2)) {
                echo '<font color="red">'.$erreur2."</font>";
             }
             ?>
                         </TD>
     
      </TR>
    </form>
      <TR>
     <TH> Problem 3 </TH>
     <TD>  </TD>
     <TD>  </TD>
     <TD>  </TD>
     <TD>  </TD>
     <TD>
     <form action="" method="POST">
        <label for="answer">Your solution :</label>              
                         <input type="text" placeholder="Your answer" id="answer" name="answer" value="<?php if(isset($answer3)) { echo $answer3; } ?>" />
                         <br />
                         <input type="submit" name="validate3" value="Validate my answer" />
                         <?php
             if(isset($erreur3)) {
                echo '<font color="red">'.$erreur3."</font>";
             }
             ?>
                         </TD>
      </TR>
    </form>
    </TABLE></p></div>
    </div>
     
    </body>
     </html>

  2. #2
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    salut

    C'est un exercice?
    tu ne diras à la personne qu'il y a une faille de sécurité ligne 14 et eventuellement 16 et que c'est navrant de faire du PDO pour ça.

    C'est quoi pour toi la session utilisateur? ça désigne quel concept? la session PHP (cf http://php.net/manual/fr/function.session-start.php) ? la session de base de donnée?

  3. #3
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Bonjour, merci tout d'abord pour votre réponse.

    Je suis un lycéen en 1°S qui débute en php et je voudrais créer un questionnaire pour mon site. Si l'utilisateur rentre la bonne réponse à la question, alors tout simplement je lui ajoute 1 point dans la colonne points de la table membre (id, pseudo, mail, motdepasse, points) dans ma base de données espace_membres. De plus, je voudrais aussi que l'utilisateur n'ait que 3 tentatives, pour éviter qu'il essaye toutes les possibilités. Enfin, lorsque j'ai réussi tout cela, je voudrais faire un classement des membres ayant le plus de points. Je tiens aussi à préciser que j'ai fait ce code tout seul, j'ai été aidé que pour les lignes 13 à 16. Je suppose qu'il s'agit de la session base de données, car je veux incrémenter la colonne points de l'utilisateur dans la table membre, s'il répond correctement.

    J'ai déjà fait pas mal de boulot. En effet, j'ai crée un formulaire d'inscription et de connexion, qui fonctionne bien et qui stocke les informations dans ma base de données.

    Voilà, j'espère avoir été clair. Merci d'avance pour votre aide très précieuse !

  4. #4
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    J'ai modifié mon code de la ligne 11 à 15 et en ajoutant session_start(), je n'ai plus de message d'erreur, mais ça n'incrémente pas ma colonne points...
    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
     
    <?php
      session_start();
    $bdd = new PDO('mysql:host=localhost;dbname=espace_membre', 'root', '');
     
    if(isset($_POST['validate'])) {
        $answer = htmlspecialchars($_POST['answer']);
        if(!empty($_POST['answer'])){
            $answerlength = strlen($answer);
          if($answerlength <= 255) {
              if($answer == 3) {
              $erreur = "Right answer";
              $id = $_SESSION['id'];
              $points = $bdd->exec("SELECT points FROM membres WHERE id = '.$id.'");
              $newpoints = ($points + 1);
              $insertpoints = $bdd->exec("INSERT INTO membres (points) VALUES ('.$newpoints.')");
              }

  5. #5
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    est ce que tu veux qu'un utilisateur ne puisse faire que 3 tentatives dans toutes "sa vie" oubien par session?

    il faut ajouter un compteur de tentative dans ta $_SESSION sinon dans la base de donnée.

  6. #6
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pour incrementer ton compteur en base de donnée, il faut passer par un ordre sql UPDATE et non INSERT.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Bonjour et merci pour votre aide, je parlais de 3 tentatives dans toutes la vie.

    J'ai modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if($answer == 3) {
              $erreur = "Right answer";
              $id = $_SESSION['id'];
              $points = $bdd->exec("SELECT points FROM membres WHERE id = '.$id.'");
              $newpoints = ($points + 1);
              $insertpoints = $bdd->exec("UPDATE membres (points) VALUES ('.$newpoints.')");
              }
    Mais lorsque je rentre une bonne réponse, la valeur de la colonne points reste à 0. Je suis vraiment désespéré, car je bloque sur cela depuis quelques jours et mon projet n'avance pas.

    Peut être que le problème vient de ma colonne PhpMyAdmin. Je l'ai configuré comme cela : nom : points ; type : INT ; taille/valeurs : 11; Valeurs par défaut : Tel que défini : 0; interclassement : vide; attributs : vide; null : décoché; ajuster les privilèges : décoché; AI : décoché; viryualité : vide.

    Merci d'avance, pour votre aide car je suis vraiment désespéré.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    à priori, c'est plutôt un méconnaissance du SQL que du PHP.

    Apprends les syntaxes SQL des requêtes "SELECT", "INSERT", "UPDATE" et "DELETE".
    Tu feras un grand pas en avant.


  9. #9
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
              $points = $bdd->exec("SELECT points FROM membres WHERE id = '.$id.'");
              $newpoints = ($points + 1);
              $insertpoints = $bdd->exec("UPDATE membres (points) VALUES ('.$newpoints.')");
    si on ferme les yeux sur l'erreur de syntaxe de la 2e requete, je te recommande de faire l'increment dans l'ordre SQL au lieux de lire la valeur, incrementer en PHP puis réinjecter le résultat. Apres tu pourras relire le bon résultat au besoin... mais uniquement si tu as besoin de l'executer.

  10. #10
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Bonjour et merci pour votre aide, j'ai révisé le SQL et j'ai donc réussi à régler ce problème.
    Maintenant, je voudrais juste bloquer le formulaire si l'utilisateur a donné la bonne réponse ou si il a effectué 3 essais.
    1.Si colonne essais = 3 Alors bloquer le formulaire
    2. Si colonne points = 1 Alors bloquer le formulaire
    Ces colonnes existent et fonctionnent correctement, mais je ne sais pas comment bloquer le formulaire si la condition est vérifiée.
    Merci d'avance!

  11. #11
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    salut

    t'es vraiment pas loin d'une solution. Tu as presque la structure de l'algorythme:

    tu as
    1.Si colonne essais = 3 Alors bloquer le formulaire
    2. Si colonne points = 1 Alors bloquer le formulaire
    bon on peut reprendre avec plus de détail
    1. lire les nombres d'essais en base de donnée pour cet utilisateur (+ points, si c'est sur la meme table)
    2. Si colonne essais = 3 Alors bloquer le formulaire
    3. sinon
    4. lire le nombre de points
    5. Si colonne points = 1 Alors bloquer le formulaire
    6. sinon
    7. afficher le formulaire.

  12. #12
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    pour bloquer le formulaire, il suffit d'afficher un petit message à la place du formulaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo '<p>tu n\'as plus acces au formulaire</p>',PHP_EOL;

  13. #13
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Merci beaucoup !
    Et le message à la place du formulaire, je le mets comment en fait ? Je me demande juste comment c'est possible d'afficher un message à la place d'un formulaire.
    Merci d'avance.

  14. #14
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Je pense qu'il faut le mettre dans le html non ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    <label for="answer">Your solution :</label>               
                         <input type="text" placeholder="Your answer" id="answer" name="answer" value="<?php if(isset($answer2)) { echo $answer2; } ?>" />
                         <br />
                         <input type="submit" name="validate2" value="Validate my answer" />
                         <?php
    // Si essais = 3 ou points = 1 alors echo 'formulaire indisponible'
             if(isset($erreur2)) {
                echo '<font color="red">'.$erreur2."</font>";
             }
             ?>

  15. #15
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    salut, si ça marche, ça marche.

    là dans ton cas, j'ai peur que tu affiches la moité d'un formulaire. logiquement cette condition ne devrait-elle pas être en haut de la table, en lisant vite j'ai l'impression que ton formulaire est formaté à l'aide d'une table ? (on pourrait redire pas mal de chose la dessus, mais les choses une par une, on se demandera alors pourquoi il y a des <td> vides).

    est ce que tu sais que tu peux mettre des , à la place de . avec echo ? d'aucuns prétendent qu'on a un leger gain de perf.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par gene69 Voir le message
    ...tu peux mettre des , à la place de . avec echo ?...
    • Le point "." est quand même l'opérateur de concaténation !
      ex. $var = $x.' et '.$y;. On obtient une seule chaine de caractère.
    • La virgule a un rôle différent.
      Elle remplace echo $x; echo $y; echo $z; par echo $x,$y,$z;.
      On affiche 3 variables à la suite. Ce n'est pas pareil.



    PHP - Opérateurs de chaînes

  17. #17
    Membre émérite
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Points : 2 446
    Points
    2 446
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    On affiche 3 variables à la suite. Ce n'est pas pareil.
    j'adore ce genre de débat. concatener une chaine puis ne pas la stocker dans une variable puis l'envoyer à echo oubien afficher une variable, puis l'autre, puis l'autre sans concaténer (enfin laisser l'output buffer faire la concaténation ) tellement différent que j'ai jamais vu la différence.
    ça sent le troll.

  18. #18
    Invité
    Invité(e)
    Par défaut
    Stricto sensu, ta phrase est juste :
    tu peux mettre des , à la place de . avec echo
    C'est-à-dire que ces 2 expressions sont correctes, et fournissent le même affichage :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo 'Hello'.' the '.'World';
    echo 'Hello',' the ','World';
    Par contre, il ne faut pas faire de confusion : le point et la virgule n'ont pas le même rôle, ni la même utilisation.

    On peut écrire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var1 = 'Hello'.' the '.'World';   // concaténation
    echo $var1;
    MAIS on NE peut PAS écrire :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $var2 = 'Hello',' the ','World';   // ERREUR
    echo $var2;
    Parse error: syntax error, unexpected ',' in........
    Est-ce plus clair ?

    N.B. Parler de "troll" quand il s'agit d'un complément d'information, c'est abusé, voire abusif.
    Dernière modification par Invité ; 26/07/2017 à 14h37.

  19. #19
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    Bonjour, j'ai laissé des TD vides car je vais les remplir plus tard. Je n'ai vraiment pas compris comment on fait pour afficher un message à la place du formulaire si une condition est remplie. Merci d'avance.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Lycéen
    Inscrit en
    Juillet 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Juillet 2017
    Messages : 28
    Points : 19
    Points
    19
    Par défaut
    J'ai une idée! Peut être que si l'utilisateur a rempli les conditions, alors il faut le rediriger vers une nouvelle page du site (dans le même onglet) où le formulaire est remplacé par un message. Qu'en pensez vous ?

Discussions similaires

  1. Trolldi : le Dark Programming ou l’art d’écrire un code pour tromper les utilisateurs
    Par Michael Guilloux dans le forum Débats sur le développement - Le Best Of
    Réponses: 19
    Dernier message: 02/03/2017, 10h01
  2. [AC-2003] Code pour afficher les utilisateurs connectés à une BDD
    Par LionelDM dans le forum IHM
    Réponses: 2
    Dernier message: 07/01/2010, 18h04
  3. Code pour changer groupe utilisateurs?
    Par sash6 dans le forum Sécurité
    Réponses: 2
    Dernier message: 20/11/2009, 11h33
  4. Faire un compteur pour des sessions utilisateurs
    Par liverbird dans le forum C++Builder
    Réponses: 55
    Dernier message: 21/06/2006, 16h37
  5. code pour interbase 6.0 et 6.5 de generateur
    Par tripper.dim dans le forum InterBase
    Réponses: 4
    Dernier message: 01/07/2002, 12h29

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