首页 > 解决方案 > 包含函数中未定义的 PHP 全局变量

问题描述

我正在尝试通过 PHP 发送一封自动电子邮件,该电子邮件会打印一些预定义的变量。如果我将 php 脚本直接写入主文件 (akkoord.php),它会按预期工作。但是,我想将脚本作为函数保存在单独的 php 文件 (email.php) 中,因为我也想将它包含在其他 php 文件中。我将脚本保存为 email.php,将其转换为函数 mail(),并将 email.php 包含在 akkoord.php 中。该函数工作并发送一封电子邮件,但变量(我在 akkoord.php 中定义的)没有通过。我认为这将是一个范围问题,所以我将它们重新定义为 email.php 中的全局变量。但是,它仍然不起作用。

(简化)Akkoord.php:

<html>
<head>

<?php
  $naam = $_GET["naam"];
  $reisnaam = $_GET["reisnaam"];
 ?>

<?php

 include'email.php';

[some other code that works fine]

email();
 ?>

</head>

<body>
[some body]
</body>

</html>

和电子邮件.php:

 global $reisnaam;
 function email(){
     global $reisnaam;
     global $naam;
     $to       = 'my_email@email.my';
     $subject  = $reisnaam ;
     $message  = 'Hello'.$naam;
     $headers  = 'From: some@body.nn';
     if(mail($to, $subject, $message, $headers))
         echo "Mail sent";
     else
         $fout .= "Not sent";
   }
 ?>

我检查了是否包含 email.php - 它是(毕竟,它确实发送了电子邮件)。函数 email() 的同上。关于我哪里出错的任何想法?

*编辑:修复了 $headers 中的 '

标签: phpemailscopeinclude

解决方案


谢谢乔希,微妙的暗示。我将变量作为参数传递,现在它可以按预期工作:

<?php
 function email($reisnaam, $naam){

     $to       = 'my_email@email.my';
     $subject  = $reisnaam ;
     $message  = 'Hello'.$naam;
     $headers  = 'From: some@body.nn';
     if(mail($to, $subject, $message, $headers))
         echo "Mail sent";
     else
         $fout .= "Not sent";
   }
?>

在 akkoord.php 我更改email()email($reisnaam,$naam).

我必须承认我不完全理解为什么第一种方法不起作用,但我很高兴这个方法起作用。谢谢!


推荐阅读