[PHP新手在这里,如果这是一个微不足道的问题请耐心等待]
我创建了一个HTML
表单,在提交时会打开submit_form.php
。在里面,我处理输入表格的数据并发送确认电子邮件。我为邮件发送过程写了一个function
在.php
文件中,我有PHP
以及HTML
代码。该文件的重要部分如下所示:
<?php
$success = "undefined";
/* ... */
function send_mail($to, $from, $fromName, $subject, $message) {
/* headers, etc. */
if (mail($to, $subject, "", $header)) {
$success = "true";
} else {
$success = "false";
}
}
?>
<html>
<body>
success? <?php echo $success; ?>
</body
</html>
现在,在成功网站上加载HTML
(HTML
脚本下面的.php
代码,在同一个文件中),我将此代码用于验证电子邮件是否已发送成功:
success? <?php echo $success; ?>
...显示以下输出:success? undefined
这将导致我得出结论,邮件尚未发送,但是,我收到了电子邮件。
我猜测在执行邮件功能之前正在显示HTML
代码。
在邮件功能完成后,有没有办法让HTML
执行?
将问题的标题从Delay site change for php function completion
更改为Variable not updating in PHP
,因为(现已修复)问题不是HTML
之前执行的PHP
,但变量未更新。
感谢@Adder!
答案 0 :(得分:2)
问题是$success
变量不在全局范围内。使用global
将其设为全局。
function send_mail($to, $from, $fromName, $subject, $message) {
global $success;
/* headers, etc. */
if (mail($to, $subject, "", $header)) {
$success = "true";
} else {
$success = "false";
}
}
变量范围表示变量可见的位置。在php中,默认情况下,函数本地的变量不会存在于全局范围内。