PHP Mailsender详细信息+ JS PopUps

时间:2013-05-29 16:36:18

标签: php javascript file-upload phpmailer unlink

我使用PHPMailer创建了一个带有静态网站附件的表单。它工作正常,几乎完美,但我仍然有一些疑点。我想问你,如果你这么善良,并向我解释一些我没有真正得到的东西,并帮助我完成最后一部分。提前致谢

1) 要上传我使用的文件

$uploaddir  = './'; 
$uploadfile = $uploaddir . basename($_FILES['attachment']['name']);

if (move_uploaded_file($_FILES['attachment']['tmp_name'], $uploadfile)) {
    echo "Success\n";
} else {
    echo "Failed.\n";

但我真的不明白。第一行是文件上传的目录,我明白了。第二次上传文件本身(到我在html字段名称=“priloha”的第一行选择的目录)?我并不理解第三(第四)行,这是必要的,我不知道为什么。我从PHP手册http://www.php.net/manual/en/features.fi...method.php获得此代码,只是编辑了一下。如果我删除第四行(整个move_uploaded_file部分),表单不起作用,我唯一可以做的就是删除回声,留空{}。为什么?如果它只是移动文件,为什么我需要移动它?我在PHPManual上阅读了这篇文章,我不知道为什么有必要使用这个函数。我怎样才能保留条件并让它只有move_uploaded_file(...); ?

2)还有一件事就是这段代码

if(!$mail->Send()) {
     echo '<script type="text/javascript">alert("Error sending form!");</script>'; 
     } 
     else 
       {
       echo '<script type="text/javascript">alert("The form has been sent!");</script>';     
       }

我只使用echo“string”,但在发送表单后,我出现在新页面上,其中写入了消息。我不希望被重定向到任何地方。我也很高兴消息没有弹出,只是显示在表单上方。

所以我试过

else 
       {
       echo '<script type="text/javascript">window.location = "./";</script>';
       echo '<script type="text/javascript">alert("The form has been sent!");</script>';     
       }

在这种情况下,关于成功的弹出窗口不会弹出。如果我切换订单,当弹出窗口告诉成功弹出时,仍有问题是后台有一个空网站的页面,我在弹出窗口中单击“确定”后重定向:/

3)最后一件事是在上传后删除文件,我的方法似乎有点尴尬或什么,但它的工作原理。我怎么能让这个“更轻”?

if ($mail->AddEmbeddedImage("$uploadfile", "attachment") !="") 
     {
     unlink("$uploadfile"); 
     }

感谢您的回复,对不起浪费您的时间。我没有问我的表格,我只想让它几乎完美。我花了两天的时间来做这个表格,这是我与PHP的第一次“真实”接触,这对我来说并不容易。我知道这可以在一个小时内完成,如果我之前知道我需要的一切,那么我希望下次绝对清楚这一点。谢谢你

1 个答案:

答案 0 :(得分:1)

1)move_uploaded_file是移动首次作为临时文件上传的文件所必需的,但在这种情况下用作bool,如果文件没有正确上传,则返回false!也许它不起作用,因为你忘了删除流控制语句中的其他内容。

你应该这样编辑:

   //if (move_uploaded_file($_FILES['attachment']['tmp_name'], //$uploadfile)) {
   //    echo "Success\n";
   //} else {
   //    echo "Failed.\n";

以这种方式你注释掉你不需要的东西!它应该工作正常

2)重定向取决于标题(检查出来),但它可能是在html表单中设置发送('action'值)

如果提交表单将您带到该脚本中的脚本“send.php”,您可以在其末尾添加以下行:

if(!$mail->Send()) {
  echo '<script type="text/javascript">alert("Došlo k chybě při odesílání formuláře!");</script>'; 
  echo '<script type="text/javascript">window.location ="./";</script>';
  header( "refresh:2;url=first_script_name.php" );
}

以便在2秒后强制页面返回第一个脚本

无论如何,完成工作的脚本是class.phpmailer.php脚本,你没有打包!看看这个:http://stackover1.comeze.com/1/

3)您使用的方法是正常的,if控制附件已上传,然后您只需使用

 unlink(path_to_file);

这是使用php删除文件的标准方法(很多人查找delete()函数,他们还编写了一个虚拟手册页来重定向寻找unlink函数的人!))