Bonjour,

Je rencontre un petit problème avec mon code.

Ce que je fais

Dans le cadre d'un jeu, je souhaite récupérer le nombre d'essaie du joueur en incrémentant une variable à chaque mauvaise réponse.

$i = 0;

if(!isset($_SESSION['username']) && !isset($_POST['answer'])):    
    $_SESSION['randnum'] = (int)rand(10000, 100000);
    $_SESSION['findnum'] = (int)rand(1, $_SESSION['randnum']);    
    require_once 'justeprixform.php';
    echo $_SESSION['compteur'];
else:
    $answers = (int)$_POST['answer'];
    if(empty ($_SESSION['timer'])):
        $_SESSION['timer'] = $timer1 = new DateTime('NOW');
    endif;
    while (isset ($_SESSION['findnum'])) { 

        if($answers === $_SESSION['findnum'] ):
            $timer2 = new DateTime('NOW');
            $diff = $_SESSION['timer']->diff($timer2, true);
            echo "Bravo tu as trouvé le bon chiffre en {$diff->h}:{$diff->i}:{$diff->s} et {$i} essaies";
            unset($_SESSION['timer']);
            break;
        elseif ($answers <= $_SESSION['findnum']):
            ++$i;
            echo "C'est plus!<br>";
            echo $i . '<br>';
            echo $_SESSION['findnum'];
            require_once 'justeprixform.php';
            break;
        elseif ($answers >= $_SESSION['findnum']):
            ++$i;
            echo "C'est moins!<br>";
            echo $i . '<br>';
            echo $_SESSION['findnum'];
            require_once 'justeprixform.php';
            break;
        else:
            echo "Veuillez entrer une valeur valide!";
            require_once 'justeprixform.php';
            break;
        endif;

    };
endif;

Ce que j'obtiens

Malgrès tous mes efforts, je n'arrive pas à incrémenter, il passe de 0 à 1. Je suppose que c'est dù au break, mais sans break et/ou avec un continue ma boucle devient infini et l'incrémente se fait sans problème.

2 réponses


Curvata
Réponse acceptée

Tu recharges ta page après la soumission de ton formulaire "justeprixform.php" donc $i repasse à 0.
Sans le break;, tu incrémentes car $_SESSION['findnum'] est toujours défini donc tu ne sors jamais de ta boucle. Il faudrait mettre ton $i en session.

Effectivement, j'avais essayer de passer le compteur dans la session, mais il ne s'incrémentait pas du fait que j'avais oublié un else quelque part.
Du coup voici mon code qui fonctionne sans problème apparent:

<?php
if (session_status()=== PHP_SESSION_NONE):
    session_start();
endif;
require 'pdo.php';
/*
- On demande un nom de joueur --- FAIT
- On détermine le chiffre qu'on doit deviner --- FAIT
- On débute le timer --- FAIT
- On débute l'incrémentation --- FAIT
- Si pas de post on affiche le formulaire de base --- FAIT
- Tant réponse fausse on indique si c'est plus ou si c'est moins et on incrémente les essaie --- FAIT
- Une fois la réponse juste on le félicite, on stop le timer --- FAIT
- On stop l'incrémentation
- On inscrit les nouveaux résultat dans la BDD
- On affiche le tableau des scores
*/

$goodanswer = false;
if(!isset($_SESSION['username']) && !isset($_POST['answer'])):    
    $_SESSION['randnum'] = (int)rand(10000, 100000);
    $_SESSION['findnum'] = (int)rand(1, $_SESSION['randnum']);
    if(!empty ($_SESSION['timer']) && !empty($_SESSION['compteur'])):
        unset($_SESSION['timer']);
    endif;    
    require_once 'justeprixform.php';
else:
    $answers = (int)$_POST['answer'];
    if(!isset($_SESSION['compteur'])):
        $_SESSION['compteur'] = 1;
    else:
        ++$_SESSION['compteur'];
    endif;
    if(empty ($_SESSION['timer'])):
        $_SESSION['timer'] = $timer1 = new DateTime('NOW');
    endif;
    while ($goodanswer === false) {
        if($answers === $_SESSION['findnum']):
            $timer2 = new DateTime('NOW');
            $diff = $_SESSION['timer']->diff($timer2, true);
            echo "Bravo tu as trouvé le bon chiffre en {$diff->h}:{$diff->i}:{$diff->s} et {$_SESSION['compteur']} essaies";
            unset($_SESSION['timer'], $_SESSION['compteur']);
            $goodanswer = true;
            break;
        elseif ($answers <= $_SESSION['findnum']):
            echo "C'est plus!<br>";

            echo $_SESSION['compteur'] . '<br>';
            echo $_SESSION['findnum'];

            require_once 'justeprixform.php';
            break;
        elseif ($answers >= $_SESSION['findnum']):
            echo "C'est moins!<br>";

            echo $_SESSION['compteur'] . '<br>';
            echo $_SESSION['findnum'];
            echo $_SESSION['compteur'];
            require_once 'justeprixform.php';
            break;
        else:
            echo "Veuillez entrer une valeur valide!";
            require_once 'justeprixform.php';
            break;
        endif;
    };
endif; 

Merci à toi