начальное значение $_SESSION и избегать отрицательных значений

#php #session-variables

#php #сессия-переменные

Вопрос:

Целью скрипта является:

  1. Имейте счетчик, который начинается со значения 3 и уменьшает счетчик при каждой перезагрузке веб-браузера.
  2. Избегайте того, чтобы счетчик получал отрицательные значения, наименьшее допустимое значение $_SESSION должно быть [0] .

Вопросы:

  1. При запуске скрипта счетчик начинается с 2, почему?
  2. Первый блок кода в операторе if выполняет функцию непрерывной проверки, $_SESSION равно 0 или ниже 0 . Он останавливается только при достижении [-1] , почему он не останавливается на значении 0 .
 <?php
session_name();
session_start();

$count = $_SESSION["count"] ?? 3;

if($_SESSION["count"] >= 0) {
  $_SESSION["count"] = --$count;
} else {
  echo("<br><br>");
  echo("Value is lower then 0.");
}    
print_r($_SESSION);
  

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

1. Я считаю, что это потому, что вы предварительно уменьшаете вместо $count

2. Вы отправили значение count равным 3, а затем сразу уменьшили его на единицу при установке переменной сеанса.

3. @Dave итак, мне пришлось бы установить значение count равным 4, чтобы получить первое значение (для print_r в браузере) равным 3?

4. Это одно из решений, да.

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

Ответ №1:

Чтобы ответить на ваши вопросы:

  1. Оно начинается с 2, потому что на вашей первой итерации $_SESSION['count'] не установлено. Когда оно достигает $_SESSION["count"] = --$count; , $_SESSION['count'] устанавливается на 2 . Вы должны убедиться, что $_SESSION['count'] установлено.
  2. Вы должны изменить условие if на equal if($_SESSION["count"] > 0) , чтобы оно остановилось на 0 , а не на -1 .
 <?php
session_name();
session_start();
//unset($_SESSION["count"]);return;
if(!isset($_SESSION["count"])){
  $_SESSION["count"] = 3;
}
$count =$_SESSION["count"];

print_r("Count(1): {$_SESSION["count"]}");

if($_SESSION["count"] > 0) {
  $_SESSION["count"] = --$count;
} else {
  echo("<br><br>");
  echo("Value is lower then 0.");
}    

print_r("Count(2): {$_SESSION["count"]}");