пожалуйста, мне нужна ваша помощь с проблемой. На моей домашней странице есть две формы, которые я хотел бы, чтобы пользователи заполняли и отправляли в разное время. Моя проблема в том, что мне нравится иметь только одну страницу обработки для обоих из них. Обычно я могу делать это на отдельных страницах. Но я хотел бы знать, возможно ли сделать это на одной странице.
Хорошо. Если я отправлю форму A, на странице действия не будет указана Undefined Index для переменной формы B, которая не была отправлена, и, конечно же, использование GET не рекомендуется.
Спасибо за ваше время и терпение.
Это не совсем неслыханно. Довольно часто другой параметр передается в атрибуте действия элемента формы, например /submit.php?action=register
или /submit.php?action=activate
.
Итак, у вас есть такой код:
if ($_GET['action'] == 'register') { // Register user } else if($_GET['action'] == 'activate' { // Activate user }
Однако вы также можете просто изменить значение кнопки «Отправить» и установить атрибут действия для обеих форм:
if (isset($_POST['submit'])) { if ($_POST['submit'] == 'register') { // Register user } else if($_POST['submit'] == 'activate') { // Activate user } }
создайте отдельный скрипт form_process, затем включите его в страницы формы.
if(!empty($_POST)){ include 'form_process.php'; }
form_process.php должен содержать только класс / функцию без эха или распечатки.
поочередно вы можете установить URL-адрес действия на ту же страницу, а затем перенаправить обратно на соответствующую страницу.
<form id="add-profile-form" action="form_controller.php" method="post"> <input type="hidden" name="act" value="adding"/> <!-- form 1. --> </form> <form id="edit-profile-form" action="form_controller.php"> <input type="hidden" name="act" value="editing"/> <!-- form 2. --> </form>
form_controller.php
if(isset($_POST['act']){ if($_POST['act'] == 'adding'){ //process form1 }else if($_POST['act'] == 'editing'){ //process form2 } header("Location: success.php"); }
Вы можете сделать это и на той же странице. Просто вам нужно сделать одно и то же для обеих форм.
Вам нужно сделать какое-то условие и написать отдельные функции для Form A
и Form B
зависимости от исходной формы.
Вы можете проверить параметры в действии, как @Ami.
/submit.php?action=register
или /submit.php?action=activate
Итак, у вас есть такой код:
if ($_GET['action'] == 'register') { // Register user } else if($_GET['action'] == 'activate' { // Activate user }
Тем не менее, вы также можете просто изменить значение кнопки отправки и иметь параметр действия одинаковый для обеих форм:
if (isset($_POST['submit'])) { if ($_POST['submit'] == 'register') { // Register user } else if($_POST['submit'] == 'activate') { // Activate user } }