【问题标题】:two forms conflict with each other两种形式相互冲突
【发布时间】:2012-12-29 19:08:38
【问题描述】:

我在一个页面上放置了两个表格。两种表单单独工作都很好,但是当它们同时放在一个页面上时,它们会相互冲突。以下是两种形式:

联系方式:

<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”命令引起的吗?

【问题讨论】:

  • 如果它们发生冲突,那么问题出在表单呈现的 HTML 中
  • “他们相互冲突”是什么意思?您是否遇到特定错误?
  • “冲突”是什么意思?
  • 请详细说明它们的冲突方式。
  • 尝试粘贴解释的 HTML 代码而不是 PHP。

标签: php forms conflict require-once


【解决方案1】:

两种形式都有相同的动作属性,它们都指向同一个页面(注意哈希不会发送到服务器)。由于它们都有一个名为 name 的字段,并且您正在检查它,因此无论发送哪种表单,这两个操作都会执行。

你可以这样做:

  • 使用不同的脚本/表单处理器(不要发回同一页面)
  • 对每个表单使用不同的检查,例如通过添加一个隐藏输入来区分表单。

【讨论】:

  • 它们的动作属性不同。第一个表单的操作是#targetAnchorPage2,第二个表单的操作是#targetAnchorPage3。并且哈希被发送到服务器。
  • @Piontek Media 请参阅这个简单的示例,其中包含action 属性和var_dump($_SERVER); 中带有散列的两个表单。您可以提交任一表单,但未找到哈希(至少在 $_SERVER... 中没有):codepad.viper-7.com/fcvX8p
  • @PiontekMedia 哈希是严格的客户端。
  • 是的,我误解了,我的错误。对不起,你是对的!
【解决方案2】:

我猜测,由于您基于相同的标准 isset($_POST['name']) 显示所需的文件,并且由于两个表单都有 name 字段,因此无论提交哪个表单,您最终都会在两个要求中显示代码。您应该简单地更改表单上的表单字段名称,以使它们不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 2019-08-07
    • 2011-01-07
    • 1970-01-01
    • 2022-09-24
    • 2020-06-05
    • 2011-11-20
    • 1970-01-01
    相关资源
    最近更新 更多