Хорошо, ваш код никогда не будет работать.С учетом вашего запроса
/cart.php?Target=product&product_id=16142&category_id=249
ваш $ _GET будет заполнен следующим образом:
$_GET = array(
'Target' => 'product',
'product_id' => 16142,
'category_id' => 249
)
Затем вы будете использовать следующую структуру:
if(!empty($_GET['cat'])){
... stuff part 1...
}elseif($_GET['product']){
... stuff part 2...
- В вашем запросе нет параметра 'cat' (и, следовательно, также не будет в $ _GET), поэтому empty () возвращает true, отрицается, и, следовательно, "stuff part 1" никогда не выполняется.
- Тамне является параметром 'product' в вашем запросе (и, следовательно, также не будет в $ _GET), поэтому elseif имеет значение false и поэтому также не выполняет раздел 'stuff part 2'.
Что касается вашего комментария о перезаписи переменных $ _GET, вы просто присваиваете ему новое значение.Но это неправильный путь.$ _GET (и его двоюродные братья $ _POST и $ _REQUEST) никогда не должны быть перезаписаны.Они ДОЛЖНЫ рассматриваться как массивы только для чтения.
В вашем приложении это может быть нормально, но учтите, что GET / POST / REQUEST - не единственные места, где можно получить данные.Возможно, какой-то модуль / библиотека, которую вы используете, имеет доступ HTTP_QUERY_VARS
(что устарело) или $_SERVER['QUERY_STRING']
или _$SERVER['REQUEST_URI']
.Все они в основном содержат одинаковую информацию, но хранятся отдельно внутри PHP.Если вы измените $ _GET, а затем библиотека извлечет свои собственные копии переменных запроса из одного из альтернативных местоположений, она получит нечто совершенно отличное от значения, которое вы только что переписали, потому что вы перезаписали его только в одном месте.Помните, что эти волшебные массивы создаются PHP до того, как ваш код будет выполнен, и затем внутренняя часть PHP никогда больше не затрагивает их.Попробуйте следующее:
testscript.php? Yo = dude:
<?
echo '<pre>';
echo "Before:\n";
echo "GET yo: ", $_GET['yo'], "\n";
echo "REQUEST yo: ", $_REQUEST['yo'], "\n";
$_GET['yo'] = "haha, it's not the same anymore";
echo "after:\n";
echo "GET yo: ", $_GET['yo'], "\n";
echo "REQUEST yo: ", $_REQUEST['yo'], "\n";
поместите его в скрипт, запустите его в браузере.Вот что вы получите:
Before:
GET yo: dude
REQUEST yo: dude
after:
GET yo: haha, it's not the same anymore
REQUEST yo: dude
Обратите внимание, что _REQUEST не обновлялся автоматически с вашим новым значением.Теперь у вас есть противоречивые данные, и это может полностью сломать ваше приложение.