Принципы веб-программирования - PullRequest
3 голосов
/ 27 сентября 2011

Исходя из традиционного (если и ржавого) опыта программирования, я занят, чтобы разобраться с природой веб-сайтов, не имеющих статуса.Это совершенно новое мышление!

Я создал небольшой веб-сайт для команды, в котором я работаю для внутреннего использования, чтобы отслеживать некоторые аспекты нашей повседневной жизни.Сайт функционален, я очень горжусь тем, что мне удалось придумать, бла-бла-бла.

Однако я где-то читал, что говорит о том, что я, возможно, сделал это неправильно.В частности, центральная страница веб-сайта группы выполняет большую часть работы.Он проверяет, откуда вы пришли, а затем «переключается» для выполнения какой-либо работы (вносить некоторые изменения в базу данных), а затем снова отображает страницу.

Во многих случаях страница просто вызывает себя!Что я делаю, я отображаю таблицу.В последнем столбце каждой строки находится набор HTML-форм.Каждая форма имеет кнопку отправки, по крайней мере, одно скрытое поле.Кнопки «Отправить» имеют имена / значения, такие как «Удалить», «Изменить», «Архив» и т. Д.

Если $_POST['submit'] == "delete", тогда я выполняю эту функцию для строки, идентифицируемой скрытым полем.Визави для "Архив".Для параметра «Изменить» я открываю новую страницу, отображаю форму со значениями по умолчанию, и когда пользователь отправляет форму, главная страница PHP снова вызывается для обновления SQL до отображения таблицы.

Таким образом, по сути,Большая (и растущая) конструкция case в начале главной страницы выполняет большую часть работы, даже включая кнопку входа в систему!

Кажется, это довольно аккуратно и организовано, но у меня есть два вопроса:

  1. Есть ли способ исключить запрос «Повторно отправить данные формы», когда пользователь нажимает Назад?Кнопка «назад» не имеет большого смысла на этом сайте, в большинстве случаев, но мы имеем дело с людьми здесь.Я заметил, что другие люди публиковали похожие вопросы о кнопках выхода из системы и тому подобном, но ответы, которые я нашел до сих пор, не имеют для меня никакого смысла или не имеют никакого смысла.

  2. Это плохая практика программирования,особенно вся концепция PHP-вызовов-себя-из-формы-действия ....?

Спасибо за потраченное время!

Ответы [ 4 ]

4 голосов
/ 27 сентября 2011

На ваши вопросы:

  1. Вы ищете что-то наподобие Post-redirect-get, что означает, что после отправки вы «выполняете работу» со своими данными и сразу после этого перенаправляете пользователя, поэтому повторное нажатие кнопки «назад» не будет повторной отправкой!

  2. В общем, вот как это работает ... в начале. Через некоторое время вы должны взглянуть на ООП (объектно-ориентированное программирование) или для начала просто разделить каждое действие на функции, возможно, эти функции даже на отдельные файлы. Посмотрите Руководство по PHP для функций или, если вы действительно хотите узнать больше, ООП будет священным Граалем, но это немного сложный;)

2 голосов
/ 27 сентября 2011

Post-redirect-get - это шаблон, который решает это довольно чисто.

1 голос
/ 27 сентября 2011

Всегда разумно redirect страница после обработки данных формы. Это позволяет избежать повторной отправки формы при обновлении страницы или при нажатии кнопки «Назад».

Для перенаправления в php вы можете использовать:

header("Location: {url here without brackers}");
1 голос
/ 27 сентября 2011

То, что вы разработали, это не веб-сайт, а веб-приложение. Чтобы устранить «проблему с кнопкой назад», вам следует рассмотреть возможность использования некоторой магии JavaScript (например, Ajax может помочь вам устранить необходимость открытия другой страницы или отправки на ту же страницу, jQuery может помочь с отображением и скрытием частей страницы. на основе взаимодействия с пользователем).

По второму вопросу: нет ничего плохого в том, чтобы иметь всю логику в одном php-файле. Конечно, это может повредить, если у вас есть что-то вроде нескольких миллиардов строк кода, но для небольшого приложения ... почему бы и нет ?!

Говоря в целом, рекомендуется разделить логику и графический интерфейс. Вы можете прочитать об этом здесь .

...