Учитывая этот ввод: http://example.com/item.php?room=248&supply_id=18823 , следующие 2 блока должны дать тот же результат. Почему бы и нет? Что я пропущу, кроме кофе?
Этот блок дает ожидаемые значения:
if (isset($_GET['supply_id']) && isset($_GET['room'])) { $id=validkey($_GET['supply_id']); //18823 $room=validkey($_GET['room']); //248 $arr=array('s'=>$id,'r'=>$room); //s=>18823, r=>248 }
Но если я сделаю чек и задание за один шаг, $ id окажется равным 1 вместо 18823. Почему?
if (isset($_GET['supply_id']) && isset($_GET['room'])) { if($id=validkey($_GET['supply_id']) && $room=validkey($_GET['room'])) $arr=array('s'=>$id",'r'=>$room); //s=>1, r=>248 }
Это функция, которую я использую:
function validkey($value){ if(is_scalar($value)){ $value=(int)$value; return ($value>0) ? $value : false; } return false; }
Вы должны использовать круглые скобки:
if(($id=validkey($_GET['supply_id'])) && ($room=validkey($_GET['room'])))
В противном случае результат validkey($_GET['supply_id']) && $room=validkey($_GET['room'])
присваивается переменной $id
потому что оператор &&
имеет более высокий приоритет, чем =
Оператор &&
связывается сильнее, чем оператор =
.
Таким образом, ваш код в основном будет, if ($id = (validkey($_GET['supply_id']) && $room = validkey($_GET['room'])))
-> Добавить круглые скобки вокруг выражений $foo = $bar
в вашем выражении IF.
У вас, кажется, небольшая ошибка во втором примере – бродячая двойная цитата после $ id. Кроме того, ваш второй подход, как правило, не одобряется (присваивание переменных в конструкции if), поскольку он значительно затрудняет выполнение кода. Яснее будет следующее:
if (isset($_GET['supply_id']) && isset($_GET['room'])) { $id=validkey($_GET['supply_id']); //18823 $room=validkey($_GET['room']); //248 if($id && $room) { $arr=array('s'=>$id,'r'=>$room); //s=>18823, r=>248 } }