У меня есть две страницы PHP, A и B.
Страница A имеет форму, которая передает переменную $_POST['mode'] со значением 'edit' на страницу B.
Страница B также имеет свою форму, кнопка отправки которой называется «_go». Страница B проверяет, установлен ли параметр $_POST['_go'] и обрабатывает форму на той же странице B.
Проблема в том, что на странице B, если я ввожу какое-то значение в форму и отправляю форму в первый раз, она работает, и я получаю сообщение об успешном завершении. Однако после того, как я получаю сообщение об успехе, не обновляя страницу, повторно вводя другое значение и повторно отправляя форму, я ничего не получаю, и повторно введенное значение не обрабатывается.
Я сам изучил это и обнаружил, что $_POST['_mode'] является причиной проблемы. Когда я отправляю форму в первый раз, $_POST['_mode'] имеет значение «редактировать». Но когда я повторно отправляю форму, $_POST['_mode'] все еще установлен, но его значение пусто.
Я расстроен здесь.
- Страница B получает $_POST['mode'] со значением "edit" со страницы A
- Страница B сохраняет $_POST['mode'] в переменную $mode, и теперь значение $mode равно 'edit'
- Страница B отправляет форму, теперь $_POST['_mode'] установлен, а значение $_POST['_mode'] равно 'edit'.
- Страница B повторно отправляет форму, так как я не обновлял страницу или что-то в этом роде, значение $mode по-прежнему должно быть «редактировать», и я полагаю, что значение $_POST['_mode'] также равно «редактировать», но $_POST['_mode'] установлен, но ПУСТОЙ.
Как сохранить $mode как есть?
Мой код на странице A выглядит следующим образом (упрощенно).
// PAGE A
<form action="Page B" id="some id" name="some name" method="post">
<input type="hidden" name="mode" value="edit" />
<input type="submit" class="btn" value="Edit" />
</form>
Мой код на странице B выглядит следующим образом (упрощенно).
// PAGE B
<?php
// if form is submitted and mode is 'edit', go process the form
if( isset( $_POST['_go'] && isset( $_POST['_mode'] ) ) {
$_go_mode = $_POST['_mode'];
if( $_go_mode == 'edit' ) {
process_form();
}
}
function process_form() {
// This function receives parameters from the form
// and does what it needs to do
echo '<div class="process-result">';
echo 'Successfully made changes';
echo '</div>';
}
?>
<div>
<?php
// This $_POST['mode'] variable is passed from Page A
if( isset( $_POST['mode'] ) ) {
$mode = $_POST['mode'];
}
?>
<form method="post" class="form-horizontal">
<div class="form-group">
<label class="control-label">Some label</label>
<input type="text" class="form-control" name="_name" value="some value" />
</div>
<div class="form-group">
<input type="hidden" name="_mode" value="'.<?php echo $mode; ?>.'" />
<input type="submit" name="_go" class="btn" value="Make Changes" />
</div>
</form>
</div>
В качестве обходного пути я изменил код, как показано ниже. Теперь это работает как задумано, но я не чувствую, что это хороший способ сделать это...
Before:
if( $_go_mode == 'edit' ) {
process_form();
}
After:
if( $_go_mode == 'edit' ) {
$_POST['mode'] = $_go_mode;
process_form();
}