0

我使用 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 field name="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,这对我来说并不容易。我知道这可以在一个小时内完成,如果我以前知道我需要的一切,所以我想绝对清楚这一点,以便下次快速。谢谢

4

1 回答 1

1

1) move_uploaded_file 是移动第一次作为临时文件上传的文件所必需的,但在这种情况下用作布尔值,如果文件没有正确上传,则返回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)你使用的方法是正常的,如果控制附件已经上传,那么你就使用

 unlink(path_to_file);

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

于 2013-05-29T16:55:24.807 回答