Мне нужно получить последнее непустое значение, которое $_GET['id_item']
было
session_start(); if(!isset($_SESSION['id_item']) || $_SESSION['id_item']==='' || ( isset($_GET['id_item']) && !$_GET['id_item'] === '' )){ $_SESSION['id_item'] = $_GET['id_item']; }else{ /*no need to update*/ } echo $_SESSION['id_item'] /* Allways in blank :S */
И var_dump($_GET)
:
array(1) { ["id_item"]=> string(2) "50" }
Любая идея, почему $_SESSION
не сохраняется?
почини это:
$_SESSION['id_item']==''
to $_SESSION['id_item']===''
или вы можете использовать:
empty($_SESSION['id_item'])
если вы не ожидаете, что (действительный) ID будет 0
вы можете уменьшить !isset($_SESSION['id_item']) || $_SESSION['id_item']===''
!isset($_SESSION['id_item']) || $_SESSION['id_item']===''
для empty($_SESSION['id_item'])
. !$_GET['id_item'] === ''
всегда false, так как это означает false === ''
. Вероятно, вы искали $_GET['id_item'] !== ''
. Опять же, если 0
не является допустимым значением, вы можете пойти для !empty($_GET['id_item'])
здесь.
Тем не менее, целое !isset($_SESSION['id_item']) || $_SESSION['id_item']===''
!isset($_SESSION['id_item']) || $_SESSION['id_item']===''
часть условия не имеет большого смысла. Вторая часть «если присутствует _GET id_item present» всегда необходима для тела условия ( $_SESSION['id_item'] = $_GET['id_item'];
) для работы. Таким образом, вы можете уменьшить свое состояние до
<?php if (!empty($_GET['id_item'])) { // import new id_item $_SESSION['id_item'] = $_GET['id_item']; } elseif (!isset($_SESSION['id_item'])) { // make sure we don't run into an undefined array index notice $_SESSION['id_item'] = null; } var_dump($_SESSION['id_item]);
Вы start_session
что-либо до start_session
. Если это так, он не сможет отправить файл cookie. Вероятно, поэтому он не работает.