如何使用POST只使用一个提交按钮从多个表单提交数据?

时间:2014-12-02 16:52:57

标签: php html forms

我在使用我的代码时遇到了一些问题,这是它的简化版本:

<form name="form1" method="post">
    <input type="text" name="test1" />
</form>
asd
<form name="form1" method="post">
    <input type="text" name="test2" />
    <input type="submit" value="Submit" />
</form>
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    echo $_POST['test1'] . $_POST['test2'];
}
?>

我希望这能说清楚我要做的事情。

感谢您的帮助。

1 个答案:

答案 0 :(得分:4)

解决在PHP端分离数据的问题的一种方法是在输入中添加名称数组。例如:

<form name="form1" method="post">
    <input type="text" name="test[1]" />
    <input type="text" name="test[2]" />
    <input type="submit" value="Submit" />
</form>

然后,在提交到PHP页面后,您可以通过以下方式访问它们:

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    echo $_POST['test'][1] . $_POST['test2'][2];
}

如果您出于某种未知原因必须使用单独的表单标记,那么您也可以使用AJAX执行此操作。在提交按钮中添加一个类,并使用vanilla JavaScript和/或jQuery将click事件绑定到此,取消正常的表单操作,然后发布到独立的php页面。 AJAX将返回w / e你回写。以下是JavaScript的示例:

jQuery('.submit-button').click(function() {

    //Find all input fields in the form and store them
    var fields = jQuery(this).parent().find(':input').serializeArray(),
        url = '/somepage/somepath/',
        returnJSON,
        ajaxRequestHandler;

    //Stop the form from submitting
    event.preventDefault(); 

    //Start AJAX request
    ajaxRequestHandler = jQuery.ajax({
        type: "POST",
        url: url,
        data: fields
    });

    //Error Hanlder
    ajaxRequestHandler.fail(function (returnData) {
        console.log('failure');
    });

    //Success Handler
    ajaxRequestHandler.done(function (returnData) {
       //Display a message to the html page.
    });


});

这是HTML:

<form name="form1" method="post">
    <input type="text" name="test1" class="submit-button" />

</form>

<form name="form1" method="post">
    <input type="text" name="test2" />
    <input type="submit" value="Submit" class="submit-button" />
</form>

如果使用MVC,则需要在控制器中设置独立的PHP页面或新方法。您还需要确保此PHP页面是安全的。