Saviredirektavimas su parametrų pridėjimu PHP
Tegul puslapyje index.php perduodamas
GET parametras su pavadinimu arg.
Atvaizduokime jo turinį ekrane:
<?php
echo $_GET['arg'];
?>
Tegul mūsų puslapis be GET parametro
negali veikti korektiškai. Mūsų atveju
tai iš tiesų taip, nes, jei parametras
neperduotas, tai kreipimasis į $_GET['arg']
sukels klaidą.
Gali kilti klausimas, kodėl apskritai žmogus pateks į mūsų puslapį be parametro? Juk mes galime visur mūsų svetainėje dėti nuorodas su šiuo parametru. Tačiau, tai nėra garantija: mūsų svetainės naudotojas gali, pavyzdžiui, kopijuoti iš kažkur nuorodą ir prarasti tuo pačiu parametrą. Arba tiesiog atsitiktinai jį ištrinti, redaguodamas adreso eilutę.
Bet kuriuo atveju mūsų kodas turėtų numatyti tokią situaciją ir ką nors su ja daryti. Ką galima padaryti?
Galima patikrinti mūsų GET parametro egzistavimą ir jį atvaizduoti, tik jei jis egzistuoja:
<?php
if (isset($_GET['arg'])) {
echo $_GET['arg'];
} else {
// kažkaip reaguojame, pavyzdžiui, pranešimu
}
?>
Galima elgtis gudriau:
<?php
if (!isset($_GET['arg'])) {
$_GET['arg'] = 'default'; // numatytoji reikšmė
}
echo $_GET['arg']; // garantuotai ką nors atvaizduos be klaidos
?>
O galima padaryti taip, kad patekus į puslapį be parametro, įvyktų redirektas į tą patį puslapį su parametru:
<?php
if (!isset($_GET['arg'])) {
header('Location: ?arg=default');
}
echo $_GET['arg']; // parametras garantuotai yra
?>
Paaiškinkite, kuo skiriasi antrasis variantas nuo trečiojo.
Tegul puslapyje page.php galima perduoti
skaičių naudojant GET parametrą su pavadinimu
num. Padarykite taip, kad patekus
be šio parametro, automatiškai būtų atliktas
redirektas į tą patį puslapį, bet su parametru
num reikšmėje 1.