【问题标题】:Multiple forms with file input on same page在同一页面上具有文件输入的多个表单
【发布时间】:2021-03-14 20:30:05
【问题描述】:

我是 jquery 的新手,在同一页面上处理多个多部分表单时遇到问题。我正在尝试通过 php 向 mysql 添加一些数据,同时也上传 mp3 文件。每个表单都使用samename+PHPID。第一种形式没有问题,但是当我使用其他形式时,我没有获取文件数据。谁能帮帮我?

JS:

    $(".msc_send_button").click(function(e) { // changed
     var a = this.id; // Button id
     var form = $('#'+a).parents('form').attr('id'); // Get buttons parent form id
     
        e.preventDefault();
        var formData = new FormData($('#'+form)[0]); // Form Data
         
        $.ajax({
               url: '/formposts',
                type: 'POST',
                cache: false,
                contentType: false,
                processData: false,
                data: formData, 
               beforeSend: function(){
                    // change submit button value text
                    $('#'+a).html('Sending...');
                },
               success: function(data) {
                   if(data) {
                            // Message      
                            $('#info').html(data);
                            //Button Reset
                            $('#'+a).html('Send');
                   }
               },
                error: function(e){
                    alert(e);
                }
        });
        return false;
    });

PHP 表单:

    <form name="music-form" id="music-form<?php echo $cont['id']; ?>" enctype="multipart/form-data" novalidate>
    <input type="text" name="songno" id="songno" value="<?php echo $cont['song_no']; ?>">
    <input type="file" id="mp3" name="mp3" class="inputfile" accept="audio/*" multiple>
    <button type="submit" class="msc_send_button" id="msc_send_button<?php echo $cont['id']; ?>">Send</button>
    </form>

【问题讨论】:

    标签: php jquery forms upload multipart


    【解决方案1】:

    我认为您应该更改您的 jquery 选择器。我没有看到您的 html 代码,但您可能创建了嵌套表单。也许你可以使用 closest('from') 而不是 parents('form')

    $(".msc_send_button").click(function(e) { // changed
      
      var buttonEl = $(this);
      var form = buttonEl.closest('form');
    
      e.preventDefault();
      var formData = new FormData(form[0]); // Form Data
    
      $.ajax({
        url: '/formposts',
        type: 'POST',
        cache: false,
        contentType: false,
        processData: false,
        data: formData, 
        beforeSend: function(){
          // change submit button value text
          buttonEl.html('Sending...');
        },
        success: function(data) {
          if(data) {
            // Message      
            $('#info').html(data);
            //Button Reset
            buttonEl.html('Send');
          }
        },
        error: function(e){
          alert(e);
        }
      });
      return false;
    });
    

    【讨论】:

    • 谢谢您的回复。问题是找不到表单字段或获取验证。主要问题是除了第一个表单外,表单不会将文件数据发送到 php。所有表单名称和 id 的唯一名称,带有 php veriables,如 form-5 , form-6。如果我发送没有文件的veriables,它工作正常。没有选择器的任何想法?
    • 我找出问题并解决它。你对 html 代码是正确的。我已经从 php veriable 添加了相同的 id 名称来输入文件 id 名称,例如表单名称(form-5 -> mp3-5)及其工作。再次感谢您的光临。
    • 很高兴你修复它@KeremYILDIZ
    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 2019-07-10
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2014-01-18
    • 2018-06-29
    相关资源
    最近更新 更多