允许用户附加多个文件,但可选
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->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 身份验证期间附加到用户创建多个复选框