GET запросы и редирект в PHP

При редиректе можно также передавать GET параметры:

<?php header('Location: test.php?arg=1'); ?>

Пусть на странице index.php можно передать GET параметр с именем success. Сделайте так, чтобы при наличии такого параметра, на страницу выводилось сообщение об успехе операции.

Сделайте теперь страницу action.php. Пусть при заходе на эту страницу выполняется редирект на страницу index.php из предыдущей задачи. При редиректе передайте в GET параметре success значение 1.

Саморедирект с добавлением параметра

Пусть на странице index.php передается GET параметр с именем arg. Выведем его содержимое на экран:

<?php echo $_GET['arg']; ?>

Пусть наша страница без GET параметра не может работать корректно. В нашем случае это действительно так, так как, если параметр не передан, то обращение к $_GET['arg'] приведет к ошибке.

Может возникнуть вопрос, почему вообще человек попадет на нашу страницу без параметра? Ведь мы можем везде на нашем сайте ставить ссылки с этим параметром. Однако, это не гарантия: юзер нашего сайта может, к примеру, копировать откуда-нибудь ссылку и потерять при этом параметр. Либо просто случайно его удалить, редактируя адресную строку.

В общем, в любом случае наш код должен предполагать такую ситуацию и что-то с ней сделать. Что же можно сделать?

Можно проверять наш GET параметр на существование и выводить его, только если он существует:

<?php if (isset($_GET['arg'])) { echo $_GET['arg']; } else { // как-то реагируем, например, сообщением } ?>

Можно поступить хитрее:

<?php if (!isset($_GET['arg'])) { $_GET['arg'] = 'default'; // значение по умолчанию } echo $_GET['arg']; // гарантировано что-то выведет без ошибки ?>

А можно сделать так, чтобы при заходе на страницу без параметра происходил редирект на эту же страницу с параметром:

<?php if (!isset($_GET['arg'])) { header('Location: ?arg=default'); } echo $_GET['arg']; // параметр гарантированно есть ?>

Расскажите, в чем отличие второго варианта от третьего.

Пусть на странице page.php можно передать число с помощью GET параметра с именем num. Сделайте так, чтобы при заходе без данного параметра, автоматически выполнялся редирект на эту же страницу, но с параметром num в значении 1.