如何在href html标签中调用带有参数的php函数

时间:2015-06-19 16:34:35

标签: php html phpmailer

我想在 href标签中使用它的参数调用sendEmail($ email)函数,当我点击链接时我得到一个页面写在其中FORBIDDEN"你没有权限访问此服务器上的根文件夹"

<?php
require 'PHPMailer-master/PHPMailerAutoload.php';
function sendEmail($email) {
$mail = new PHPMailer;
$mail->isSMTP();         
$mail->Host = 'smtp.gmail.com';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'zebalaGP@gmail.com';                 // SMTP username
$mail->Password = '******';                           // SMTP password
$mail->SMTPSecure = 'tls';   
$mail->Port = 587;            
$mail->From = 'zebalaGP@gmail.com';
$mail->FromName = 'ana grin emoticon';
$mail->addAddress($email);     // Add a recipient
$mail->isHTML(true);          
$mail->Subject = 'blabla !';
$mail->Body = 'Salam,, <br> <b> thanks for your participation grin emoticon you are especial for us grin emoticon  ';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
if (!$mail->send()) {
echo 'no';
    return false;
} else {
echo 'sent grin emoticon';
    return true;
}
}


$email='ayaradwan_93@yahoo.com';
//sendEmail($email); 
$r=' <a href= ".<?php sendEmail($email); ?>." > Send Email </a> ';
echo $r;
?>

2 个答案:

答案 0 :(得分:1)

您正在混合服务器端代码和客户端代码。他们在完全不同的上下文中完全不同的时间运行 (通常)完全不同的计算机

目前还不清楚您的代码究竟会做什么,但是在请求页面时,您可能会立即执行sendEmail()函数 。然后,由于您没有回显任何结果,a标记如下所示:

<a href="">Send Email</a>

两件事:

  1. 电子邮件已发送。
  2. href将尝试加载当前页面或某些默认目录列表或其他内容。肯定不会调用服务器端代码。
  3. 你想要做的事情比你想象的要多一些。到目前为止,最简单的方法是将所有电子邮件功能移动到另一个页面。像sendMail.php这样的东西。然后,您在这里的页面将链接到另一个页面:

    <a href="sendMail.php">Send Email</a>
    

    当用户点击该链接时,他们会调用第二个页面,该页面本身会在内部调用sendEmail(),然后向用户显示结果。类似的东西:

    <?php
    
        // define sendEmail here like you already do
    
        sendEmail();
    
    ?>
    <p>The email has been sent.  Thank you!</p>
    

    因此发送电子邮件的请求来自一个页面,实际发送的操作是另一个页面。

    您可以通过各种方式使功能越来越丰富:

    1. 使用将值发布到sendEmail.php的表单,而不是链接,以便在撰写电子邮件时使用这些值。
    2. 不是链接到页面,而是有一个带有一些JavaScript代码的按钮,它会向sendEmail.php创建一个AJAX请求,以便在不离开当前页面的情况下发送邮件。
    3. 但基本思想是您的服务器端代码和客户端代码无法直接交互。它们由HTTP请求分隔。如果客户端代码想要调用某些服务器端功能,则需要向服务器端资源(在本例中为“页面”)发出HTTP请求,该资源执行该操作。

答案 1 :(得分:0)

您可以做的是GET指向带有<?php require 'PHPMailer-master/PHPMailerAutoload.php'; function sendEmail($email) { $mail = new PHPMailer; $mail->isSMTP(); $mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'zebalaGP@gmail.com'; // SMTP username $mail->Password = '******'; // SMTP password $mail->SMTPSecure = 'tls'; $mail->Port = 587; $mail->From = 'zebalaGP@gmail.com'; $mail->FromName = 'ana grin emoticon'; $mail->addAddress($email); // Add a recipient $mail->isHTML(true); $mail->Subject = 'blabla !'; $mail->Body = 'Salam,, <br> <b> thanks for your participation grin emoticon you are especial for us grin emoticon '; $mail->AltBody = 'This is the body in plain text for non-HTML mail clients'; if (!$mail->send()) { echo 'no'; return false; } else { echo 'sent grin emoticon'; return true; } } $email='ayaradwan_93@yahoo.com'; $r=' <a href= "your_page_file_name.php?mail='.$email.'" > Send Email </a> '; //sendEmail($email); if(isset($_GET['mail'])){ sendEmail($_GET['mail']); }else{ echo $r; } ?> 参数的php页面的链接。然后,在您的php页面中,如果设置了GET参数,则使用它们发送电子邮件。

如果你希望它是同一页面,它可能是这样的。

{{1}}

这可能是您实现所需内容的最简单方法,但我强烈建议最好的方法是提交表单或通过AJAX。