Тема: Перехід за посиланням з передачею параметрів по POST
Поставлене завдання щоб на сторінку можна було перейти лише за посиланням і при спробі перейти по URL в браузері отримувати повідомлення про помилку. Прийнято рішення передавати один із параметрів по POST.
На JavaScript створена функція передавання форми:
echo '
<script>
function url_post(url, name, value) {
let form = document.createElement("form");
form.action = url;
form.method = "POST";
form.innerHTML = \'<input name="\'+name+\'" value="\'+value+\'">\';
document.body.append(form);
form.submit();
return false;
}
</script>
';
На PHP підготовлена змінна і секретне ім'я сесії (сама змінна не секретна, а ім'я сесії не світиться):
$microtime = substr(str_replace(' ', '', microtime()), 2);
$_SESSION['form'.$microtime] = 'form';
В існуючий тег переходу за посиланням додано onclick для виклика функції:
echo '
<a href="admin.php?action=delete&id=*" onclick="return url_post(this.href, \'microtime\', \''.$microtime.'\');">видалити все</a>
';
На сторінці переходу робимо перевірку:
if((isset($_POST['microtime']) && !isset($_SESSION['form'.$_POST['microtime']])) || !isset($_POST['microtime'])) {
echo 'текст помилки';
} else {
echo 'текст сторінки';
}
if(isset($_POST['microtime'])) unset($_SESSION['form'.$_POST['microtime']]);
Мінімальні зміни в існуючому тегі <a> дають змогу перейти за посиланням з передачею параметра (можна змінити функцію і передавати кілька параметрів) по POST за допомогою динамічної форми.