在php multiform中使用ajax将数据插入mysql数据库

在php multiform中使用ajax将数据插入mysql数据库,php,ajax,jscript,Php,Ajax,Jscript,嘿,我正在尝试在一个页面上插入具有多种格式的mysql/php/ajax insert工作正常,但是formnr2将formnr1的数据设置到mysql数据库中 我每页有4张表格,这是宿舍的防火检查,我需要检查28个厨房是否遵守标准防火规则。 所以我需要的是小金科恩来完成这项工作:)所以每个表单,只对该表单中的数据进行响应 这是我的密码: <div class="content"> <a class="hide" id="1a" name="1a">1A</

嘿,我正在尝试在一个页面上插入具有多种格式的mysql/php/ajax

insert工作正常,但是formnr2将formnr1的数据设置到mysql数据库中

我每页有4张表格,这是宿舍的防火检查,我需要检查28个厨房是否遵守标准防火规则。 所以我需要的是小金科恩来完成这项工作:)所以每个表单,只对该表单中的数据进行响应

这是我的密码:

<div class="content">
    <a class="hide" id="1a" name="1a">1A</a><br>
    <form action="" id="1a" method="" name="1a" novalidate="novalidate">
        <div class="wrapper">
            <div class="table">
                <br>
                <br>
                <div class="row header">
                    <div class="cell">
                        1A
                    </div>
                    <div class="cell"></div>
                </div>
                <div class="row">
                    <div class="cell" data-title="Entre">
                        Døre
                    </div>
                    <div class="cell" data-title="Hvad du skal ordne">
                        <textarea cols="60" id="door" name="door" rows="3">Ok</textarea>
                    </div>
                </div>
                <div class="row">
                    <div class="cell" data-title="Entre">
                        Skilte
                    </div>
                    <div class="cell" data-title="Hvad du skal ordne">
                        <textarea cols="60" id="skilt" name="skilt" rows="3">Ok</textarea>
                    </div>
                </div>
                <div class="row">
                    <div class="cell" data-title="Entre">
                        Nødlys
                    </div>
                    <div class="cell" data-title="Hvad du skal ordne">
                        <textarea cols="60" id="lys" name="lys" rows="3">Ok</textarea>
                    </div>
                </div>
                <div class="row">
                    <div class="cell" data-title="Entre">
                        Brandtæppe
                    </div>
                    <div class="cell" data-title="Hvad du skal ordne">
                        <textarea cols="60" id="b_t" name="b_t" rows="3">Ok</textarea>
                    </div>
                </div>
                <div class="row">
                    <div class="cell" data-title="Entre">
                        Brandspørjte
                    </div>
                    <div class="cell" data-title="Hvad du skal ordne">
                        <textarea cols="60" id="b_s" name="b_s" rows="3">Ok</textarea>
                    </div>
                </div>
            </div>
            <input id="dato" name="dato" type="hidden" value="<?php echo date(">") ?> <!--class = "btn btn-success btn-block" -->/>

                   <button class = "send" id = "insert-data1a" name = "insert-data1a" onclick = "insertData1a()" type = "button">Insert Data</button><br>
            <p id = "message1a"></p>
        </div><!--end wrapper -->
    </form>
</div><!--end content -->
<script type = "text/javascript">

    function insertData1a() {
        var door = $("#door").val();
        var skilt = $("#skilt").val();
        var lys = $("#lys").val();
        var b_t = $("#b_t").val();
        var b_s = $("#b_s").val();
        var dato = $("#dato").val();


// AJAX code to send data to php file.

        $.ajax({
            type: "POST",
            url: "insert-data1a.php",
            data: {door: door, skilt: skilt, lys: lys, b_t: b_t, b_s: b_s, dato: dato},
            dataType: "JSON",
            success: function (data) {
                $("#message1a").html(data);
                $("p").addClass("alert alert-success");
            },
            error: function (err) {
                alert(err);
            }
        });

    }
</script>

如果我理解的很好,一页上有多个表单,第二个表单发布第一个表单的值。 我认为问题在于你在表单的字段上使用了相同的ID。 看看:

    var door = $("#door").val();
    var skilt = $("#skilt").val();
    var lys = $("#lys").val();
    var b_t = $("#b_t").val();
    var b_s = $("#b_s").val();
    var dato = $("#dato").val();
以下是insertData1a()函数中的字段,与其他函数中的字段相同:

    var door = $("#door").val();
    var skilt = $("#skilt").val();
    var lys = $("#lys").val();
    var b_t = $("#b_t").val();
    var b_s = $("#b_s").val();
    var dato = $("#dato").val();
所以基本上问题是,在第二个函数中引用了相同的字段。
id属性必须是HTML元素的唯一id,因此您应该在每个表单中使用不同的id,或者如果您已经在使用不同的id(您没有发布第二个表单的HTML),您只需在第二个函数中重写元素。

如果我理解得很好,一个页面上有多个表单,第二个表单发布第一个表单的值。 我认为问题在于你在表单的字段上使用了相同的ID。 看看:

    var door = $("#door").val();
    var skilt = $("#skilt").val();
    var lys = $("#lys").val();
    var b_t = $("#b_t").val();
    var b_s = $("#b_s").val();
    var dato = $("#dato").val();
以下是insertData1a()函数中的字段,与其他函数中的字段相同:

    var door = $("#door").val();
    var skilt = $("#skilt").val();
    var lys = $("#lys").val();
    var b_t = $("#b_t").val();
    var b_s = $("#b_s").val();
    var dato = $("#dato").val();
所以基本上问题是,在第二个函数中引用了相同的字段。
id属性必须是HTML元素的唯一id,因此您应该在每个表单中使用不同的id,或者如果您已经在使用不同的id(您没有发布第二个表单的HTML),您只需在第二个函数中重写元素。

除了Bakayaro的答案之外,如果所有表单都具有相同的字段,您可以优化代码,使其仅使用一个javascript函数和一个PHP插入脚本

分解你的代码!记住一件事:
DRY
(不要重复)

HTML
  • 在每个
    .send
    按钮上添加一个单击侦听器,而不是在按钮上使用
    onclick()
  • 在每个不同的表单上添加特定的ID,带有厨房ID
  • 将数据添加到
    。发送带有相关表单厨房ID的
    按钮
厨房1A示例:

<!-- Add specific ID with kitchen ID -->
<form action="" id="kitchen1a" method="" name="1a" novalidate="novalidate">
...
<!-- Add data to each .send button with related form's kitchen and remove onclick() -->
<!-- data-kitchen="1a" -->
<button class = "send" id = "insert-data1a" name = "insert-data1a" data-kitchen="1a" type = "button">Insert Data</button>
PHP文件 对每个表单使用一个PHP脚本,并从给定的
kitchen
值在SQL查询中生成表名

基于代码的工作示例:

$('.send').on('click', function(e) {

    var kitchen = $(this).data('kitchen');
    var form = $('#kitchen' + kitchen);

    var data = {
        door: form.find('[name="door"]').val(),
        skilt: form.find('[name="skilt"]').val(),
        lys: form.find('[name="lys"]').val(),
        b_t: form.find('[name="b_t"]').val(),
        b_s: form.find('[name="b_s"]').val(),
        dato: form.find('[name="dato"]').val(),
        // add active kitchen in your POST data
        kitchen: kitchen,
    };

    // AJAX code to send data to php file.
    $.ajax({
        type: "POST",
        // use same PHP script for each forms
        url: "insert.php",
        data: data,
        dataType: "JSON",
        success: function (data) {
            // use kitchen's specific message tag
            $("#message" + kitchen).html(data);
            $("p").addClass("alert alert-success");
        },
        error: function (err) {
            // alert(err);
            console.log(err);
        }
    });
});
$kitchen = $_POST['kitchen'];

// if your kitchens are all formatted like this : 1a, 2c, 14a, ...
preg_match('/(\d)+([a-z])/', $kitchen, $matches);

$stmt = $DBcon->prepare("INSERT INTO " . $matches[1] . '_' . $matches[2] . "(door,skilt,lys,b_t,b_s,dato)
VALUES(:door,:skilt,:lys,:b_t,:b_s,:dato)");
为您的1a表单生成的查询:

INSERT INTO 1_a(door,skilt,lys,b_t,b_s,dato) VALUES(:door,:skilt,:lys,:b_t,:b_s,:dato)

除了Bakayaro的答案之外,如果所有表单都有相同的字段,那么您可以优化代码,只使用一个javascript函数和一个PHP插入脚本

分解你的代码!记住一件事:
DRY
(不要重复)

HTML
  • 在每个
    .send
    按钮上添加一个单击侦听器,而不是在按钮上使用
    onclick()
  • 在每个不同的表单上添加特定的ID,带有厨房ID
  • 将数据添加到
    。发送带有相关表单厨房ID的
    按钮
厨房1A示例:

<!-- Add specific ID with kitchen ID -->
<form action="" id="kitchen1a" method="" name="1a" novalidate="novalidate">
...
<!-- Add data to each .send button with related form's kitchen and remove onclick() -->
<!-- data-kitchen="1a" -->
<button class = "send" id = "insert-data1a" name = "insert-data1a" data-kitchen="1a" type = "button">Insert Data</button>
PHP文件 对每个表单使用一个PHP脚本,并从给定的
kitchen
值在SQL查询中生成表名

基于代码的工作示例:

$('.send').on('click', function(e) {

    var kitchen = $(this).data('kitchen');
    var form = $('#kitchen' + kitchen);

    var data = {
        door: form.find('[name="door"]').val(),
        skilt: form.find('[name="skilt"]').val(),
        lys: form.find('[name="lys"]').val(),
        b_t: form.find('[name="b_t"]').val(),
        b_s: form.find('[name="b_s"]').val(),
        dato: form.find('[name="dato"]').val(),
        // add active kitchen in your POST data
        kitchen: kitchen,
    };

    // AJAX code to send data to php file.
    $.ajax({
        type: "POST",
        // use same PHP script for each forms
        url: "insert.php",
        data: data,
        dataType: "JSON",
        success: function (data) {
            // use kitchen's specific message tag
            $("#message" + kitchen).html(data);
            $("p").addClass("alert alert-success");
        },
        error: function (err) {
            // alert(err);
            console.log(err);
        }
    });
});
$kitchen = $_POST['kitchen'];

// if your kitchens are all formatted like this : 1a, 2c, 14a, ...
preg_match('/(\d)+([a-z])/', $kitchen, $matches);

$stmt = $DBcon->prepare("INSERT INTO " . $matches[1] . '_' . $matches[2] . "(door,skilt,lys,b_t,b_s,dato)
VALUES(:door,:skilt,:lys,:b_t,:b_s,:dato)");
为您的1a表单生成的查询:

INSERT INTO 1_a(door,skilt,lys,b_t,b_s,dato) VALUES(:door,:skilt,:lys,:b_t,:b_s,:dato)

我想问题在于你的php文件。请提供它们。你的PHP代码在哪里?我正在尝试编辑:)你想做什么?覆盖相同的表单?或者对不同的表单数据运行相同的sql查询?我正在尝试使4个不同的表单在同一页面上工作,它们都有相同的内容需要检查(相同的名称),但我需要使表单nr 1,只使用按钮nr 1。我想问题出在您的php文件中。请提供它们。你的PHP代码在哪里?我正在尝试编辑:)你想做什么?覆盖相同的表单?或者对不同的表单数据运行相同的sql查询?我正在尝试使4个不同的表单在同一页面上工作,它们都有相同的内容需要检查(相同的名称),但我需要使表单nr 1,仅使用按钮nr 1ok,我希望表单的值/验证(因此nr 1按钮仅适用于nr 1表单)。我有28个地方需要做,所以我需要全部更改:(恐怕我没有遵循。但是还有一点小小的改进;您可以使用$('.some form')。在('submit',function(){……do the ajax call})上使用('submit',function(){……do the ajax call');在js函数中发送所有表单数据,您可以执行类似于数据的操作:$(this).serialize()。这样您就不必为每个表单实现函数了!好的,我希望表单的值/验证(因此nr 1按钮只对nr 1表单有效)。我需要做28个位置,所以我需要全部更改:(恐怕我没有这样做。但还有一点小小的改进;您可以使用$('.some form').on('submit',function(){……dotheajax call}),而不是在按钮上调用onclick函数;要在js函数中发送所有表单数据,您可以执行类似以下操作:$(this).serialize()。因此,您不必为每个窗体实现函数!