Augmenter valeur variable à chaque essai

Fermé
Gaël - Modifié par Gaël le 28/09/2011 à 19:40
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 28 sept. 2011 à 21:31
Bonjour, malgré ce titre un peu confu, la question n'est pas si compliquée que ça.
Je suis en plein apprentissage du PHP/MySql grâce au site du zéro et j'ai voulu faire un petit test. J'ai fait une page PHP avec un formulaire et un nombre que le visiteur ne voit pas, le but est de rentrer un nombre compris entre 1 et 1 000 000 dans le formulaire et de cliquer sur Valider, si le nombre est supérieur à la solution, un message est affiché, de même s'il est inférieur ou s'il est égal. J'aimerais ajouter un compteur du nombre d'essais qu'à effectué le visiteur avant de trouver la solution. Comment pourrais-je réaliser ce compteur ? Je voudrais qu'à chaque essai (à chaque fois que le bouton valider est cliqué) la variable $nombre_essais soit augmentée de 1 puis qu'elle s'affiche quand le visiteur a trouvé la solution puis qu'elle se réinitialise à 0 après. Je suis débutant en PHP et j'ai à peine commencé le MySql.
Merci d'avance pour votre réponse qui me sera très précieuse !

Voici le code de ma page:
<h2>Trouvez un nombre entre 1 et 1 000 000</h2> 

<form action="programme.php" method="post"> 
<p> 
    <input type="text" name="reponse" /> 
    <input type="submit" value="Valider" /> 
</p> 
</form> 

<?php 
$nombre = 14367; 



if ($_POST['reponse'] == NULL) 
{ 
    echo ""; 
} 

elseif ($_POST['reponse'] < 1 OR $_POST['reponse'] > 1000000) 
{ 
    echo "Ce nombre est incorrect."; 
 ; 
} 

elseif ($_POST['reponse'] < $nombre) 
{ 
    echo "Ce nombre est trop petit."; 
} 
elseif ($_POST['reponse'] > $nombre) 
{ 
    echo "Ce nombre est trop grand."; 
} 

else 
{ 
    echo "Bravo ! Tu as enfin réussi à trouver la solution !"; 
} 

?>



A voir également:

3 réponses

rafit jad kuldinger Messages postés 7689 Date d'inscription dimanche 4 avril 2010 Statut Membre Dernière intervention 2 février 2024 1 151
Modifié par rafit jad kuldinger le 28/09/2011 à 19:51
il te sufi de mettre une boucle qui relace le code tant que la valeur n est pas trouve
avec l incrémentation du nombre d essais ...dans la boucle

si x diferent de y alor revenir au debut du programes et incrémente z de 1...

si x = y alor affiche : bravo tu a trouvé en z essais ...


quand il clique pour quitte : z = 0 ..

en gros c est cas quand au code exacte la jene peu t aidé ..

il te maque la boucle et l incrémentation de ton compteur ...
...


pourquoi faire simple quand on peu faire compliqué ?
1
le problème est qu'il faut définir la variable quand on la crée donc il faudrait :
$nombre_essais = 0
pour le début, et à la fin, je pourrais mettre
$nombre_essais = $nombre_essais + 1

Le problème est que, au moment où le visiteur clique sur Valider, la variable reprend la valeur 0 et donc, elle ne compte pas le nombre d'essais...
0
A chaque fois que le visiteur clique sur Valider, la variable prend la valeur 1 met elle est rétablie à 0 par la suite...
0
Après, je n'ai peut-être pas très bien compris ce que tu m'indiques, pourrais-je avoir plus de précisions ? Merci.
0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 28/09/2011 à 20:21
Salut ...

@rafit jad kuldinger avec une boucle ?!!! o_O'

@Gael tu doit utiliser une variable globale, $_SESSION ou $_COOKIE, je te conseille les sessions pour que l'utilisateur ne pourra pas modifier le contenu de cette dernière ...

donc tu ajoute ça au debut de ton script ...
session_start();  
if(isset($_SESSION['nombre']) AND isset($_POST['reponse'])) {  
    $_SESSION['nombre']++;  
}  
elseif(!isset($_SESSION['nombre'])) {  
    $_SESSION['nombre'] = 0;  
}

et pour afficher le nombre des essaies ...
echo 'Nombre d\'essais : '.$_SESSION['nombre'];


a+
0
Merci, ce code doit être mis au milieu des balises body et à l'intérieur de balises php ?
0
rafit jad kuldinger Messages postés 7689 Date d'inscription dimanche 4 avril 2010 Statut Membre Dernière intervention 2 février 2024 1 151
28 sept. 2011 à 20:17
nomal tu a mi en debut de programes la mise a zero du compteur ..
bon sa position ne change rien, mais il faut une condition autre pour sa mise a zéro ! comme le fait de quitte la page par exemple ...
ou de clique sur ; recommencé ...

donc :
$nombre_essais = 0 quand on clique sur "recommencé" ou quand on quitte la page.
mais a l extérieur de la boucle de ton programmes...

tu sort de la boucle avec la condition x= y
affiche : tu a trouve en z essais ...

si x=y alor affiche z
si clic sur "recommence le jeu"(ce qui reinitilise tous)

il te faut :
l incrémentation de ton compteur se fait quand le joueur fait un nouvelle essais donc a chaque foi que x est différent de y .. (si x diferent de y alor incrémente z de 1 ...)
quand z est = y alor tu sort de la boucle et tu affiche la valeur de z ..
ensuite quand le joueur veux faire uen nouvelle parti ou quite la page z est remi a 0 ..
donc en debut de programes tu met z a 0
tu determine ta valeur a trouve ...

ensuite tu rentre dans ta boucle ...
dans la boucle tu incrémente z
tu sort de la boucle quand la valeur est trouve

tu affiche z
tu met z a 0 quand le joueur relance une parti ou quite la page.

enfin metre a 0 deux foi peu etre inutile mais il faut que z soi obligatoirement
ca va que c est de la logique ^^...

0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 28/09/2011 à 21:48
<?php   
session_start();   

if(isset($_POST['time']) AND $_POST['time'] != $_SESSION['time']) die('Erreur, n\'actualisez pas la page, cliquez <a href="programme.php">ici</a> pour continuer ...');

$time = time();
$_SESSION['time'] = $time;

if(isset($_SESSION['compteur']) AND isset($_POST['reponse']) AND is_numeric($_POST['reponse'])) {              
    $_SESSION['compteur']++;
	$_SESSION['avance'] += 8;
	if($_SESSION['compteur'] < 25) $_SESSION['color'] = 'green';
	else if($_SESSION['compteur'] >= 25 AND $_SESSION['compteur'] < 40) $_SESSION['color'] = 'orange';
	else $_SESSION['color'] = 'red';
}              
elseif(!isset($_SESSION['compteur'])) {              
    $_SESSION['compteur'] = 0;
	$_SESSION['avance'] = 0;
	$_SESSION['color'] = 'green';
}   

if(!isset($_SESSION['nombre'])) {   
    $_SESSION['nombre'] = rand(1, 1000000);   
}   
?>   

<h2>Trouvez un nombre entre 1 et 1 000 000</h2>    
<div style="width:400px;border:1px solid black;overflow:hidden;"><div style="background-color:<?php echo $_SESSION['color']; ?>;height:10px;float:left;width:<?php echo $_SESSION['avance']; ?>;"></div></div>
<form action="programme.php" method="post">    
<p>    
    <input type="text" name="reponse" />
    <input type="hidden" name="time" value="<?php echo $time; ?>" />  
    <input type="submit" value="Valider" />    
</p>    
</form>    

<?php   
if($_SESSION['compteur'] != 0) echo '<p>Nombre d\'essais : '.$_SESSION['compteur'].'</p>'; 

if(!isset($_POST['reponse'])) die();
if(!is_numeric($_POST['reponse'])) die('Ce n\'est pas un nombre.');
if($_SESSION['compteur'] >= 50) {
    $_SESSION['nombre'] = rand(1, 1000000);  
    $_SESSION['compteur'] = 0;
	$_SESSION['avance'] = 0;
	die('Vous avez perdu.<br>cliquez <a href="programme.php">ici</a> pour rejouer ...');
}

if($_POST['reponse'] < 1 OR $_POST['reponse'] > 1000000) {    
    echo "<p>Ce nombre est incorrect.</p>";    
}   

elseif ($_POST['reponse'] < $_SESSION['nombre']) {    
    echo "<p>Ce nombre est trop petit.</p>";    
}   

elseif ($_POST['reponse'] > $_SESSION['nombre'])    
{    
    echo "<p>Ce nombre est trop grand.</p>";    
}    

else {   
    echo '<p>Bravo ! Tu as enfin réussi à trouver la solution ! <br>cliquez <a href="programme.php">ici</a> pour continuer ...</p>';
    $_SESSION['nombre'] = rand(1, 1000000);  
    $_SESSION['compteur'] = 0;
	$_SESSION['avance'] = 0;
}    
//echo $_SESSION['nombre'];
?>


EDIT !!!
Voila, avec une petite touche personnelle.
0
Merci beaucoup de ton aide. Tout fonctionne !
0
JooS Messages postés 2468 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
Modifié par JooS le 28/09/2011 à 21:32
ben au fait non, mais maintenant tout fonctionne ... ;)
Enfin, j'espère ...
0