2013-06-13 4 views
0

Что было бы надежным способом определить, какая форма была представлена ​​в ситуации, как показано ниже? Все отправляются на ту же страницу, которая, в свою очередь, делает вещи на основе какой формы. Многие недостатки указываются на то, как это делается. В довершение всего, даже querystrings переходят к одному и тому же сценарию. Как вы предлагаете это сделать?Обнаружение, какая форма была отправлена ​​на php

Форма имеет два поля input, форма две имеет три.

<?php 

if (isset($_POST['valOne']) && isset($_POST['valTwo']) && isset($_POST['valThree'])) { 
    echo 'This is form three'; 

} elseif (isset($_POST['valOne']) && isset($_POST['valTwo'])) { 
    echo 'This is form two'; 
} else { 
    echo 'Neither one or two'; 
} 

$formOne = '<form method="post" action="http://localhost/dev/form.php">'; 
$formOne .= 'Name: <input type="text" name="valOne" value="Foo" autocomplete="off"><br>'; 
$formOne .= 'Description: <input type="text" name="valTwo" value="Bar" autocomplete="off"><br>'; 
$formOne .= '<input type="hidden" name="secretVal" value="secretKey">'; 
$formOne .= '<input value="Add This" type="submit">'; 
$formOne .= '</form>'; 

$formTwo = '<form method="post" action="http://localhost/dev/form.php">'; 
$formTwo .= 'Name: <input type="text" name="valOne" value="Foo" autocomplete="off"><br>'; 
$formTwo .= 'Description: <input type="text" name="valTwo" value="Bar" autocomplete="off"><br>'; 
$formTwo .= 'URL: <input type="text" name="valThree" value="Tar" autocomplete="off"><br>'; 
$formTwo .= '<input type="hidden" name="secretVal" value="secretKey">'; 
$formTwo .= '<input value="Add This" type="submit">'; 
$formTwo .= '</form>'; 

$formThree = '<a href="http://localhost/dev/form.php?do=getIt">This is GET. Get it?<a/>'; 

echo $formOne; 
echo '<br>'; 
echo $formTwo; 
echo '<br>'; 
echo $formThree; 

?> 
+3

Дайте кнопку имя и проверить его на этом посту? HTML '' PHP 'if (isset ($ _ POST ['form1']))' –

+0

Приближение кнопки не работает, если пользователь нажимает введите в форму –

ответ

1

Вы можете использовать скрытый вход с разными именами для 2-й форм и на стороне сервера, вы можете проверить с if(isset($_POST['hidden_for_form1'])) или if(isset($_POST['hidden_for_form2'])).

0

Добавить скрытый вход:

<input type="hidden" name="form" value="one"> 
<?switch($_POST['form']){ 
    case "one": 
    ... 
?> 

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

1

Вы можете добавить параметр form_id к форме действия.

<form method='post' action='http://localhost/dev/form.php?form_id=1'> 

Тогда в вашем коде включить $_GET["form_id"];

1

Я хотел бы использовать скрытые входы

<input type="hidden" name="form" value="form1"> 

Также на стороне записки, есть какой-либо причине вы хранения код формы в переменной?

+0

Он сохраняется в файле, который включен на каждую страницу. Тогда я просто делаю эхо. – Norman

+0

Вы можете сохранить форму в отдельном файле php (например, form1.php), а затем использовать 'include' form1.php '; ' – DorianHuxley

0

Вам необходимо присвоить некоторое имя представить, как:

<input type="submit" name="form1" value="Add This"> 
<input type="submit" name="form2" value="Add This"> 
<input type="submit" name="form3" value="Add This"> 

так ..

if(isset($_POST['form1'])){ //do some stuff } 
if(isset($_POST['form2'])){ //do some stuff } 
if(isset($_POST['form3'])){ //do some stuff } 
Смежные вопросы