Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > $_SESSION и $_GET


Автор: Serebrus 12.11.2008, 09:03
Привет друзья.

Код:
Код

if(isset($_GET['ord_fld']))
{
 $_SESSION['ofld']=$_GET['ord_fld']; //имя поля сортировки (ORDER BY ...)
 $_SESSION['otyp']=$_GET['ord_typ']; //тип сортировки (ASC или DESC)
}
else
{
 $_SESSION['ofld']='id'; //по умолчанию
 $_SESSION['otyp']='ASC'; //по умолчанию
}


($_GET['ord_fld'] и $_GET['ord_typ'] отправляются одновременно)

Проблема в том что при отправке других переменных $_SESSION['ofld'] берет значение по умолчанию так как $_GET['ord_fld'] является null при отпраке других переменных, я использовал сессию для того чтобы сохранить или отправленное значение поля сортировки, илиже значение по умолчанию при отправке любой иной перемнной.

Как мне изменить код? smile

Автор: Sidious 12.11.2008, 09:52
Код

if(isset($_GET['ord_fld']) || isset($_GET['ord_typ']))
{
    $_SESSION['ofld']= isset($_GET['ord_fld']) ? $_GET['ord_fld'] : 'id'; //имя поля сортировки (ORDER BY ...)
    $_SESSION['otyp']=isset($_GET['ord_typ']) ? $_GET['ord_typ'] : 'ASC'; //тип сортировки (ASC или DESC)
}

Автор: Serebrus 12.11.2008, 10:24
Sidious, я не понил вашу логику: почему дважды проверять isset($_GET['ord_fld']) и isset($_GET['ord_typ']) и потом, здесь оба переменные сессии не будут иметь значение при возвращении false при первом проверке:

Цитата(Sidious @  12.11.2008,  09:52 Найти цитируемый пост)
if(isset($_GET['ord_fld']) || isset($_GET['ord_typ']))


Если я не ошибся, в коде нет ответа на мой вопрос.

Автор: Валерия 12.11.2008, 13:48
Код

if(isset($_GET['ord_fld']) and isset($_GET['ord_typ']))
{
 $_SESSION['ofld']=$_GET['ord_fld']; //имя поля сортировки (ORDER BY ...)
 $_SESSION['otyp']=$_GET['ord_typ']; //тип сортировки (ASC или DESC)
}

if (!isset($_SESSION['ofld']) and !isset($_SESSION['otyp']))
{
 $_SESSION['ofld']='id'; //по умолчанию
 $_SESSION['otyp']='ASC'; //по умолчанию
}

Автор: krundetz 12.11.2008, 14:02
Валерия, я иногда не понимаю вас. то вы предлагаете сокращать код до минимума, то нагромождаете совершенно не нужных конструкций.

Serebrus, следующих двух строчек вполне достаточно
Код

$_SESSION['ofld']= isset($_GET['ord_fld']) ? $_GET['ord_fld'] : 'id'; //имя поля сортировки (ORDER BY ...)
$_SESSION['otyp']=isset($_GET['ord_typ']) ? $_GET['ord_typ'] : 'ASC'; //тип сортировки (ASC или DESC)

 

Автор: Валерия 12.11.2008, 14:57
krundetz, смотрим логику работы ваших строчек. Одной. Первой допустим smile
Если $_GET['ord_fld'] установлена, то присваиваем её значение переменной $_SESSION['ofld']
Если $_GET['ord_typ'] не установлена, то присваиваем переменной $_SESSION['ofld'] значение 'id'
А если $_GET['ord_typ'] не установлена, но $_SESSION['ofld'] уже была установлена до этого, со значением допустим 'name' ?
Правильно, переменная $_SESSION['ofld'] перезапишется и будет сново 'id', а автору нужно что-бы сортировка запоминалась.

Добавлено через 51 секунду
Цитата(krundetz @  12.11.2008,  14:02 Найти цитируемый пост)
я иногда не понимаю вас. то вы предлагаете сокращать код до минимума, то нагромождаете совершенно не нужных конструкций.

Вообще я за то что бы сокращать код до минимума, после того как работает скрипт с "совершенно не нужными конструкциями" но правильно.

Автор: Serebrus 13.11.2008, 07:35
Валерия, большое вам спасибо, это то что надо.
Примите +2.

Автор: krundetz 13.11.2008, 09:17
Валерия, да чет я неправильно понял задачу. Как вам такой вариант?

Код

$_SESSION['ofld'] = isset($_GET['ord_fld']) && !isset($_SESSION['ofld']) ? $_GET['ord_fld'] : 'id'; //имя поля сортировки (ORDER BY ...)
$_SESSION['otyp'] = isset($_GET['ord_typ']) && !isset($_SESSION['otyp']) ? $_GET['ord_typ'] : 'ASC'; //тип сортировки (ASC или DESC)
.

Автор: Валерия 13.11.2008, 14:30
Цитата(krundetz @  13.11.2008,  09:17 Найти цитируемый пост)
Валерия, да чет я неправильно понял задачу. Как вам такой вариант?

Да, это уже то smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)