【发布时间】:2012-05-14 14:22:49
【问题描述】:
请您帮忙解决一个问题。 我的主页上有两个表格,我希望用户在不同时间填写和提交。我的问题是我希望他们两个都只有一个处理页面。通常我可以在单独的页面中执行此操作。但我想知道是否可以在同一页面上进行操作。
好的..如果我在操作页面上提交表单 A,不会有未提交的表单 B 变量的未定义索引,当然不建议使用 GET。
感谢您的时间和耐心。
【问题讨论】:
请您帮忙解决一个问题。 我的主页上有两个表格,我希望用户在不同时间填写和提交。我的问题是我希望他们两个都只有一个处理页面。通常我可以在单独的页面中执行此操作。但我想知道是否可以在同一页面上进行操作。
好的..如果我在操作页面上提交表单 A,不会有未提交的表单 B 变量的未定义索引,当然不建议使用 GET。
感谢您的时间和耐心。
【问题讨论】:
这样做并非完全没有听说过。通常,在表单元素的操作属性中传递不同的参数,例如 /submit.php?action=register 或 /submit.php?action=activate。
所以,你有这样的代码:
if ($_GET['action'] == 'register') {
// Register user
} else if($_GET['action'] == 'activate' {
// Activate user
}
但是,您也可以只更改提交按钮的值,并使两个表单的 action 属性相同:
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");
}
【讨论】:
您也可以在同一页面上执行此操作。只需要将两种形式的action 设为相同即可。
您需要创建一些条件并为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
}
}
【讨论】:
if 或其他类似的流控制功能来根据某些标准更改您所做的事情。