如何使用 href html 标签中的参数调用 php 函数

how to call php function with parameters in href html tag

我想用 href 标签中的参数调用 sendEmail($email) 函数 当我点击 link 我得到一个写在里面的页面 FORBIDDEN "you don't have permission to access the root folder on this server"

<?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;
?>

您正在混合使用服务器端代码和客户端代码。他们运行 在完全不同的时间完全不同的环境(通常)完全不同的计算机.

不清楚您的代码究竟要做什么,但很可能您在请求页面时立即执行sendEmail()函数。然后因为你没有回应任何结果,a 标签看起来像这样:

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

两件事:

  1. 邮件已发送。
  2. href 将尝试加载当前页面或某些默认目录列表或其他内容。它绝对不会调用服务器端代码。

您尝试做的事情比您想象的要复杂一些。鉴于您目前所拥有的,最简单的方法是将所有电子邮件功能移动到另一个页面。像 sendMail.php 这样的东西。然后你在这里的页面将简单地 link 到另一个页面:

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

当用户单击 link 时,他们会调用第二个页面,该页面本身会在内部调用 sendEmail(),然后向用户显示结果。类似于:

<?php

    // define sendEmail here like you already do

    sendEmail();

?>
<p>The email has been sent.  Thank you!</p>

所以发送电子邮件的请求来自一个页面,实际发送它的动作在另一个页面上。

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

  1. 而不是 link,使用将值发布到 sendEmail.php 的表单,以便在撰写电子邮件时可以使用这些值。
  2. 而不是 link 进入页面,有一个带有一些 JavaScript 代码的按钮,它创建一个 AJAX 请求到 sendEmail.php 发送邮件而不离开当前页面。
  3. 等等

但基本思想是您的服务器端代码和客户端代码不能直接交互。它们由 HTTP 请求分隔。如果客户端代码想要调用某些服务器端功能,它需要向执行该操作的服务器端资源(在本例中为 "page")发出 HTTP 请求。

您可以做的是 <a> link 到带有一些 GET 参数的 php 页面。然后,在您的 php 页面中,如果设置了 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;
}

?>

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