PHPMailer 多个附件发送电子邮件,但没有文件

我似乎已经尝试了在这个特定主题上找到的每一个StackOverflow(而且有很多),但大多数人都忘记了在表单标签或其他东西上。我仍然收到电子邮件,只是没有附加任何文件。enctype


当我提交表单时,我的数组似乎没有被填满。下面的代码发送html电子邮件,其中包含提交的字段数据,但没有附件。$_FILES


这是表单提交输入数据但没有附件时日志中的最新错误:


[24-Jan-2020 22:06:33 UTC] PHP Warning:  count(): Parameter must be an array or an object that implements Countable in *******/public_html/rtform/contact.php on line 89


我已经在下面的代码中指出了第89行。


这是我的表单的开头和结尾,我的文件输入在底部(表单的其余部分太长,无法在此处包含整个内容:


<form id="contact-form" method="POST" action="contact.php" role="form" enctype="multipart/form-data">

    <div class="controls">


        <!-- the middle of the form here -->


        <div class="row">

            <h3 class="form_title">Upload Additional Supporting Documents</h3>

            <div class="col-lg-12">

                <label for="attachments[]">Select one or more files:

                    <input name="attachments[]" type="file" multiple="multiple">

                </label>

            </div>

        </div>


        <hr/>


        <div class="form-group">

            <div class="g-recaptcha" data-sitekey="**************************************" data-callback="verifyRecaptchaCallback" data-expired-callback="expiredRecaptchaCallback"></div>

            <input class="form-control d-none" data-recaptcha="true" required data-error="Please complete the Captcha">

            <div class="help-block with-errors"></div>

        </div>


        <p><span class="red">Fields marked with * denotes a required field.</span></p>

        <input type="submit" class="btn btn-success btn-send" value="Submit Order">


        <div class="messages"></div>


    </div><!-- end .controls -->


</form>


慕勒3428872
浏览 108回答 1
1回答

尚方宝剑之说

值得问你的JS...您正在执行以下操作:data: $(this).serialize(),这将不包括文件附件。您需要使用 JS FormData 类并关闭一些 jQuery 功能。首先,为文件输入一个id,以便您可以更轻松地定位它(您的标签也应该定位此id,而不是属性):labelname<input name="attachments[]" id="attachments" type="file" multiple="multiple">然后更改 ajax 代码以将表单数据放入对象中,然后将文件元素添加到其中:FormDatavar fd = new FormData('contact-form');var files = $("#attachments").get(0).files;for (var i = 0; i < files.length; i++) {&nbsp; fd.append("attachments", files[i]);}$.ajax({&nbsp; type: "POST",&nbsp; url: url,&nbsp; data: fd,&nbsp; processData: false,&nbsp; contentType: false,&nbsp; success: function (data) {&nbsp; &nbsp; var messageAlert = 'alert-' + data.type;&nbsp; &nbsp; var messageText = data.message;&nbsp; &nbsp; var alertBox = '<div class="alert ' + messageAlert + ' alert-dismissable"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>' + messageText + '</div>';&nbsp; &nbsp; if (messageAlert && messageText) {&nbsp; &nbsp; &nbsp; $('#contact-form').find('.messages').html(alertBox);&nbsp; &nbsp; &nbsp; $('#contact-form')[0].reset();&nbsp; &nbsp; &nbsp; grecaptcha.reset();&nbsp; &nbsp; }&nbsp; },&nbsp; error: function (data) {&nbsp; &nbsp; //this is going to happen when you send something different from a 200 OK HTTP&nbsp; &nbsp; alert('Ooops, something happened: ' + data.message);&nbsp; }});注意:此方法在版本 10 之前的 Internet Explorer 中不起作用。
打开App,查看更多内容
随时随地看视频慕课网APP