通过单个按钮提交多个表单

时间:2016-06-26 12:12:24

标签: javascript php ajax forms

我的HTML文件中有这个PHP代码。我需要使用这些表单更新数据库表。

if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {

    echo '<img class="plan1" id="'.$row["imageID"].'" style="position:absolute; top:'.$row["top"].'px; left:'.$row["left"].'px;" src="'.$row["url"].'" width="'.$row["width"].'" height="'.$row["height"].'" />';

    echo '<form action="saveimage3.php" method="post" id="form1">';
    echo '<input type="hidden" name="planid" value="'.$row["planID"].'"/>';
    echo '<input type="hidden" name="version" value="1'.$row["version"].'"/>';
    echo '<input type="hidden" name="imageid" value="'.$row["imageID"].'"/>';
    echo '<input type="hidden" name="url" value="'.$row["url"].'"/>';

    echo '<input type="hidden" name="left" id="l'.$row["imageID"].'" value="'.$row["left"].'"/>';
    echo '<input type="hidden" name="top" id="t'.$row["imageID"].'" value="'.$row["top"].'"/>';
    echo '<input type="hidden" name="width" id="w'.$row["imageID"].'" value="'.$row["width"].'"/>';
    echo '<input type="hidden" name="height" id="h'.$row["imageID"].'" value="'.$row["height"].'"/>';
    echo '</form>';
}
}

这将根据来自数据库的数据创建多个表单。

我有这个ajax代码将所有表单提交到php文件

<script>
        function validate(form){
        //get form id
        var  formID = form.id;
        var formDetails = $('#'+formID);
            $.ajax({
                type: "POST",
                url: 'saveimage3.php',
                data: formDetails.serialize(),
                success: function (data) {  
                    // log result
                    console.log(data);
                    //for closing popup
                      location.reload();
                    window.close()
                },
                error: function(jqXHR, text, error){
                // Displaying if there are any errors
                console.log(error);
                }
            });
        return false;
    }
        //this function will create loop for all forms in page
        function submitAll(){
                for(var i=0, n=document.forms.length; i<n; i++){
                    validate(document.forms[i]);
                }
            }
</script>

我有这个按钮

<button onclick="submitAll()">Save Version</button>

通过提交这些,数据库仅更新第一个表单数据。其他表单不会将数据发送到php文件。如何将所有表单都放入php文件???

5 个答案:

答案 0 :(得分:2)

也许是因为location.reload();你从第一个表单处理程序和页面重新加载得到答案并打破验证循环,所以其他形式的dotn被发布了吗?
AND - 您需要将表单ID更改为唯一!

答案 1 :(得分:1)

的Javascript。在每个表单中创建一个隐藏的提交字段,然后在单击您的实际提交按钮时,使其触发一个事件,要求浏览器像所有提交按钮一样被点击。

我会为此目的使用JQuery .trigger()事件。 http://api.jquery.com/trigger/

所以,如果你有一个id为&#34的实际提交按钮;提交全部&#34;和隐藏的提交按钮与类&#34;提交按钮&#34;你可以使用以下JQuery:

$(document).ready(function() {

    $('#submit-all').click(function(){

        $('.submit-button').trigger("click");

    });
});

答案 2 :(得分:1)

而不是

var formDetails = $('#'+formID);

尝试

var formDetails = $(form);

我不知道修复你的bug是否足够。试试吧。

你的论证中已有你的表格。就像我一样将它包装在jQuery集合中。

另外,为了以防万一,请为所有表单提供不同的ID。

答案 3 :(得分:1)

我解决了。出现问题的原因是每个表单都具有相同的ID。通过增量变量,我在表单id中进行了更改,从一对一变化。然后问题解决了。非常感谢所有试图帮助我的人..!

答案 4 :(得分:0)

while循环中,每个表单都具有相同的id="form1"。这不仅是无效的HTML,而且还会导致您只提交一个表单的问题。 增加表单ID,然后只需在JS中执行:

$('#submitAll').click(function(){
    $('[id*="form"]').submit();
});