2017-08-14 49 views
0

我想允许用户在我的表单中附加多个文件,并且这些文件作为电子邮件中的附件发给我。但是我希望保持这种可选方式,即如果用户附加文件,则文件将作为附件发送,如果用户未附加文件,则表单的其余部分将出现在电子邮件中。允许用户附加多个文件,但可选

有人可以帮助我吗?

我是新来的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 = "[email protected]"; 
$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 = "[email protected]"; // SMTP server 
//$mail->Username = "[email protected]"; // SMTP server username 
//$mail->Password = "password"; // SMTP server password 

$mail->IsSendmail(); // tell the class to use Sendmail 
$mail->AddReplyTo("[email protected]"); 
$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(); 
} 

?> 
+0

删除了感谢和固定的错别字 –

回答

0

如果用户没有选择一个文件附件,您可以通过大小或临时名称检查:如果没有选择上传的文件的形式

,PHP将返回 $ _FILES ['userfile'] ['size']为0,$ _FILES ['userfile'] ['tmp_name'] 为空。

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

,而不是打电话$mail->AddAttachment,但是从你的代码,你已经这样做,所以我不知道如果我理解你的问题,或者你可能需要解释一下多一点。

+0

其实我想允许用户附加多个文件,但要使此选项。这意味着,如果用户附加文件,文件以邮件中的附件形式发给我,并且如果用户没有附加文件,则表单的其余部分应该以电子邮件形式发送。在我现在的代码中,它只是一个附件,也是可选的。我想为多个附件做同样的事情。 – Saxena

0

首先,你的表格看起来应该是这样的:

<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,对于您在上载文件中进行的所有检查。

+0

感谢Joel的帮助。我测试了脚本,但如果用户没有附加任何文件,它不会提交表单并提供错误“无法访问文件:”。请帮助,因为我想将附件作为可选项。 – Saxena

+0

您可以通过检查是否设置了文件变量来检查。 –

+0

正如我已经说过的,我对PHP完全陌生。你能帮我给我新的更新脚本。我会被迫的。如果使用附加文件,您之前给我的脚本完美地工作。 – Saxena

0

感谢你们所有的专家,特别是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]); 
      } 
     } 
    } 
相关问题