基于会话的闪存消息在 PHP 代码的其他部分不起作用


Session based flash message doesn't work in else part of PHP code

在我的联系人.php页面中,我在通过验证后向管理员和用户发送电子邮件。代码如下所示:

// If any validation error occurs
if(count($errors) > 0)
{
  // show error messages
}
else
{
  // sending emails to admin and user
  set_flash_msg('msg', 'Thank you for contacting us.', 'success');
  redirect_to('contact');
}

但是else部分相关的闪存消息中的代码不起作用。如果我将此代码放在if部分中,那么它可以毫无问题地工作。函数 set_flash_msg() 负责创建基于会话的 flash 消息。其代码如下:

// Set flash message
function set_flash_msg($name, $msg, $class)
{
    global $name;
    if(empty($_SESSION[$name]) && empty($_SESSION[$name . '_class']))
    {
        $_SESSION[$name] = $msg;
        $_SESSION[$name . '_class'] = $class;
    }
}

为了显示此消息,在上面的代码下面调用了另一个函数,如下所示:

// Show flash message
get_flash_msg();

会话设置没有问题,因为if部分,它可以正常工作。在我的后端也使用相同的逻辑和编码流程,我在添加新页面时设置闪存消息并在页面列表页面上显示闪存消息.php。如果它在那里工作,那么为什么它在我的前端联系人.php页面上不起作用?知道吗?

>在我的联系人.php页面中,我正在抓取表单值,特别是"名称",如下所示:

// Preparing form variables
$name = isset($_POST['txtname']) ? $db_obj->sanitize_input($_POST['txtname']) : '';

局部变量$name与 set_flash_msg() 函数中的全局变量$name冲突。在上面的代码中将$name更改为$uname解决了这个问题。