Як отримати результат обробки форми на тій же сторінці, що і форма stack overflow російською

Дивно, але за два дні ніхто так і не зміг дати правильну відповідь.
Втім, цьому є пояснення - оскільки питання спочатку містить в собі протиріччя, то щоб на нього відповісти, його треба спочатку уважно розібрати і виправити неузгодженості.

Три базових правила при роботі з протоколом НТТР

  1. Запит інформації для показу завжди робиться методом GET.
  2. Запит, який відправляє інформацію на сервер, змінюючи його стан, завжди робиться методом POST.
  3. Після запиту, відправленого методом POST, сервер завжди перенаправляє клієнта на будь-яку сторінку методом GET.

Як можна побачити, вихідний питання суперечить вищенаведеним правилам, і не повинен бути заданий в такій формі. Спробуємо його виправити.

Оскільки в поточному своєму вигляді код не виглядає робить що-небудь осмислене, ми не можемо однозначно судити про його призначення. Тому спробуємо розібрати всі варіанти його осмисленого застосування.

Варіант 1. Лотерея.

Судячи з назви БД, ми можемо припустити, що цей код є показ результатів в якійсь лотереї. Користувач вводить ім'я і прізвище, а йому виводяться результати.
Звірившись з вищенаведеними правилами ми можемо визначити, що у нас варіант №1 - запит даних з сервера без зміни його стану. Тобто, форма повинна відправлятися методом GET, причому відразу на головну. (Як наслідок ви можемо відзначити, що відповідь, що пропонує редирект, є абсолютно безглуздим в контексті даного завдання.)

Але тепер виникає інше питання - як нам одружити головну сторінку, на яку приходить запит, і обробник запиту, який лежить в окремому файлі. Варіант тупо переписати код обробника годиться в якості милиці, але в реальному житті так ніхто не робить - головна дуже швидко перетвориться на смітник, в якій сам чорт ногу зломить. А ось розносити різний функціонал по різних файлах - ідея дуже здорова! Так що нам би треба і код в окремому файлі зберегти, і результат на головній відобразити. І тут нам на допомогу приходить оператор include. Робимо так:

і далі вже нехай окремий скрипт робить те що йому треба.

  1. Запис persons_id в сесію.
  2. Перенаправлення на головну за допомогою НТТР заголовка Location: і функції header ().
  3. На головній ми з сесії Новомосковської persons_id і визначаємо користувача. Далше ми можемо вивести його id.