#php #session-variables
#php #сессия-переменные
Вопрос:
Целью скрипта является:
- Имейте счетчик, который начинается со значения 3 и уменьшает счетчик при каждой перезагрузке веб-браузера.
- Избегайте того, чтобы счетчик получал отрицательные значения, наименьшее допустимое значение
$_SESSION
должно быть[0]
.
Вопросы:
- При запуске скрипта счетчик начинается с 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:
Чтобы ответить на ваши вопросы:
- Оно начинается с 2, потому что на вашей первой итерации
$_SESSION['count']
не установлено. Когда оно достигает$_SESSION["count"] = --$count;
,$_SESSION['count']
устанавливается на2
. Вы должны убедиться, что$_SESSION['count']
установлено. - Вы должны изменить условие 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"]}");