两个动作两个提交按钮在PHP?

时间:2014-03-07 17:42:45

标签: javascript php html

我形成了像这样的标签

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所以只回显那些他提供的值

现在问题是如何在一个表单中有两个提交按钮和两个动作?

2 个答案:

答案 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];
}

?>