PHP - Как я могу хранить переменные состояния?

1

Я изучаю php, и мне сложно найти ответы на это. Как сохранить переменную после отправки формы, которая должна снова вызвать страницу? (Странная формулировка?) Я пытаюсь сохранить $ num_to_guess и $ num_tries. Я следую инструкциям, которые, как я нашел, включают $ num_tries в качестве скрытого ввода в html-блок, но он по-прежнему не увеличивает его после отправки формы.

Как сохранить $ num_to_guess AND $ num_tries после отправки?


<?php
  if ( !isset ( $num_tries ) )
  {
    $num_to_guess = rand(1, 100);
  }
  $num_tries = ( isset ( $_POST['num_tries'] ) ) ? $num_tries + 1 : 0;
  if ( !isset ( $_POST['guess'] ) ) {
    $message = "Welcome to the guessing machine!";
  } elseif ( !is_numeric ( $_POST['guess'] ) ) {
    $message = "I don't understand that response...";
  } elseif ( $_POST['guess'] == $num_to_guess ) {
    $message = "Well done! That is the number!";
  } elseif ( $_POST['guess'] < $num_to_guess ) {
    $message = $_POST['guess'] . " is too small!";
  } elseif ( $_POST['guess'] > $num_to_guess ) {
    $message = $_POST['guess'] . " is too big!";
  } else {
    $message = "I am terribly confused...";
  }
?>

<!DOCTYPE html>
<html>
<head>
  <title>A PHP Number Guessing Script</title>
</head>

<body>
  <h2>The Guessing Game</h2>
  <p>1-100<br/>
    Guess number: <?php echo $num_tries ?></p>
  <h3><?php echo $message; echo $num_to_guess?></h3>
  <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" /></p>
    <input type="hidden" name="num_tries" value="<?php echo $num_tries; ?>"/>
    <button type="submit" name="submit" value="submit">Submit</button>
  </form>
</body>
</html>
Теги:

3 ответа

3
Лучший ответ

Вам нужно будет установить их для переменной сеанса, как это

session_start();
$_SESSION['guess'] = $num_to_guess;
$_SESSION['tries'] = $num_tries;

Затем, чтобы получить к ним доступ, вы сделали бы...

session_start();
$guess = $_SESSION['guess'];
$tries = $_SESSION['tries'];
1

Если я понимаю, о чем вы просите, тогда вы ищете $ _SESSION! $ _SESSION позволяет хранить переменные во время сеанса пользователя на веб-сайте. Сессии обычно устанавливаются в двадцать минут. Глобальная переменная $ _SESION в основном представляет собой ассоциативный массив ключей => значений, которые вы хотите сохранить для пользователя. Это должно помочь вам.

Взгляните сюда для получения дополнительной информации. Дайте ему прочитать. Это дает вам хорошее объяснение того, как работают сеансы, а также некоторые примеры.

  • 0
    Помимо $ _session / Cookies, у вас есть возможность кэширования / локального хранения с использованием JS, если вы используете хорошие клиентские приложения, такие как AngularJS или EmberJS. Тем не менее, управление сервером будет меньше. Но если вы хотите изменить / сохранить его на сервере или сохранить переменные на сервере, то лучше всего подойдут сессии или файлы журналов или дБ (в зависимости от количества данных). Есть много способов подойти к этому. Всего наилучшего. Дайте нам знать, правильно ли вы это реализовали или вам нужна дополнительная помощь.
1

Вам нужно использовать сеансы.

В первой строке вашего кода добавьте session_start, затем вы можете использовать супер-глобальную $ _SESSION для хранения и извлечения данных.

Первый запрос сеанса должен будет инициализировать переменные, последующие запросы могут их прочитать или обновить.

<?php

// Start the session before sending any output to the browser
// This sets a cookie value that identifies the session
session_start();

// This ensures that the number to guess is only set once
if (!isset($_SESSION['number_to_guess'])) {
    $number_to_guess = $_SESSION['number_to_guess'] = rand(0,100);
}

// This ensures the number of tries is properly initialized
if (!isset($_SESSION['guesses'])) {
    $_SESSION['guesses'] = 0;
} else {
    // Increment guesses
    $_SESSION['guesses']++;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню