每次加载页面时都会触发PHP邮件功能

时间:2014-03-16 09:08:07

标签: javascript php email

我正在尝试使用PHP的mail()函数发送邮件。

我有一个按钮(发送邮件),点击该邮件必须被触发。由于PHP是服务器端脚本语言,因此我使用Javascript来触发PHP函数。发生了一件非同寻常的事件每当我加载页面时,邮件都会被触发。所以,我发出警报和回声来检查代码逻辑是否正确。

有趣的是,当我点击按钮时,邮件不会被触发。我哪里错了? 请看我的代码:

<input type="button" onclick="jMail()" value="Send Mail"/>        
<script>
  function jMail()
  {
    alert("Inside Javascript Function");
    alert("<?php PHPFunction(); ?>");
  }
</script>

<?php
  function PHPFunction(){
    echo("Inside PHP Function");
    mail("to@example.com", "Help Mee", "Definitely Help me", "From:from@example.com");
    echo("Mail Sent");
  }
?>

5 个答案:

答案 0 :(得分:2)

PHP是服务器端语言,而Javascript是客户端语言。我认为你们混淆了两者,并试图以一种永远无法发挥作用的方式混合使用它们。

加载页面时,这些步骤按顺序进行:

  1. 服务器解释页面中的PHP代码,并呈现一个不包含任何PHP代码的页面。
  2. 查看页面的客户端显然无权访问任何PHP函数,因为仅查看详细说明的结果。它仍然可以使用Javascript来实现页面的dinamic行为(即没有刷新的更改),以及像AJAX这样的事情来向服务器发出请求仍然无需重新呈现页面。

  3. <input type="button" onclick="jMail()" value="Send Mail"/>
    

    当您按下按钮时,事件onclick确实已触发,但在页面完全加载后。此时,服务器已经解释了所有PHP代码,没有重新加载页面就没有机会再次执行它。

    示例here您可以看到代码详细说明的结果(在 stdout 下)。如您所见,客户端留下了一个不含PHP的网页。

    如果您正在寻找在页面加载后发生事件时触发PHP代码的方法,建议您查看this question
    另外,this question上的programmers.stackexcange.com可以帮助您澄清客户端和服务器端之间的区别,如果不清楚的话。

答案 1 :(得分:0)

你不能以这种方式从javascript触发PHP。创建另一个PHP文件,并使用AJAX javascript请求调用它。

答案 2 :(得分:0)

<form method="post">
    <input type="submit" value="Send Mail" />
</form>
<?php

    if(isset($_POST)){
        ///do sent mail here
        mail("to@example.com","Help Mee","Definitely Help me","From:from@example.com");
    }
?>

答案 3 :(得分:0)

每次你做

<?php PHPFunction();

你发邮件..

也许你可以玩像

这样的东西
<?php
if(array_key_exists('postMail',$_POST)){
echo ("Inside PHP Function");
//if(empty($_POST['mailContent'])){/*angry blablabla*/}
mail("to@example.com","Help Mee",$_POST['mailContent'],"From:from@example.com");
echo ("Mail Sent");
die();
}?>

<input type="button" onclick="jMail()" value="Send Mail"/>        
<script>
function jMail()
{
alert("Inside Javascript Function");
var xhr=new XMLHttpRequest();
xhr.open("POST","?");
var fd=new FormData();
fd.append("postMail","true");
fd.append("mailContent","fooooobar");
xhr.send(fd);
}
</script>

答案 4 :(得分:0)

PHP是一种服务器端脚本语言,已由服务器解释,然后发送到客户端(即浏览器)以解释任何客户端脚本(来自JavaScript)。
但如果想要服务器处理响应式网页,请尝试使用表单并输入标签及其属性,将请求发送回服务器
 但如果你想要一个快速的方法尝试使用AJAX。