Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.09.2017, 20:02
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Запись GET в SESSION
Здравствуйте! Нужна помощь. Набросала скрипт, но уверена, что он некорректен:
if ($_SESSION['code'] === null){
   if($_GET['code'] === null){
   $_SESSION['code'] = '796';
  }
   elseif($_GET['code'] !== null){
   $_SESSION['code'] = $_GET['code'];
  }
}else{
$code = $_SESSION['code'];	
}

Суть - через GET-запрос, записываю параметр в сессию. Т.к. страница в определенный момент обновляется, но уже без GET, параметр передается уже через сессию. Как сделать код корректным? Помогите, пожалуйста.

Последний раз редактировалось Sonya, 26.09.2017 в 20:03. Причина: Уточнение
Ответить с цитированием
  #2 (permalink)  
Старый 26.09.2017, 20:31
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

$_GET - это суперглобалный массив, который всегда есть, но если не было запросов то пустой.

Если вывод предупреждений подавлен, то то к примеру $_GET['a'] вернет NULL, если такового запроса не было. А пустой массив возвращает false, и это даже не породит предупреждений:

if(!$_GET) массив пуст или наличие конкретной переменной в массиве при подавлении предупреждений - if(!$_GET['code']). Зачем же проверять заполнен ли массив или существование в нем ключа, то есть были GET запросы или нет, строгой проверкой да еще и на null? Что null, что false, что пустая строка вам вернет "ложь". А вот действительно проверка существования ключа в массиве, без проверки его значения, это if(!isset($_GET['code'])).

Тоже самое и с $_SESSION.

Последний раз редактировалось laimas, 26.09.2017 в 20:43.
Ответить с цитированием
  #3 (permalink)  
Старый 26.09.2017, 20:45
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Пробовала до этого кода именно if(isset($_GET['code'])) только без логического отрицания, там у меня с логикой были проблемы. Страница обновляется и при обновлении, GET не передается (такое условие), поэтому записываю в сессию, которая при обновлении остается.
Ответить с цитированием
  #4 (permalink)  
Старый 26.09.2017, 20:53
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Если я правильно понял, то нужно следующее:

if(isset($_GET['code']) && $code = (int)$_GET['code']) $_SESSION['code'] = $code;
$code = $_SESSION['code'] ?: 769;


Не помню в какой версии, но вот такое

$code = $_SESSION['code'] вызывало ошибку. В версиях начиная с 5 не наблюдал такого, хотя и не со всеми и работал, так что имейте ввиду если что.
Ответить с цитированием
  #5 (permalink)  
Старый 26.09.2017, 21:05
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Сообщение от laimas Посмотреть сообщение
$code = $_SESSION['code'] вызывало ошибку. В версиях начиная с 5 не наблюдал такого, хотя и не со всеми и работал, так что имейте ввиду если что.
Версия PHP 5.6.
При обновлении страницы уже не будет передан параметр GET, не передаст ли он NULL в сессию?
Ответить с цитированием
  #6 (permalink)  
Старый 26.09.2017, 21:10
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Sonya
не передаст ли он NULL в сессию?
Каким образом? Условие записи в сессию какое?

С учетом ранее сказанного, при подавлении предупреждений, сократим код вообще для одного условия записи в сессию:

if($code = (int)$_GET['code']) $_SESSION['code'] = $code; //если не было GET запроса, чему будет равно $code и выполнится ли это условие? 
$code = $_SESSION['code'] ?: 769;


Проверьте.
Ответить с цитированием
  #7 (permalink)  
Старый 26.09.2017, 21:17
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Хорошо, сейчас попробую.
Ответить с цитированием
  #8 (permalink)  
Старый 26.09.2017, 21:34
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 281

Работает! Спасибо. Тот код, что я показала в самом начале тоже срабатывал, но со второго раза. А этот работает превосходно. Сейчас попробую "прогнать" в разных вариациях.
Ответить с цитированием
  #9 (permalink)  
Старый 26.09.2017, 23:49
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

$code = 769;
if (false === empty($_GET['code'])) {
    $code = (int)$_GET['code'];
    $_SESSION['code'] = $code;
}
так более читабельное и без нотисов
Ответить с цитированием
  #10 (permalink)  
Старый 27.09.2017, 05:56
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от Poznakomlus
if (false === empty($_GET['code'])) {
$code = (int)$_GET['code'];
Ой ли так? )

Последний раз редактировалось laimas, 27.09.2017 в 06:22.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запись видео с экрана prog77 Библиотеки/Тулкиты/Фреймворки 5 10.02.2020 18:31
getUserMedia() как отследить последующие изменения разрешений на запись? Amateur Элементы интерфейса 0 20.10.2015 22:30
Store - просто удалить запись Infarch ExtJS 1 12.08.2014 17:46
Зачем нужна session_ destroy() ? jsuse Серверные языки и технологии 2 03.03.2012 08:19
Как сделать чтобы пользователь только мог 2 раза прослушать запись? KOTDG AJAX и COMET 0 11.02.2012 22:37