【问题标题】:Submit multiple data from dynamic form with PHP使用 PHP 从动态表单提交多个数据
【发布时间】:2020-05-07 09:43:59
【问题描述】:

我正在尝试以相同的通用形式提交使用 jQuery append() 方法生成的多个输入。我是 jquery 和 AJAX 的新手。

这个 HTML 表单是我的一个非常接近的例子。

<form id="dynamic_form" method="POST">
    <select name="account1" id="account1">
        <option>Choose option</option>
        <option>Option 1/option>
        <option>Option 2</option>
        <option>Option 3</option>
        <option>Option 4</option>
        <option>Option 5</option>
    </select><br>
    <select name="task1" id="task1">
        <option>Choose option</option>
        <option>Option 1</option>
        <option>Option 2</option>
        <option>Option 3</option>
    </select><br>
    <textarea name="note1" id="note1" required="required"></textarea><br>

    <button type="button" id="addbtn">Add</button>
    <button type="reset">Reset</button>
    <input type="Submit" id="submit" value="Submit"/>
</form>

这是我的 jquery 添加表单代码

$(document).ready(function(){
        var i = 1;
        $('#addbtn').click(function(){
            i++;
        $('#dynamic_form').append('<select name="account'+i+'" id="account'+i+'"><option>Choose option</option><option>Option 1/option><option>Option 2</option> //etc ...');
});

当点击添加按钮时,我会看到新的下拉菜单和带有递增 ID 的输入字段。

我不知道在我的情况下应该如何使用 AJAX 将我的数据发送到“submission.php”并将其提交到我的 sql server 数据库

【问题讨论】:

    标签: php jquery ajax form-submit sqlsrv


    【解决方案1】:

    您可以使用serialize() 方法构建form 中所有内容的查询字符串。然后,您可以将此信息提供给 $.ajax() 请求的 data 属性,以将信息发送到您的 PHP 逻辑。

    还请注意,当您使用 PHP 时,您无需担心在运行时创建增量 nameid 属性。只需在每个字段名称后加上[],PHP 就会将这些值解释为一个数组。反过来,这意味着所有帐户 select 元素都是相同的,因此您可以简单地 clone() 它们来代替。这使得 JS 更加整洁和简洁。

    最后,您使用append()form 会将新内容放在按钮之后。您可能需要考虑选择最后一个 account[] 元素并改用 insertAfter()

    jQuery($ => {
      let $form = $('#dynamic_form').on('submit', function(e) {
        e.preventDefault();
        let data = $(this).serialize();
        console.log(data);
    
        /*
        $.ajax({
          url: 'yourpage.php',
          method: 'post',
          data: data,
          success: function() {
            console.log('It worked!');
          }
        });
        */
      });
    
      $('#addbtn').click(function() {
        let $last = $form.find('select[name="account[]"]:last');
        $last.clone().insertAfter($last);
      });
    });
    select,
    textarea {
      display: block;
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <form id="dynamic_form" method="POST">
      <select name="account[]">
        <option>Choose option</option>
        <option>Option 1/option>
          <option>Option 2</option>
          <option>Option 3</option>
          <option>Option 4</option>
          <option>Option 5</option>
      </select>
      <select name="task[]">
        <option>Choose option</option>
        <option>Option 1</option>
        <option>Option 2</option>
        <option>Option 3</option>
      </select>
      <textarea name="note" required="required"></textarea>
    
      <button type="button" id="addbtn">Add</button>
      <button type="reset">Reset</button>
      <input type="Submit" id="submit" value="Submit" />
    </form>

    【讨论】:

    • 我使用了 serialize() 方法,但它没有在控制台中显示新生成的表单中的数据。它仅显示第一个表单中的数据。
    • 运行时(点击提交按钮)Jquery 代码几乎无法识别新生成的表单。
    • 在这种情况下,请检查以确保您的 HTML 有效。通常这是由无效的 HTML 引起的,该 HTML 将控件呈现在 form 元素之外,因此它们不包含在提交中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 2019-01-09
    • 1970-01-01
    • 1970-01-01
    • 2013-06-03
    • 1970-01-01
    相关资源
    最近更新 更多