Попытка заставить его пройти через 3 раза и после 3-го раза (если не догадаться) показать правильный ответ.
В настоящее время – он просматривает догадки, но не показывает, сколько догадок осталось (следует вычесть каждую @ каждой попытки).
Кто угодно? Если бы вы могли показать мне, где я ошибаюсь.
<style type="text/css"> input {border:1px solid #ADD8E6; font-size:1.2em;} input.spec {background-color:#ddd;} </style> <?php echo "<fieldset><h1><legend>Testing your Academy Award Trivia</h1>"; $ages['Casablanca'] = "1943"; $ages['Around The World in 80 Days'] = "1956"; $ages['Patton'] = "1970"; $ages['Annie Hall'] = "1977"; $ages['Chariots of Fire'] = "1981"; $ages['Dances With Wolves'] = "1990"; $ages['Crash'] = "2005"; $ages['The Departed'] = "2006"; $rand_keys = array_rand($ages, 1); $guesses = 3; ?> <form method='post' name="inputyear" onsubmit="return validate(this);"> Give the year below won academy award<br><br> <Strong>Movie:</strong> <input type='text' name='movie' class="spec" value='<?= $rand_keys ?>' readonly='readonly' /><br><br> <Strong>Year it Won the Oscar:</Strong> <input type='text' name='year' size="30" /><br/><br> <strong>You have: </strong> <?php $guesses; ?> guesses left<br><br> <input type='submit' name='submit' value="Get Result" onClick="makeGuess()" /> </form> <?php $movie = isset($_POST['movie']) ? $_POST['movie'] : false; $guessedYear = isset($_POST['year']) ? (int) $_POST['year'] : false; if ($movie && $guessedYear) { $realyear = $ages[$movie]; } @$_SESSION[$movie]['$guesses']++; if ($realyear && $_SESSION[$movie]['$guesses'] < 3) { if ($guessedYear == $realyear) { echo "Correct! " . "during year " . $realyear; } if ($guessedYear < $realyear) { echo "Wrong, year too low"; $guesses--; } if ($guessedYear > $realyear) { echo "Wrong, year too high"; $guesses--; } } elseif ($_SESSION[$movie]['$guesses'] >= 3) { echo "Sorry, too many tries. the answer was " . $realyear; } else { echo "Sorry, You managed not to pick a year. Please try again"; $_SESSION[$movie]['guesscount']--; } ?>
Я думаю, что проблема – это строка $rand_keys = array_rand($ages, 1);
, Каждый раз, когда пользователь отправляет ответ, в $rand_keys
выбирается и вводится новый $rand_keys
независимо от того, что был представлен ответом.
Таким образом, вы захотите проверить, существует ли ответ (в противном случае это первый раз, когда страница загружается). Если есть ответ, и это было правильно, тогда покажите сообщение congrats и создайте новый идентификатор фильма.
if($_POST['submit']) { $movie = $_POST['movie']; $guessedYear = $_POST['year']; if ($guessedYear == $ages[$movie]) { // well done you got it right, next movie $rand_keys = array_rand($ages, 1); } else if ($guessedYear == $ages[$movie] && $_POST['tries'] >= 3) { // took over 3 tries and didn't get it right, next movie $rand_keys = array_rand($ages, 1); } else { // find $movie index from $ages and use that } // you have one less try $tries = $_POST['tries'] - 1; } else { $rand_keys = array_rand($ages, 1); $tries = 3; }
Затем в форме отправьте переменную $tries
вместе с другими, или, как говорили другие люди, введите ее в переменные сеанса. С этим я думаю, что вы должны полностью удалить цикл while.
оператор return покидает цикл и скрипт
избавиться от обоих операторов return
ОКРУГ КОЛУМБИЯ
В дополнение к вашим комментариям по дублирующему вопросу … Разрешить 3 попытки игры – php
Казалось бы, этот вопрос является «домашним заданием» как таковым, и на самом деле со всеми вопросами никто не даст вам полного ответа, и, на мой взгляд, должен ли он. Мы все ожидаем, что человек, задающий вопрос, возьмет на себя ответственность за расследование и понимание ответов.
Теперь, в случае вашего вопроса, вам кажется, что отсутствует основная информация о том, как работает HTTP (http – это протокол, который управляет всеми веб-страницами и многими другими частями Интернета).
http – это то, что считается протоколом без сохранения состояния, то есть когда вы нажимаете на ссылку на веб-странице и переходите на другую веб-страницу (или даже на одну и ту же веб-страницу), новая веб-страница рассматривает вас совершенно нового посетителя. Он по сути забыл вас.
Потому что были введены проблемы для таких вещей, как корзины покупок (и игры PHP). это позволило браузеру нести вокруг вас немного информации о вас, таким образом, веб-сервер или приложение запомнили вас. Это было распространено на то, что респонденты здесь называют сессиями.
Сеанс (обычно) – это файл cookie, в котором хранится идентификатор. этот идентификатор сообщает в этом случае PHP, что вы были там до и где находить информацию о вас. PHP может загрузить эту информацию и сделать ее доступной для вас программистом.
Это происходит каждый раз, когда загружается страница.
Теперь PHP не знает, что хранить в этой «сессии», это зависит от вас, программист, чтобы решить, какую информацию нужно хранить. вам нужно сообщить PHP, чтобы сохранить эту информацию в следующий раз, когда страница загружена.
В вашем случае вам решать, что нужно запомнить. Рассмотрим перезагрузку страницы как новую «итерацию» цикла. это должно привести к некоторым очевидным выводам о том, что нужно перевести с одной итерации на другую.
Вот так. Я не написал для вас ответ, но, надеюсь, предоставил достаточно для того, чтобы вы прошли свой класс в ярких цветах.
ОКРУГ КОЛУМБИЯ
После того, как вы исправите то, что говорит DeveloperChris, вам все равно нужно убрать догадку в поле сеанса или формы и прирастить при каждой попытке.
if($guesscount < 3 && $guessedYear > $realyear){ echo "Wrong, year too high"; } if($guesscount < 3 && $guessedYear > $realyear){ echo "Wrong, year too high"; }
дублирующий код. также я думаю, что вы ищете, если {…} else if {..} else if {…} else {…}
и ваш вопрос не имеет ничего общего с javascript.
возможно, основная логика больше похожа на это?
$movie = isset($_POST['movie']) ? $_POST['movie'] : false; $guessedYear = isset($_POST['year']) ? (int) $_POST['year'] : false; if ($movie && $guessedYear) { $realyear = $ages[$movie]; } @$_SESSION[$movie]['guesscount']++; if ($realyear && $_SESSION[$movie]['guesscount'] < 3) { if ($guessedYear == $realyear) { echo "Correct! " . "during year " . $realyear; } if ($guessedYear < $realyear) { echo "Wrong, year too low"; } if ($guessedYear > $realyear) { echo "Wrong, year too high"; } } elseif ($_SESSION[$movie]['guesscount'] >= 3) { echo "Sorry, too many tries. the answer was " . $realyear; } else { echo "Sorry, You managed not to pick a year. Please try again"; $_SESSION[$movie]['guesscount']--; }