number of tries does not increment in the PHP number-guessing game - php

The PHP script below is for a number-guessing game. A hidden field is used to store the number of guesses, represented by the variable $tries. No matter how I tried, the number of guess ($tries) never increment. Could someone tell me what is wrong with the code please?
Maria
<?php
$num=21;
$tries=(isset($_POST['guess'])) ? $tries+1: 0;
if (!isset($_POST['guess'])) {
$message="Welcome to the Guessing Game!";
} elseif (!is_numeric($_POST['guess'])) {
$message="You need to type in a number.";
} elseif ($_POST['guess']==$num) {
$message="You WON 1 million point!";
} elseif ($_POST['guess']>$num) {
$message="Try a smaller number";
} else {
$message="Try a bigger number";
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Guessing Game</title>
</head>
<body>
<h1><?php echo $message; ?></h1>
<p><strong>Guess number: </strong><?php echo $tries; ?></p>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<p><label for="guess">Type your guess here:</label><br/>
<input type="text" id="guess" name="guess" />
<input type="hidden" name="tries" value="<?php echo $tries; ?>"/></p>
<button type="submit" name="submit" value="submit">Submit</button>
</form>
</body>
</html>

Change:
$tries=(isset($_POST['guess'])) ? $tries+1: 0;
To:
$tries=(isset($_POST['tries'])) ? $_POST['tries']+1: 0;
Or, depending on the condition, only increment when a guess exists, then:
$tries=(isset($_POST['guess'])) ? $_POST['tries']+1: 0;
But doing it based on guess will allow the person to reset the counter by not entering a number ;)

$tries is not defined when you are trying to increment it. However it is availabe in $_POST
$tries=(isset($_POST['guess'])) ? $tries+1: 0;
// Change to
$tries=(isset($_POST['guess'])) ? $_POST['tries']+1: 0;

Related

A simple number guessing program in php using HTML Form

<html>
<head>
<title>Guessing Game</title>
</head>
<body>
<h1>Welcome to my guessing game</h1>
<form action="" method="GET">
<label for="numinput">Enter your number</label>
<input type="text" name="numinput">
<input type="submit" name="submit">
</form>
<?php
$num = $_GET['numinput'];
if (!isset($_GET['num'])) {
echo("Missing Guess Parameter");
} elseif ( strlen($_GET['num']) <60){
echo ("Your guess is too short");
} elseif ( !is_numeric($_GET['num'])){
echo("Your guess is not a number");
} elseif ($_GET['num'] > 60){
echo ("Your guess is too high");
} else {
echo ("Congratulations - You are right");
}
?>
</html>
My goal is to create a simple number guessing game using $_GET in php
Output: "Missing Guess Parameter" despite i provide any number in the input. Also, I couldn't understand whether to get the user provided data from submit of the textbox.
You need to put $num instead of $_GET['num'] after the variable $num is set
<html>
<head>
<title>Guessing Game</title>
</head>
<body>
<h1>Welcome to my guessing game</h1>
<form action="" method="GET">
<label for="numinput">Enter your number</label>
<input type="text" name="numinput">
<input type="submit" name="submit">
</form>
<?php
$num = $_GET['numinput'];
if (!isset($num)) {
echo("Missing Guess Parameter");}
elseif ( strlen($num) <60){
echo ("Your guess is too short");}
elseif( !is_numeric($num)){
echo("Your guess is not a number");}
elseif ($num > 60){
echo ("Your guess is too high");}
else{
echo ("Congratulations - You are right");}
?>
</html>
Name of the html input and the key of $_GET must be identical, so change name="numinput" to name="num" will be a solution to fixed the problem.
NB: $num = $_GET['num']; may accure UNDEFINED INDEX if you use it outside the if condition when isset($_GET['num']) equal to true
<html>
<head>
<title>Guessing Game</title>
</head>
<body>
<h1>Welcome to my guessing game</h1>
<form action="" method="GET">
<label for="numinput">Enter your number</label>
<input type="text" name="num">
<input type="submit" name="submit">
</form>
<?php
//$num = $_GET['num']; this should be after isset($_GET['num']) == true
if (!isset($_GET['num'])) {
echo("Missing Guess Parameter");
} elseif ( strlen($_GET['num']) <60){
echo ("Your guess is too short");
} elseif ( !is_numeric($_GET['num'])){
echo("Your guess is not a number");
} elseif ($_GET['num'] > 60){
echo ("Your guess is too high");
} else {
echo ("Congratulations - You are right");
}
?>
</body>
</html>

How to create a form that accept number only

How can I create a form that accept number only?
<!DOCTYPE html>
<html>
<body>
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
<label>x:</label><br>
<input type="text" name="xx" ><br>
<input type="submit" value="Submit">
</form>
<?php
if (isset($_POST['xx']) || !empty($_POST['xx']) || is_numeric($_POST['xx'])){
$x = $_POST['xx'];
}else{
echo "vous devez taper des chiffres!";
}
echo $x . "<br />";
?>
</body>
</html>
I am new in PHP please an easy answer.
Thank you :-)
If you only want to accept a number, you can also do so using the html element <input>.
Like this:
<input type= "number" name= "xx">
As a precaution, check the server-side $ _POST["xx"] element. Whether the element contains the expected values.
Like this:
check whether the element has been filled in and does not contain only white characters.
And remove any white space before and after the number using trim()
$xx = trim($_POST["xx"]);
if(!empty($xx) && is_numeric($xx)) {
// if "if-condition" true
} else {
// if "if-condition" false
}
I have this message if it is empty
enter image description here
<!DOCTYPE html>
<html>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"], ENT_QUOTES, "utf-8"); ?>">
<label>x:</label><br>
<input type="number" name="xx" ><br>
<input type="submit" value="Submit">
</form>
<?php
$value = trim($_POST["xx"]);
if(!empty($value) && is_numeric($value)) {
$xxx = $_POST['xx'];
} else {
echo "vous devez taper des chiffres!";
}
echo $xxx . "<br />";
?>
</body>
</html>
It is not an answer this, I don't know how to add code in the comment.

PHP form reloads on submit, but resets variables

I've been tasked to create a guessing game. A random number is generated and the user tries to guess it. It tells you if you should try a larger or a smaller number, and eventually the user guesses the correct number.
<?php
session_start();
if(empty($_SESSION['num_to_guess'])) { $_SESSION['num_to_guess'] = mt_rand(1,99); }
if (!isset($_POST['guess'])) {
$message = "Welcome to the Odd Number Guessing Game!";
}
elseif (!is_numeric($_POST['guess'])) { //is not numeric
$message = "I don't understand that response. Please enter a number.";
}
elseif ($_POST['guess'] == $_SESSION['num_to_guess']) { //matches
$message = "Well done! You've found the secret number. Now try to guess another.";
$_SESSION['num_to_guess'] = mt_rand(1,99);
}
elseif ($_POST['guess'] < $_SESSION['num_to_guess']) { //greater
$message = "Try a larger number!";
}
elseif ($_POST['guess'] > $_SESSION['num_to_guess']) { //lesser
$message = "Try a smaller number!";
}
else {
$message = "I'm terribly confused.";
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Odd Number Guessing Machine!</title>
</head>
<body>
<h1><?php echo $message; ?>
<?php echo $_SESSION['num_to_guess']; ?>
</h1>
<form action = "<?php echo $_SERVER['PHP_SELF']; ?>" method = "POST">
<p><label for="guess">Try to guess an odd number between 1 and 99:</label> <br/>
<input type="text" id="guess" name="guess" /></p>
<button type="submit" name="submit" value="submit">Submit</button>
</form>
</body>
</html>
My problem is the form reloads every time the user submits the data, thereby changing the random number. I'm sure there is a workaround but I just can't seem to find it.
I want to generate a new number ONLY when the correct number is guessed. I tried adding rand() function on the elseif loop where the number is guessed correctly, but that doesn't work.
Please help. :)
Now browser compatible
<?php
session_start();
$url_of_page = $_SERVER['REQUEST_URI'];
if(!isset($_SESSION['correct_number'])){
// Create random number only when the previous one has been correctly guessed
$number_to_guess = rand(0,9);
$_SESSION['correct_number'] = $number_to_guess;
}
if(isset($_SESSION['correct_number'])){
$num_to_guess = $_SESSION['correct_number'];
}
if(isset($_POST['guess'])){
$guessed_number = trim($_POST['guess']);
$reg_exp = '/^([0-9]+)$/';
$reg_exp_match = preg_match($reg_exp,$guessed_number);
}
if(isset($_POST['submit'])){
if(isset($reg_exp_match)){
if(!$reg_exp_match){
$message = "Enter a number";
}else{
if($guessed_number < $num_to_guess){
// is small
$message = "Try a larger number!";
}elseif($guessed_number > $num_to_guess){
// is large
$message = "Try a smaller number!";
}elseif($guessed_number == $num_to_guess){
//matches
$message = "Well done...You got it";
$new_game = TRUE;
unset($_SESSION['correct_number']);
// A new number can now be created
}
}
}
}
?>
<!DOCTYPE html>
<html>
<head>
<title>Odd Number Guessing Machine!</title>
</head>
<body>
<h3>Welcome to the Guessing Machine!</h3>
<p>
<?php
if(isset($new_game) && ($new_game == TRUE)){ // The correct number
if(isset($message) && isset($url_of_page)){
echo $message . '. Start a new game';
}
}else{ // Not the correct number
if(isset($message)){ echo $message; }
}
?>
</p>
<form action="<?php if(isset($url_of_page)){ echo $url_of_page; } ?>" method="POST">
<p>
<label for="guess">Enter a number, 0 to 9:</label> <br/>
<input type="text" id="guess" name="guess" />
</p>
<button type="submit" name="submit" value="submit">Submit</button>
</form>
</body>
</html>

Why Can't I Pass a String?

I'm trying to get a quiz program to work in PHP. Up until now, I've had little problem getting any code I write to work. However, this time, I can't seem to get a string to pass to the next page of a form. The basic idea is a trivia program. A random question is retrieved, the user answers the question, the program checks to see if the answer is right. Eventually, the program will keep score, but I haven't got that far yet because I can't seem to check the answer against the question. I can't figure out where I'm going wrong.
If there's an answer to this, I'm sorry, I missed it. The only thing I saw said to use Javascript, which is beyond my current skillset. Thanks.
The Code:
<!DOCTYPE html>
<html lang="en-US">
<head>
<!--link-->
<meta charset="UTF-8" />
<title>Sports Trivia</title>
</head>
<body>
<form>
<?php>
extract($_REQUEST);
include("triviaQuestions.php");
//functions
//Display Next Question template provided by Dan Brekke
function nextQuestion($trivia,&$used)
{
do
$num = rand(0,count($trivia)-1);
while ($used[$num]);
$used[$num] = true;
reset($trivia);
for ($i = 0; $i < $num; $i++)
next($trivia);
return key($trivia);
}
function displayQuestion($trivia,$count,&$used,$question)
{
if ($count < count($trivia))
{
$questionNum = $count+1;
echo <<< HERE
<h3>Question $questionNum:</h3>
<h3>$question</h3>
HERE;
}
else
$question = "You've reached the endzone!";
}
function displayButtons()
{
echo <<< HERE
<p>
<input type="submit" name="button" value="Next Question" />
<input type="submit" name="button" value="Quit" />
</p>
HERE;
}
function passData($trivia,$count,$used)
{
echo "<input type='hidden' name='count' value='$count'>";
for ($i = 0; $i < count($trivia); $i++)
echo "<input type='hidden' name='used[$i]' value='$used[$i]'>";
}
if ($button == NULL || $button == "New Game")
{
//variables
$used = NULL;
$count = 0;
$correct = 0;
echo <<< HERE
<h1>Sports Trivia!</h1>
<h3>Welcome to Sports Trivia. Enter your name and click Play to begin!</h3>
<h3>Name:
<input type="text" name="name" autocomplete="off" autofocus="on">
</h3>
<input type="submit" name="button" value="Play" />
<input type="submit" name="button" value="Display Scores" />
<br /><br />
Back To Home
HERE;
//experimenting, since I don't know how this works
serialize($trivia);
serialize($used);
}
else
{
if ($button == "Play")
{
$question = nextQuestion($trivia,$used);
displayQuestion($trivia,$count,$used,$question);
echo <<< HERE
<input type="text" name="answer" autocomplete="off" autofocus="on" />
<p>
<input type="submit" name="button" value="Enter" />
</p>
HERE;
}
else if ($button == "Enter")
{
echo $question;
}
}
echo <<< HERE
<input type="hidden" name=$helloWorld />
HERE;
?>
</form>
</body>
</html>

(PHP) Adding a 'guess counter' to a random number game

I need to modify a block of code and add a counter regarding how many times it took the user to guess the right number.
I was wondering how it would be properly implemented into my code.
This is what I have so far.
<?php
if (!isset($_POST["guess"])) {
$message = "Welcome to the guessing machine!";
$count++; //Declare the variable $count to increment by 1.
$_POST["numtobeguessed"] = rand(0,1000);
} else if ($_POST["guess"] > $_POST["numtobeguessed"]) { //greater than
$message = $_POST["guess"]." is too big! Try a smaller number.";
} else if ($_POST["guess"] < $_POST["numtobeguessed"]) { //less than
$message = $_POST["guess"]." is too small! Try a larger number.";
} else { // must be equivalent
$message = "Well done! You guessed the right number in ".$count." attempt(s)!";
//Include the $count variable to the $message to show the user how many tries to took him.
}
?>
<html>
<head>
<title>A PHP number guessing script</title>
</head>
<body>
<h1><?php echo $message; ?></h1>
<form action="" method="POST">
<p><strong>Type your guess here:</strong>
<input type="text" name="guess"></p>
<input type="hidden" name="numtobeguessed"
value="<?php echo $_POST["numtobeguessed"]; ?>" ></p>
<p><input type="submit" value="Submit your guess"/></p>
</form>
</body>
</html>
You have to use PHP Sessions to keep track of the count.
All you have to do is initialize counter to 0 and have it increment when the user guesses a number
<?php
session_start();
if (!isset($_POST["guess"])) {
$_SESSION["count"] = 0; //Initialize count
$message = "Welcome to the guessing machine!";
$_POST["numtobeguessed"] = rand(0,1000);
echo $_POST["numtobeguessed"];
} else if ($_POST["guess"] > $_POST["numtobeguessed"]) { //greater than
$message = $_POST["guess"]." is too big! Try a smaller number.";
$_SESSION["count"]++; //Declare the variable $count to increment by 1.
} else if ($_POST["guess"] < $_POST["numtobeguessed"]) { //less than
$message = $_POST["guess"]." is too small! Try a larger number.";
$_SESSION["count"]++; //Declare the variable $count to increment by 1.
} else { // must be equivalent
$_SESSION["count"]++;
$message = "Well done! You guessed the right number in ".$_SESSION["count"]." attempt(s)!";
unset($_SESSION["count"]);
//Include the $count variable to the $message to show the user how many tries to took him.
}
?>
<html>
<head>
<title>A PHP number guessing script</title>
</head>
<body>
<h1><?php echo $message; ?></h1>
<form action="" method="POST">
<p><strong>Type your guess here:</strong>
<input type="text" name="guess"></p>
<input type="hidden" name="numtobeguessed"
value="<?php echo $_POST["numtobeguessed"]; ?>" ></p>
<p><input type="submit" value="Submit your guess"/></p>
</form>
</body>
</html>
This should work for you.
$count = isset($_POST['count']) ? $_POST['count'] : 0; //Use post value if defined. If not set to 1.
if (!isset($_POST["guess"])) {
$message = "Welcome to the guessing machine!";
$_POST["numtobeguessed"] = rand(0,1000);
} else if ($_POST["guess"] > $_POST["numtobeguessed"]) { //greater than
$message = $_POST["guess"]." is too big! Try a smaller number.";
} else if ($_POST["guess"] < $_POST["numtobeguessed"]) { //less than
$message = $_POST["guess"]." is too small! Try a larger number.";
} else { // must be equivalent
$message = "Well done! You guessed the right number in ".$count." attempt(s)!";
//Include the $count variable to the $message to show the user how many tries to took him.
}
$count++;
?>
<html>
<head>
<title>A PHP number guessing script</title>
</head>
<body>
<h1><?php echo $message; ?></h1>
<form action="" method="POST">
<p><strong>Type your guess here:</strong>
<input type="text" name="guess"></p>
<input type="hidden" name="numtobeguessed"
value="<?php echo $_POST["numtobeguessed"]; ?>" ></p>
<input type="hidden" name="count"
value="<?php echo $count; ?>" ></p>
<p><input type="submit" value="Submit your guess"/></p>
</form>
</body>
</html>
on 22.6.2021 i wrote a Guess Number in Range [0 .. aMaxIntValue] sample Web Application using PHP. i think the following code may help you. the code is kept in a Single PHP file. it generates #4 HTML pages ...
the 1st initial page is used to collect application parameters (e.g. the Max Int Number to Guess)
the 2nd page is the Main Play Game Page where the user is asked to Guess the Secret Number or to Reset Game. this page shows the previous user guesses and some tips for the user about the guess
the 3rd page is used to notify the user looses game (that is he has no more tries left)
the 4th page is used to notify the user wins the game (that is the Guess was OK)
the Number of Tries left to the User is computed using the values range [0 .. max]
the Secret Number to Guess is a random generated integer number
this is the PHP + HTML code ...
<?php
session_start();
error_reporting (E_PARSE | E_COMPILE_ERROR);
function ResetGame()
{
unset ( $_SESSION['theMaxNumber'] );
}
function InitGame()
{
$_SESSION['theNumberToGuess'] = mt_rand (0, $_SESSION['theMaxNumber']);
$_SESSION['theMaxNumberOfTries'] = floor ( log ($_SESSION['theMaxNumber'], 2) ) + 1;
$_SESSION['theUserTriesCount'] = 0;
$_SESSION['thePrevGuessesString'] = '';
$_SESSION['theUserGuess'] = 0;
}
function ComputeNumberOfTriesLeft()
{
return $_SESSION['theMaxNumberOfTries'] - $_SESSION['theUserTriesCount'];
}
function IsNoMoreTriesLeft()
{
return ComputeNumberOfTriesLeft() <= 0;
}
$aCanPlayGame = false;
$aUserSubmittedGuess = false;
$aIsNoMoreTriesLeft = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ( isset ($_REQUEST['playgame']) ) {
$_SESSION['theMaxNumber'] = intval($_REQUEST['theMaxNumber']);
// init game ...
InitGame();
$aCanPlayGame = true;
}
elseif ( isset ($_REQUEST['submituserguess']) ) {
$aCanPlayGame = true;
$aUserSubmittedGuess = true;
$_SESSION['theUserGuess'] = intval($_REQUEST['theUserGuess']);
}
elseif ( isset ($_REQUEST['resetgame']) ) {
ResetGame();
}
else {
ResetGame();
}
}
else {
ResetGame();
}
// check a play
$aUserShouldTryLower = false;
$aUserShouldTryHigher = false;
$aUserWins = false;
$aUserLooses = false;
if ($aCanPlayGame) {
$aIsNoMoreTriesLeft = IsNoMoreTriesLeft();
if ( ! $aIsNoMoreTriesLeft ) {
// user have tries left
if ($aUserSubmittedGuess) {
// check user guess ...
$aUserGuess = intval($_SESSION['theUserGuess']);
if ( $aUserGuess > $_SESSION['theNumberToGuess'] ) {
$aUserShouldTryLower = true;
}
elseif ( $aUserGuess < $_SESSION['theNumberToGuess'] ) {
$aUserShouldTryHigher = true;
}
else {
$aUserWins = true;
// also reset game
ResetGame();
}
// add the current guess to the prev guesses string
$_SESSION['thePrevGuessesString'] .= $_SESSION['theUserGuess'] . ' ';
// increase the user tries count
++ $_SESSION['theUserTriesCount'];
// check tries count
if ( ! $aUserWins ) {
$aIsNoMoreTriesLeft = IsNoMoreTriesLeft();
if ($aIsNoMoreTriesLeft) {
// this was the last try
// no more tries left
$aUserLooses = true;
// also reset game
ResetGame();
}
}
}
}
else {
// no more tries left
$aUserLooses = true;
// also reset game
ResetGame();
}
}
?>
<?php if ($aUserLooses): ?>
<!DOCTYPE html>
<html>
<head>
<title>Guess a Number</title>
</head>
<body>
<p>Sorry, you loose the game</p>
<p>the Number to Guess was <?php echo $_SESSION['theNumberToGuess']; ?></p>
<form method="post">
<input type="submit" name="resetgame" value="reset game">
</form>
</body>
</html>
<?php elseif ($aUserWins): ?>
<!DOCTYPE html>
<html>
<head>
<title>Guess a Number</title>
</head>
<body>
<p>Congrats, you Win the Game</p>
<p>the Number to Guess was <?php echo $_SESSION['theNumberToGuess']; ?></p>
<form method="post">
<input type="submit" name="resetgame" value="reset game">
</form>
</body>
</html>
<?php elseif ($aCanPlayGame): ?>
<!DOCTYPE html>
<html>
<head>
<title>Guess a Number</title>
</head>
<body>
<p>the Max Number is <?php echo $_SESSION['theMaxNumber']; ?></p>
<p>Guess a Number in the Range [ 0 .. <?php echo ($_SESSION['theMaxNumber']); ?> ]</p>
<p>[DEBUG] the secret number to guess is <?php echo $_SESSION['theNumberToGuess']; ?></p>
<p>you have <?php echo ComputeNumberOfTriesLeft(); ?> tries left</p>
<form method="post">
<label for="theUserGuess">Enter your Guess: </label>
<input type="text" id="theUserGuess" name="theUserGuess">
<input type="submit" name="submituserguess" value="Guess">
<input type="submit" name="resetgame" value="reset game">
</form>
<p>Prev Guesses: <?php echo $_SESSION['thePrevGuessesString']; ?> </p>
<p>
<?php
if ($aUserShouldTryLower) {
echo 'you should try a lower < guess';
}
elseif ($aUserShouldTryHigher) {
echo 'you should try a higher > guess';
}
else {
echo 'no guess';
}
?>
</p>
</body>
</html>
<?php else: ?>
<!DOCTYPE html>
<html>
<head>
<title>Guess a Number</title>
</head>
<body>
<p>Guess a Number from (0) to ... </p>
<form method="post">
<input id="theMaxNumber" name="theMaxNumber">
<input type="submit" name="playgame" value="play game">
</form>
</body>
</html>
<?php endif; ?>
that's all folks ...

Categories