Как остановить сброс переменной после отправки формы?

#php #forms #session #variables #submit

#php #формы #сессия #переменные #Отправить

Вопрос:

Я работаю над проектом, и я застрял с этой проблемой: у меня есть переменная с именем $category , которая, если она равна нулю или пуста, имеет значение 1. После отправки формы, $category , так что она становится 2. Хорошо, но при третьей отправке она не становится 3. Я проверил, что происходит, и обнаружил, что на самом деле после каждой отправки $category становится 1 из-за первой строки кода, в которой говорится, что если оно равно null или empty, оно становится 1. Позвольте мне показать вам код, чтобы понять, о чем я говорю! Заранее спасибо за помощь! 🙂

 session_start();

include_once('db.php');

$cat_SQL = 'SELECT * FROM categories ORDER BY id';
$cat_RESULT = mysql_query($cat_SQL, $conn);
$cat_ROWS = mysql_fetch_assoc($cat_RESULT);
$cat_ROWS_number = mysql_num_rows($cat_RESULT);

if (is_null($category) || empty($category)) {
    $category = 1;
}

if (isset($category)) {
    if ($category < $cat_ROWS_number) {
        $category = $category   1; echo $category;
    }
}
 

Итак, если я повторяю категорию каждый раз при загрузке страницы, у меня будет что-то вроде этого:

При первом входе на страницу: категория пуста, поэтому она становится 1 => $ category = 1 После 1-й ОТПРАВКИ $ category = $category 1 => $ category = 2 После 2-й ОТПРАВКИ $ category = $ category 1 => $ category = 2 (все еще 2 вместо того, чтобы становиться 3)и так далее … :(КАК Я МОГУ ЗАПРЕТИТЬ $category становиться ‘1’ каждый раз, когда страница перезагружается / отправляется, и вместо этого становится новым значением (за сеанс)?


Так что в конце концов мне удалось сделать это до того, как я увидел ваши ответы (не хвастаюсь, но рад, что сам нашел ответ :)))

 if (!isset($_SESSION['category'])) {
  $_SESSION['category'] = 1;
  $category = $_SESSION['category'];
}
else {
      if($_SESSION['category'] < $cat_ROWS_number) {
          $_SESSION['category']  ;
          $category = $_SESSION['category'];
      }
}
 

Тем не менее, спасибо вам всем за ваши быстрые ответы!!! 🙂

Ответ №1:

Один из способов сделать это — поместить $category внутри переменной сеанса. После session_start , но перед if (is_null($category) || empty($category)) тем, как вы поместите:

 if(isset($_SESSION['category']))
    $category = $_SESSION['category'];
 

А затем после $category = $category 1; того, как вы поместите:

 $_SESSION['category'] = $category;
 

Это должно сработать.

Комментарии:

1. Большое спасибо! 🙂 это именно то, что я использовал в конце концов, а затем, когда я увидел ваш ответ, я понял, что сделал все возможное с session. в любом случае, спасибо! 😉

2. нет проблем 🙂 Никогда не помешает помочь. Сеансы идеально подходят для такого рода вещей. Спасибо, что отметили мой ответ как решение!

Ответ №2:

Или добавьте скрытое поле в свою форму, куда вы вводите текущее количество категорий.

Комментарии:

1. «они» хотели, чтобы я делал это без скрытых полей. потому что это то, что я использовал первым :))

2. Но вы должны сказать «им» с помощью решения сеанса, что когда вы вернетесь на страницу, вы, возможно, начнете с категории № 123 из-за вашего последнего посещения :-))

3. По умолчанию сеансы истекают примерно через полчаса. «Решение» скрытого ввода имеет тот недостаток, что сайт забывает текущую категорию при переключении экранов.