Принципы веб-программирования
Исходя из традиционного (хотя и ржавого) опыта программирования, я занят, чтобы разобраться с природой веб-сайтов, не имеющих статуса. Это довольно изменение мышления!
Я создал небольшой веб-сайт для команды, в которой я работаю для внутреннего использования, чтобы отслеживать некоторые аспекты нашей повседневной жизни. Сайт функционален, я горжусь тем, что мне удалось придумать, бла бла бла.
Однако я где-то читал, что говорит о том, что я, возможно, сделал это не так. В частности, центральная страница веб-сайта команды выполняет большую часть работы. Он проверяет, откуда вы пришли, а затем "переключается" для выполнения некоторой работы (внесения некоторых изменений в базу данных), а затем снова отображает страницу.
Во многих случаях страница просто вызывает сама себя! Что я делаю, я отображаю таблицу. В последнем столбце каждой строки находится набор HTML-форм. Каждая форма имеет кнопку отправки, по крайней мере, одно скрытое поле. Кнопки "Отправить" имеют названия / значения, такие как "Удалить", "Изменить", "Архив" и т. Д.
Если $_POST['submit'] == "delete"
затем я выполняю эту функцию в строке, обозначенной скрытым полем. Визави для "Архив". Для параметра "Изменить" я открываю новую страницу, отображаю форму со значениями по умолчанию, и когда пользователь отправляет форму, снова вызывается главная страница PHP для выполнения обновления SQL перед отображением таблицы.
Таким образом, по существу большая (и растущая) конструкция case в начале главной страницы выполняет большую часть работы, даже включая кнопку входа!
Это выглядит довольно аккуратно и организованно, но у меня есть два вопроса:
Есть ли способ исключить запрос "Отправить данные формы", когда пользователь нажимает кнопку "Назад"? Кнопка назад не имеет большого смысла на этом веб-сайте, но мы имеем дело с людьми здесь. Я заметил, что другие люди публиковали похожие вопросы о кнопках выхода из системы и т.п., но ответы, которые я нашел до сих пор, для меня мало или вообще не имеют смысла.
Является ли это плохой практикой программирования, особенно всей концепцией PHP-вызовов-себя-из-формы-действия....?
Спасибо за время!
4 ответа
На ваши вопросы:
Вы ищете что-то вроде Post-redirect-get, что означает, что после отправки вы "выполняете работу" со своими данными и сразу же перенаправляете своего пользователя, поэтому нажатие кнопки "Назад" не приведет к повторной отправке!
В общем, вот как это работает... в начале. Через некоторое время вы должны взглянуть на ООП (объектно-ориентированное программирование) или для начала просто разделить каждое действие на функции, возможно, эти функции даже на отдельные файлы. Обратитесь к руководству по PHP за функциями или, если вы действительно хотите узнать больше, ООП будет святым Граалем, но это немного сложный вопрос;)
Post-redirect-get - это шаблон, который решает это довольно чисто.
Это всегда мудрая идея redirect
страница после обработки данных формы. Это позволяет избежать повторной отправки формы при обновлении страницы или кнопки возврата.
Для перенаправления в php вы можете использовать:
header("Location: {url here without brackers}");
То, что вы разработали, - это не веб-сайт, а веб-приложение. Чтобы устранить "проблему с кнопкой возврата", вам следует рассмотреть возможность использования некоторой магии JavaScript (например, Ajax может помочь вам устранить необходимость открытия другой страницы или отправки на ту же страницу, jQuery может помочь с отображением и скрытием частей страницы. на основе взаимодействия с пользователем).
Для второго вопроса: нет ничего плохого в том, чтобы иметь всю логику в одном php-файле. Конечно, это может быть больно, если у вас есть что-то вроде миллиарда строк кода, но для небольшого приложения... почему бы и нет?!
Говоря в целом, рекомендуется разделить логику и графический интерфейс. Вы можете прочитать об этом здесь.