Две формы конфликтуют друг с другом

Я разместил две формы на одной странице. Обе формы отлично работают отдельно, но когда они размещаются на одной странице одновременно, они конфликтуют друг с другом. Вот обе формы:

Форма обратной связи:

<form name="contactform" id="contactform" method="post" action="#targetAnchorPage2">
<table>
<?php
if (isset($_POST["name"])){
?>
<tr>
 <td colspan="2" class="error">
 <?php
 require_once("contact_send.php");
 ?>
 </td>
</tr>
<?php
}
?>

<tr><td><label for="name" class="<?=$name_class?>">name:</label></td><td><input  type="text" name="name" maxlength="50" value="<?=$name?>"></td></tr>
<tr><td><label for="email" class="<?=$emailaddress_class?>">email:</label></td><td><input  type="text" name="email" maxlength="80" value="<?=$emailaddress?>"></td></tr>
<tr><td colspan="2"><label id="tworows" for="message" class="<?=$message_class?>">your message:</label></td></tr><tr><td colspan="2"><textarea  name="message" cols="22" rows="6" value="<?=$message_class?>"></textarea>
 </td></tr>

<tr>
 <td colspan="2" style="text-align:center"><br /><input class="button" type="submit" value="">   
 </td>
</tr>

</table>
</form>

Форма подписки:

<form name="subscribeform" id="subscribeform" method="post" action="#targetAnchorPage3">
<table>
<?php
if (isset($_POST["name"])){
?>
<tr>
 <td colspan="2" class="error">
 <?php
 require_once("subscribe_send.php");
 ?>
 </td>
</tr>
<?php
}
?>

<tr><td><label for="name" class="<?=$name_class?>">name:</label></td><td><input type="text" name="name" maxlength="50" value="<?=$name?>"></td></tr>
<tr><td><label for="email" class="<?=$emailaddress_class?>">email:</label></td><td><input type="text" name="email" maxlength="80" value="<?=$emailaddress?>"></td></tr>

<tr>
 <td colspan="2" style="text-align:center"><br /><input class="button" type="submit" value="">   
 </td>
</tr>

</table>
</form>

Как это можно решить? Это вызвано командой "required_once"?

3 ответа

Решение

Я предполагаю, что, поскольку вы показываете необходимые файлы на основе тех же критериев isset($_POST['name']) и так как обе формы имеют name поле, в котором вы в конечном итоге показывает код в обоих случаях, независимо от того, какая форма отправлена Вы должны просто изменить имена полей формы на одной из форм, чтобы они отличались.

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

Вы можете сделать либо:

  • использовать разные скрипты / обработчики форм (не публиковать на той же странице)
  • используйте разные проверки для каждой формы, например, добавив скрытый ввод, который позволит вам различать формы.

Добавлять

        formaction="Your_URL"     

Атрибут в кнопке

Другие вопросы по тегам