обычно лучше захватывать отдельные вызовы POST (сгруппированные по типу) в отдельных действиях. Я обычно иду следующим образом:
на странице 1 есть форма, которую отправят, например, на. product.php? действие = добавить. В product.php вы можете направить действие «add» в функцию add_product () (или как угодно). Затем, когда продукт будет добавлен, просто отправьте пользователя обратно на главную страницу (или любую другую страницу). Это немедленно решает проблему с обновлениями сообщений (пользователь обновляет страницу, которая снова отправит те же данные).
после mvc представьте, что у вас есть контроллер Product
, который обрабатывает все действия продукта. Скелет может выглядеть так (при условии, что функция action_x будет выполняться при запросе yoursite.com/product/x
):
class Product_Controller {
function action_show() {
}
function action_update() {
}
function action_delete() {
}
}
если ваша структура поддерживает какое-либо действие по умолчанию, вы можете направить свои действия:
function action_default() {
if(method_exists(array($this, 'action_'. $_POST['action']))) {
return call_user_method('action_'. $_POST['action'], $this);
}
}
конечно, то же самое может быть достигнуто без классов контроллера;
if(function_exists('action_'. $_POST['action'])) {
call_user_func('action_'. $_POST['action']);
}
function action_show() { }
...
и проиллюстрировать обсуждение в комментариях;
function action_update() {
// do some update logic, query an UPDATE to mysql etc.
if($result) {
// optionally save a success message
Message::add('Your record has been updated');
header('Location: main_page.php'); // or another intelligent redirect function
} else {
Message::add('Sorry, something went wrong');
header('Location: error_page.php'); // or also main_page
}
}
Это также сделает ваш код чище, так как обновление / добавление / удаление материала кардинально отличается от показа материала, это предотвратит перепутывание материала. Вы можете даже вызвать функцию show из функции update, если хотите пропустить перенаправление.
Но, в конце концов, это вопрос выбора, руководимый прагматизмом или вашей структурой;)
Надеюсь, это немного все объяснит, не стесняйтесь спрашивать разъяснений