Auto-redirecționare cu adăugarea de parametri în PHP

Să presupunem că pe pagina index.php este transmis un parametru GET cu numele arg. Să-i afișăm conținutul pe ecran:

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

Să presupunem că pagina noastră nu poate funcționa corect fără parametrul GET. În cazul nostru, acest lucru este într-adevăr adevărat, deoarece, dacă parametrul nu este transmis, atunci accesarea lui $_GET['arg'] va duce la o eroare.

Poate apărea întrebarea, de ce ar ajunge o persoană pe pagina noastră fără parametru? Până la urmă, noi putem pune peste tot pe site-ul nostru linkuri cu acest parametru. Cu toate acestea, aceasta nu este o garanție: utilizatorul site-ului nostru poate, de exemplu, să copieze linkul de undeva și să-l piardă pe acesta parametrul. Sau pur și simplu să-l șteargă accidental, editând bara de adrese.

În general, în orice caz, codul nostru ar trebui să anticipeze o astfel de situație și să facă ceva în legătură cu ea. Ce putem face?

Putem verifica dacă parametrul nostru GET există și să-l afișăm doar dacă acesta există:

index.php<?php
  if (isset($_GET['arg'])) {
    echo $_GET['arg'];
  } else {
    // reacționăm cumva, de exemplu, cu un mesaj
  }
?>

Putem proceda mai inteligent:

index.php<?php
  if (!isset($_GET['arg'])) {
    $_GET['arg'] = 'default'; // valoare implicită
  }
  
  echo $_GET['arg']; // garantează că va afișa ceva fără eroare
?>

Sau putem face astfel încât, la accesarea paginii fără parametru, să se producă o redirecționare către aceeași pagină cu parametrul:

index.php<?php
  if (!isset($_GET['arg'])) {
    header('Location: ?arg=default');
  }
  
  echo $_GET['arg']; // parametrul este garantat prezent
?>
Задание 1

Explicați care este diferența dintre a doua variantă și a treia.

Задание 2

Să presupunem că pe pagina page.php se poate transmite un număr cu ajutorul parametrului GET cu numele num. Faceți astfel încât, la accesarea fără acest parametru, să se execute automat o redirecționare către aceeași pagină, dar cu parametrul num cu valoarea 1.