我形成了像这样的标签
sample name:register.php page
<form id="formElem" name="formElem" action="form10.php" method="post">
<input id="pd" name="pd" type="text" AUTOCOMPLETE=OFF />
<input id="pd1" name="fname" type="text" AUTOCOMPLETE=OFF />
<input id="pd2" name="mname" type="text" AUTOCOMPLETE=OFF />
<input id="pd2" name="lname" type="text" AUTOCOMPLETE=OFF />
6 more input boxes
<button name="submit" type="submit">Register</button>
<button name="preview" type="submit">Preview</button>
</form>
我将此信息发送到下一个form10.php页面并显示该页面上的所有10个输入值
我正在使用$pd= htmlentities($_POST['pd']);
$fname= htmlentities($_POST['fname']);
从表单标记和10个变量中获取值,而我正在回显那些输入的值
成功提交按钮后,在form10.php文件上。
就像我输入fname,mname,lname来自表单标签并显示在form10.php页面上。
first name <?echo $fname?>
但现在问题是用户只能在表单标签内输入10个文本框值后才能看到下一页(form10.php)。 但我想为用户提供预览选项,以便用户可以预览下一页填充1到10个文本框值中的任何一个。意味着他填写了fname和lname但没有填写8个字段,他点击预览按钮我想打开form10_preview.php,它与form10.php相同,但由于用户只输入了fname和lname所以只回显那些他提供的值
现在问题是如何在一个表单中有两个提交按钮和两个动作?
答案 0 :(得分:3)
我认为最好控制客户端表单提交规则。从表单中删除action
,然后将按钮类型更改为button
:
<form id="formElem" name="formElem" action="" method="post">
<input id="pd" name="pd" type="text" AUTOCOMPLETE=OFF />
<input id="pd1" name="fname" type="text" AUTOCOMPLETE=OFF />
<input id="pd2" name="mname" type="text" AUTOCOMPLETE=OFF />
<input id="pd2" name="lname" type="text" AUTOCOMPLETE=OFF />
6 more input boxes
<button id="register" type="button">Register</button>
<button id="preview" type="button">Preview</button>
</form>
然后让javascript控制提交的流程:
var formElem = document.getElementById('formElem'),
btnSubmit = document.getElementById('register'),
btnPreview = document.getElementById('preview');
function formSubmit() {
switch (this.id) {
case 'register' :
formElem.action='post10.php';
break;
case 'preview' :
formElem.action='preview10.php';
break;
}
formElem.submit();
}
btnSubmit.onclick = formSubmit;
btnPreview.onclick = formSubmit;
答案 1 :(得分:0)
您可以让表单指向其自己的页面并单独处理每个提交值。在带有表单的文件顶部,您需要启动输出缓冲区和会话。这允许使用header()来重定向和存储会话变量。
<?php
ob_start();
session_start();
?>
表单将通过删除action属性指向自身:
<form id="formElem" name="formElem" method="post">
<input id="pd" name="pd" type="text" AUTOCOMPLETE=OFF />
<input id="pd1" name="fname" type="text" AUTOCOMPLETE=OFF />
<input id="pd2" name="mname" type="text" AUTOCOMPLETE=OFF />
<input id="pd2" name="lname" type="text" AUTOCOMPLETE=OFF />
6 more input boxes
<button name="submit" type="submit">Register</button>
<button name="preview" type="submit">Preview</button>
</form>
我们通过POST数组中的名称处理每个按钮:
<?php
if(isset($_POST['submit'])){
foreach ($_POST as $key => $value) {
$_SESSION[$key] = $value;
}
header("Location: form10.php");
}
if(isset($_POST['preview'])){
foreach ($_POST as $key => $value) {
$_SESSION[$key] = $value;
}
header("Location: form10_preview.php");
}
?>
在文件的最后,我们刷新输出缓冲区:
<?php ob_end_flush(); ?>
因此,基本上表单有一个动作,即将值提交给自己。最后,form10.php和form10_preview.php都需要session_start();在文件的顶部访问我们创建的Session变量,如下所示:
<?php
session_start();
$inputs = array("pd", "fname", "mname", "lname", etc...);
foreach ($inputs as $input) {
echo $_SESSION[$input];
}
?>