【问题标题】:PHP global variable undefined in included function [duplicate]包含函数中未定义的PHP全局变量[重复]
【发布时间】:2020-02-21 20:20:16
【问题描述】:

我正在尝试通过 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>

还有email.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() 的同上。 关于我哪里出错的任何想法?

*edit: 修复了 $headers 中的 '

【问题讨论】:

  • 您是否有理由使用全局变量而不是将其作为参数传递给函数?
  • global 放在函数之外没有任何作用。
  • 您在这个$headers = 'From: some@body.nn; 中也有一个解析错误。如果您发布的不是“那个”,那么请....发布您的真实代码。
  • $fout .= "Not sent";
  • 我尝试不使用“global”,并在不同的地方使用“global”,即使它没有意义。我认为它甚至应该在没有“全局”的情况下工作,因为我预计 akkoord.php 中的变量默认是全局的。我没有将它作为参数传递,因为我想添加更多应该出现在电子邮件中的变量,并且我认为这种方法会更容易(但仔细想想;它可能不会......)。 $fout 在 akkoord.php 中声明(但我忘记在此处包含它,因为 akkoord.php 的其余部分与此问题无关)。

标签: php email scope include


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 2014-12-08
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    相关资源
    最近更新 更多