Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使phpmailer代码仅在填写和提交表单时执行?_Php_Html_Forms - Fatal编程技术网

如何使phpmailer代码仅在填写和提交表单时执行?

如何使phpmailer代码仅在填写和提交表单时执行?,php,html,forms,Php,Html,Forms,我有一个联系人表单,所有的php都可以正常工作,邮件发送成功,但问题是页面一加载/刷新,邮件就会被发送。我希望代码仅在填写表单(具有多个输入)并输入submit按钮时执行 <form> Full Name:<input required type="text" name="fullname" action="currentFile.php"/> <input type="submit"/> </form> <?php require 'ph

我有一个联系人表单,所有的php都可以正常工作,邮件发送成功,但问题是页面一加载/刷新,邮件就会被发送。我希望代码仅在填写表单(具有多个输入)并输入submit按钮时执行

<form>
Full Name:<input required type="text" name="fullname" action="currentFile.php"/>
<input type="submit"/>
</form>

<?php
require 'phpmailer/PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->isSMTP();                                      
$mail->Host = 'smtp.gmail.com';  
$mail->SMTPAuth = true;                                
$mail->Username = 'mail@gmail.com';                 
$mail->Password = 'pass';                          
$mail->SMTPSecure = 'tls';                             
$mail->Port = 587;                                    

$mail->addAddress('mail@gmail.com');     

$mail->Subject = 'Contact Form';
$mail->Body    = "Test";
$mail->AltBody = "Test";

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}
?>

全名:

如果有人能解释如何使上面的php只在填写表单并单击按钮时执行,我们将不胜感激。谢谢。

在这里发布之前,我试图将我的执行代码包装在一个
if(isset($\u POST['fullname'))
语句中,但这不起作用,所以我在这里寻求帮助。多亏了那些对我帖子的评论,我意识到了问题所在;我没有在表单标记中指定数据传输的方法。此外,与表单标记相反,输入标记中提到了action属性,这是不正确的

html应改为如下所示:

<form action="currentFile.php" method="post">
Full Name:<input required type="text" name="fullname"/>
<input type="submit"/>
</form>

全名:

我遇到的问题仅仅是由于糟糕的HTML造成的。

提交表单时,您发送的是GET或POST请求,具体取决于表单的方法。你所需要做的就是写一个if语句,检查请求是否与表单的请求匹配,如果匹配,请运行你的邮件代码。其中的一些内容可能很有用-你可以按照CodeGodie的建议,将整个邮件代码包装在
if(!empty($\u GET['fullname']){…your code}
中。如果您没有在服务器上使用有效的电子邮件地址作为“发件人”地址,您可能会发现您的电子邮件将开始被视为垃圾邮件。@CodeGodie发现此问题是由于表单标记中缺少属性,我在发布之前尝试过您提出的解决方案,但由于此问题而无效。@Steve发现此问题是由于表单标签中缺少属性所致,我在发布之前尝试过您提出的解决方案,但由于此问题而无效。注意:解决方案已解决。请将我的建议作为答案发布,我会将您的答案帖子标记为解决方案。
if(isset)(…
仅在“required”属性无法阻止提交时,如果所需输入信息不可用,则停止表单提交。
if(!empty…
也可以使用,适用于复选框之类的功能,这些功能通常在未实际选中时显示为set。另外,如果您仍按要求支持ie8,则不适用于该功能: