Як отримати результат обробки форми на тій же сторінці, що і форма stack overflow російською
Дивно, але за два дні ніхто так і не зміг дати правильну відповідь.
Втім, цьому є пояснення - оскільки питання спочатку містить в собі протиріччя, то щоб на нього відповісти, його треба спочатку уважно розібрати і виправити неузгодженості.
Три базових правила при роботі з протоколом НТТР
- Запит інформації для показу завжди робиться методом GET.
- Запит, який відправляє інформацію на сервер, змінюючи його стан, завжди робиться методом POST.
- Після запиту, відправленого методом POST, сервер завжди перенаправляє клієнта на будь-яку сторінку методом GET.
Як можна побачити, вихідний питання суперечить вищенаведеним правилам, і не повинен бути заданий в такій формі. Спробуємо його виправити.
Оскільки в поточному своєму вигляді код не виглядає робить що-небудь осмислене, ми не можемо однозначно судити про його призначення. Тому спробуємо розібрати всі варіанти його осмисленого застосування.
Варіант 1. Лотерея.
Судячи з назви БД, ми можемо припустити, що цей код є показ результатів в якійсь лотереї. Користувач вводить ім'я і прізвище, а йому виводяться результати.
Звірившись з вищенаведеними правилами ми можемо визначити, що у нас варіант №1 - запит даних з сервера без зміни його стану. Тобто, форма повинна відправлятися методом GET, причому відразу на головну. (Як наслідок ви можемо відзначити, що відповідь, що пропонує редирект, є абсолютно безглуздим в контексті даного завдання.)
Але тепер виникає інше питання - як нам одружити головну сторінку, на яку приходить запит, і обробник запиту, який лежить в окремому файлі. Варіант тупо переписати код обробника годиться в якості милиці, але в реальному житті так ніхто не робить - головна дуже швидко перетвориться на смітник, в якій сам чорт ногу зломить. А ось розносити різний функціонал по різних файлах - ідея дуже здорова! Так що нам би треба і код в окремому файлі зберегти, і результат на головній відобразити. І тут нам на допомогу приходить оператор include. Робимо так:
і далі вже нехай окремий скрипт робить те що йому треба.
- Запис persons_id в сесію.
- Перенаправлення на головну за допомогою НТТР заголовка Location: і функції header ().
- На головній ми з сесії Новомосковської persons_id і визначаємо користувача. Далше ми можемо вивести його id.