允许用户附加多个文件,但可选

Posted

技术标签:

【中文标题】允许用户附加多个文件,但可选【英文标题】:Allow user to attach multiple files but optional 【发布时间】:2018-01-22 02:07:30 【问题描述】:

我希望允许用户在我的表单中附加多个文件,这些文件作为电子邮件的附件发送给我。但我想将此保留为可选,即如果用户附加文件,则文件以附件形式出现,如果用户不附加文件,则表格的其余部分将出现在电子邮件中。

有人可以帮我解决这个问题吗?

我是 php 新手,所以下面是我的 php 文件。

<?php
/**
* Simple example script using PHPMailer with exceptions enabled
* @package phpmailer
* @version $Id$
*/

require 'class.phpmailer.php';

try 
$mail = new PHPMailer(true); //New instance, with exceptions enabled

$to = "saxena@designmaniac.in";
$mail->AddAddress($to);
$mail->From = $_POST['email'];
$mail->FromName = $_POST['name_f'];
$mail->Subject = "Admission Form";

$body = "<table>
<tr>
<th colspan='2'>Admission Form</th>
</tr>

<tr>
<td style='font-weight:bold'>Course :</td>
<td>".$_POST['course']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Payment Mode :</td>
<td>".$_POST['p_mode']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Payment options :</td>
<td>".$_POST['p_option']."</td>
</tr>

<tr>
<td style='font-weight:bold'>First Name :</td>
<td>".$_POST['name_f']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Middle Name : </td>
<td>".$_POST['name_m']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Last Name : </td>
<td>".$_POST['name_l']."</td>
</tr>

<tr>
<td style='font-weight:bold'>E-mail : </td>
<td>".$_POST['email']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Date of Birth : </td>
<td>".$_POST['date']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Gender : </td>
<td>".$_POST['gender']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Nationality : </td>
<td>".$_POST['nationality']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Address : </td>
<td>".$_POST['address_line1']."</td>
</tr>

<tr>
<td style='font-weight:bold'>City : </td>
<td>".$_POST['city']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Zip Code : </td>
<td>".$_POST['zip']."</td>
</tr>

<tr>
<td style='font-weight:bold'>State : </td>
<td>".$_POST['state']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Country : </td>
<td>".$_POST['country']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Mobile Number : </td>
<td>".$_POST['mobile_number']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Father/Mother First Name : </td>
<td>".$_POST['fname_f']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Father/Mother Middle Name : </td>
<td>".$_POST['fname_m']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Father/Mother Last Name : </td>
<td>".$_POST['fname_l']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Father/Mother Mobile No : </td>
<td>".$_POST['mobile_number1']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Qualification : </td>
<td>".$_POST['qualification']."</td>
</tr>

<tr>
<td style='font-weight:bold'>University : </td>
<td>".$_POST['university']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Year : </td>
<td>".$_POST['year']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Qualification : </td>
<td>".$_POST['qualification_2']."</td>
</tr>

<tr>
<td style='font-weight:bold'>University : </td>
<td>".$_POST['university_2']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Year : </td>
<td>".$_POST['year_2']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Qualification : </td>
<td>".$_POST['qualification_3']."</td>
</tr>

<tr>
<td style='font-weight:bold'>University : </td>
<td>".$_POST['university_3']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Year : </td>
<td>".$_POST['year_3']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Discipline Information (School) : </td>
<td>".$_POST['discipline']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Discipline Information (Violation) : </td>
<td>".$_POST['violation']."</td>
</tr>

<tr>
<td style='font-weight:bold'>12th Mark List : </td>
<td>".$_POST['attachment1']."</td>
</tr>

<tr>
<td style='font-weight:bold'>12th Passing Certificate : </td>
<td>".$_POST['attachment2']."</td>
</tr>

<tr>
<td style='font-weight:bold'>10th Mark List : </td>
<td>".$_POST['attachment3']."</td>
</tr>

<tr>
<td style='font-weight:bold'>10th Passing Certificate : </td>
<td>".$_POST['attachment4']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Address Proof : </td>
<td>".$_POST['attachment8']."</td>
</tr>

<tr>
<td style='font-weight:bold'>Photographs : </td>
<td>".$_POST['attachment9']."</td>
</tr>

<table>";
$body = preg_replace('/\\\\/','', $body); //Strip backslashes
$mail->Msghtml($body);

$mail->IsSMTP(); // tell the class to use SMTP
$mail->SMTPAuth = true; // enable SMTP authentication
$mail->Port = 25; // set the SMTP server port
//$mail->Host = "saxena@designmaniac.in"; // SMTP server
//$mail->Username = "name@domain.com"; // SMTP server username
//$mail->Password = "password"; // SMTP server password

$mail->IsSendmail(); // tell the class to use Sendmail
$mail->AddReplyTo("saxena@designmaniac.in");
$mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
$mail->WordWrap = 80; // set word wrap

// Check file size
if ($_FILES["fileToUpload"]["size"] > 500000) 
    echo "Sorry, your file is too large.";
    $uploadOk = 0;

// Allow certain file formats
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" && $imageFileType != "pdf" && $imageFileType != "docx"
&& $imageFileType != "doc" ) 
    echo "Sorry, only JPG, JPEG, PNG, GIF, pdf & Word files are allowed.";
    $uploadOk = 0;


if(!empty($_FILES['fileToUpload']['tmp_name']) && !empty($_FILES['fileToUpload']['name'])) 
$mail->AddAttachment($_FILES['fileToUpload']['tmp_name'],
$_FILES['fileToUpload']['name']);

$mail->IsHTML(true); // send as HTML
$mail->Send();
echo 'Thank You. Your form has been submitted';
 catch (phpmailerException $e) 
echo $e->errorMessage();


?>

【问题讨论】:

删除感谢并修正错别字 【参考方案1】:

感谢所有帮助过我的专家,尤其是 Rajapandian、Joel、NogDog 等。终于我的问题解决了。现在文件附件对用户来说是可选的。如果他附上文件,表格会附带附件,如果他不附上文件,表格会以不带附件的邮件形式寄出。我正在与大家分享这个脚本。这里是php。再次感谢大家。

if (!empty($_FILES['fileToUpload']['tmp_name']) &&  !empty($_FILES['fileToUpload']['name'])) 
        foreach ($_FILES['fileToUpload']['tmp_name'] as $key => $value) 
            // added this IF block:
            if (file_exists($_FILES['fileToUpload']['tmp_name'][$key])) 
                $mail->AddAttachment($_FILES['fileToUpload']['tmp_name'][$key], $_FILES['fileToUpload']['name'][$key]);
            
        
      

【讨论】:

哇,这段代码简直是救命稻草。我处于完全相同的困境中,找不到解决方案。谢谢,@Saxena :-)【参考方案2】:

如果用户没有选择文件附件,您可以通过大小或临时名称检查它:

如果您的表单中没有选择上传文件,PHP 将返回 $_FILES['userfile']['size'] 为 0,$_FILES['userfile']['tmp_name'] 没有。

来自http://php.net/manual/en/features.file-upload.post-method.php

不要打电话给$mail-&gt;AddAttachment,但是从你的代码中你已经在这样做了,所以我不确定我是否理解你的问题,或者你可能需要再解释一下。

【讨论】:

实际上我想允许用户附加多个文件,但想让它成为可选的。这意味着如果用户附加文件,则文件作为邮件附件发送给我,如果用户不附加文件,则表格的其余部分应通过电子邮件发送。在我目前的代码中,它仅适用于一个附件,也是可选的。我想为多个附件做同样的事情。【参考方案3】:

首先,您的表单应该如下所示:

<form method="POST" enctype="multipart/form-data">
    <input type="file" name="fileToUpload[]" id="fileToUpload[]" multiple>
    <input type="submit" value="upload version" />
</form>

然后你可以使用 PHP 来循环上传文件。

if(isset($_FILES['fileToUpload'])
  if(!empty($_FILES['fileToUpload']['tmp_name']) &&  !empty($_FILES['fileToUpload']['name'])) 
    foreach($_FILES['fileToUpload']['tmp_name'] as $key => $value)
    $mail->AddAttachment($_FILES['fileToUpload']['tmp_name'][$key], $_FILES['fileToUpload']['name'][$key]);
  

当然,对于您对上传文件所做的所有检查,您需要应用相同的 foreach。

【讨论】:

感谢乔尔的帮助。我测试了脚本,但如果用户没有附加任何文件,它就不会提交表单并给出错误“无法访问文件:”。请帮忙,因为我想将附件设为可选。 您可以通过检查文件变量是否设置来检查。 正如我已经说过的,我对 php 完全陌生。您能否通过给我新的更新脚本来帮助我。我将有义务。如果使用附加文件,您之前给我的脚本可以完美运行。 我在上面加了一个if,它已经在代码中更新了:) 谢谢乔尔。我尝试了修改后的脚本,但它不起作用。提交后,它给我一个错误“此页面不工作 HTTP 错误 500”。 PL。帮助。

以上是关于允许用户附加多个文件,但可选的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 身份验证期间附加到用户创建多个复选框

需要在 Django Formset 中有一个必填字段和可选字段

如何根据用户及其要附加的文件添加多个附件?

kivy 使用附加类来存储来自多个屏幕的数据

SSRS报告导出为PDF并附加其他文档

Sqlalchemy 可以很好地处理多个附加的 SQLite 数据库文件吗?