PHP联系表格-附件限制问题,附加字段,发送后重置表格

Posted

技术标签:

【中文标题】PHP联系表格-附件限制问题,附加字段,发送后重置表格【英文标题】:PHP contact form - attachment limit problem, additional field, reset form after sending 【发布时间】:2022-01-02 22:42:21 【问题描述】:

我正在使用 phpPOT 网站上的“jQuery Contact Form with Attachment using PHP”,但我需要您的帮助来解决我提到的问题。

首先,我想增加附件限制,现在是 2 MB。我要求我的 ISP 在 php.ini 中设置新参数,但他们说我的限制已经是 32 MB。不幸的是,当我尝试发送大于 2 MB 的文件时,我收到消息“无法访问文件:”并收到没有附件的邮件。

第二件事,我想在我的联系表格中添加额外提交的“电话号码”,并且我已经完成了我在逻辑上得出的所有结论(只是为了说明我是 PHP 菜鸟 :( )但我无法提供此信息成为我电子邮件的一部分。

最后一件事...如何在发送成功后强制重置表单?

非常感谢!!!

以下是 PHP 文件,您可以在这里查看我的表单:https://test.arhviz.rs/Test.html

index.php

    <style>
bodywidth:100%;
#frmContact border-top:#F0F0F0 0px solid;background:rgba(250,248,248,0.00);padding:10px;
#frmContact divmargin-bottom: 15px
#frmContact div labelmargin-left: 5px
.demoInputBoxpadding:10px; border:#27aae1 0px solid; border-radius:4px;background-color:#C6C6C6;width:100%;
.errorbackground-color: #FF5A5A;border:#AA4502 0px solid;padding: 5px 10px;color: #FFFFFF;border-radius:4px;
.successbackground-color: #27AAE1;border:#0FA015 0px solid;padding: 5px 10px;color: #FFFFFF;border-radius:4px;
.infofont-size:.8em;color: #FF5A5A;letter-spacing:2px;padding-left:5px;
.btnActionbackground-color:#27AAE1;border:0;padding:10px 40px;color:#FFF;border:#F0F0F0 0px solid; border-radius:4px;
</style>
<script src="https://code.jquery.com/jquery-2.1.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function (e)
$("#frmContact").on('submit',(function(e)
    e.preventDefault();
    $('#loader-icon').show();
    var valid;  
    valid = validateContact();
    if(valid) 
        $.ajax(
        url: "contact_mail.php",
        type: "POST",
        data:  new FormData(this),
        contentType: false,
        cache: false,
        processData:false,
        success: function(data)
        $("#mail-status").html(data);
        $('#loader-icon').hide();
        ,
        error: function()             
        
        );
    
));

function validateContact() 
    var valid = true;   
    $(".demoInputBox").css('background-color','');
    $(".info").html('');
    
    if(!$("#userName").val()) 
        $("#userName-info").html("(required)");
        $("#userName").css('background-color','#FF5A5A');
        valid = false;
    
    if(!$("#userEmail").val()) 
        $("#userEmail-info").html("(required)");
        $("#userEmail").css('background-color','#FF5A5A');
        valid = false;
    
    if(!$("#userEmail").val().match(/^([\w-\.]+@([\w-]+\.)+[\w-]2,4)?$/)) 
        $("#userEmail-info").html("(invalid)");
        $("#userEmail").css('background-color','#FF5A5A');
        valid = false;
    
    if(!$("#userPhone").val().match(/[0-9]/)) 
        $("#userPhone-info").html("(invalid)");
        $("#userPhone").css('background-color','#FF5A5A');
        valid = false;
    
    if(!$("#subject").val()) 
        $("#subject-info").html("(required)");
        $("#subject").css('background-color','#FF5A5A');
        valid = false;
    
    if(!$("#content").val()) 
        $("#content-info").html("(required)");
        $("#content").css('background-color','#FF5A5A');
        valid = false;
    
    
    return valid;


);
</script>
<form id="frmContact" action="" method="post">
<div id="mail-status"></div>
<div>
<label style="padding-top:20px;">Ime</label>
<span id="userName-info" class="info"></span><br/>
<input type="text" name="userName" id="userName" class="demoInputBox">
</div>
<div>
<label>E-mail</label>
<span id="userEmail-info" class="info"></span><br/>
<input type="text" name="userEmail" id="userEmail" class="demoInputBox">
</div>
<div>
<label>Telefon</label>
<span id="userPhone-info" class="info"></span><br/>
<input type="text" name="userPhone" id="userPhone" class="demoInputBox">
</div>
<div>
<label>Pošaljite Vaš projekat (DWG, DXF ili PDF):</label><br/>
<input type="file" name="attachmentFile" id="attachmentFile" class="demoInputBox">
</div>
<div>
<label>Tema</label> 
<span id="subject-info" class="info"></span><br/>
<input type="text" name="subject" id="subject" class="demoInputBox">
</div>
<div>
<label>Poruka</label> 
<span id="content-info" class="info"></span><br/>
<textarea name="content" id="content" class="demoInputBox" cols="60" rows="6"></textarea>
</div>
<div>
<input type="submit" value="Send" class="btnAction" />
</div>
</form>
<div id="loader-icon" style="display:none;"><img src="LoaderIcon.gif" /></div>

contact_mail.php

    <?php
require('phpmailer/class.phpmailer.php');

$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPDebug = 0;
$mail->SMTPAuth = TRUE;
$mail->SMTPSecure = "ssl";
$mail->Port     = 465;  
$mail->Username = "kontakt@arhviz.rs";
$mail->Password = "*****";
$mail->Host     = "mail.arhviz.rs";
$mail->Mailer   = "smtp";
$mail->SetFrom($_POST["userEmail"], $_POST["userName"]);
$mail->AddReplyTo($_POST["userEmail"], $_POST["userName"]);
$mail->AddAddress("igor.kulundzic@gmail.com");  
$mail->Subject = $_POST["subject"];
$mail->WordWrap   = 80;
$mail->MsgHTML($_POST["content"]);

if(is_array($_FILES)) 
$mail->AddAttachment($_FILES['attachmentFile']['tmp_name'],$_FILES['attachmentFile']['name']); 


$mail->IsHTML(true);

if(!$mail->Send()) 
    echo "<p class='error'>Došlo je do greške pri slanju poruke. Molim, pokušajte kasnije ili pošaljite mail direktno na igor.kulundzic@gmail.com. Hvala!.</p>";
 else 
    echo "<p class='success'>Poruka je uspešno poslata. Potrudiću se da Vam odgovorima u najkraćem roku. Hvala.</p>";
   
?>

文件夹phpmailer中也有3个文件,但我认为它们只是与服务器连接的配置文件。

【问题讨论】:

请将您的问题一次限制为一个问题 【参考方案1】:

我很确定在这两行中......

$mail->MsgHTML($_POST["userPhone"]);
$mail->MsgHTML($_POST["content"]);

...您首先将电话号码设置为邮件内容,然后用实际消息覆盖它。试试这样:

$mail->MsgHTML( 'Phone: ' . $_POST["userPhone"] . "\nMessage: " . $_POST["content"] );

至于重置表单:您似乎是通过 AJAX 请求发送电子邮件。您的 index.php 代码中已经有一个函数在成功发送电子邮件后运行:

success: function(data)
    $("#mail-status").html(data);
    $('#loader-icon').hide();

这就是您可以重置表单的地方,例如像这样:

success: function(data)
    $("#mail-status").html(data);
    $('#loader-icon').hide();
    $('#frmContact').trigger("reset");

更新:我试图让它更清楚,重置调用需要去哪里。如果它是成功函数的一部分,那么只有在发送邮件成功时才会发生。

更新 2: 第一步应该是检查文件限制的值是否与您认为的一样。您可以输出如下值:

<?php
echo "<!-- upload_max_filesize=" . ini_get('upload_max_filesize') . ", post_max_size=" . ini_get('post_max_size') . "-->";

把它放在 index.php 文件的末尾,加载器图标之后。然后刷新网站,看看页面的源代码。一旦值符合您的预期,请再次将其删除。

【讨论】:

嗨,Johannes,感谢您的回答...我已设法将电话号码设置为包含在邮件正文中!但我不知道如何设置重置功能......当我把这个原始的脚本放在你提到的部分之后,表单只是重置而不发送。它应该在发送后并在显示已成功发送的消息后重置。 :(另外,你还没有给我说明如何将附件限制增加到 2MB 以上... ...或者如果无法设置功能延迟,是否有重置按钮...激活重置功能? 嘿,我刚刚找到了重置表单的解决方案...延迟了 ;) 现在,只剩下一个问题...附件大于 2 MB :( 任何解决方案? 我更新了我的答案,以找出实际限制是什么。 嗯...看起来您发送给我的这段代码中缺少某些内容...。正如您所说,我已将其放在 index.php 的末尾加载程序图标原始之后.. .但是我在页面源中没有得到任何反馈信息... :(

以上是关于PHP联系表格-附件限制问题,附加字段,发送后重置表格的主要内容,如果未能解决你的问题,请参考以下文章

PHP不发送带有附件的邮件

带有文件上传附件的 PHP 联系表

表格提交文件附件

php : 电子邮件发送失败,附件不止一个

用PHP发送带有附件的电子邮件,只显示字符没有附加文件

在 PHP 中,如何发送带有附件的 HTML 电子邮件?