PHP 5.3$GLOBALS不可访问


PHP 5.3 $GLOBALS Not Accessible

我在Joomla网站中使用PHP GLOBALS数组时遇到问题。当提交表格时,在检查表单信息的有效性的地方调用函数formsubmit。出于某种原因,我可以在函数外正确访问变量,但当我试图通过GLOBALS数组访问它们时,却一无所获。

<?php
//THIS CODE CREATES THE ADD COURSE FORM
 //CONNECT TO SERVER
require('../database2/includes/connect.php');
//GET LOGGED IN USER INFO
$user = JFactory::getUser();
$user_id = $user->id;
$user_name = $user->name;
$category_query = $conn->query('SELECT * FROM category');
$category_query->setFetchMode(PDO::FETCH_ASSOC);

$name = $_POST['name'];
$description = $_POST['description'];
$category_id = $_POST['dropdown'];
$crn = $_POST['crn'];
$password_init = $_POST['password_init'];
$password_rt = $_POST['password_rt'];
$password = md5($password_init);

function form_submit()
{
    var_dump($GLOBALS['name']); //Dumps null
    global $name //Doesn't work either
    if (empty($name) || empty($description) || empty($crn) || empty($password_init) || empty($password_rt))
    {
        echo "<b style='color:red'>* $name</b><br>";
        echo "<b style='color:red'>* $description</b><br>";
        echo "<b style='color:red'>* $crn</b><br>";
        echo "<b style='color:red'>* $password_init</b><br>";
        echo "<b style='color:red'>* $password_rt</b><br>";
    }
}

if(isset($_POST['Submit']))
{
    var_dump($name); //Dumps correct value
    form_submit();
}
?>

var_dump($name)会打印正确的值,但form_submit中的$GLOBALS['name']不会。我的代码出了什么问题?

鉴于您提到Joomla,以及代码提到必须在其他地方定义的类JFactory,我怀疑该文件不是浏览器的直接入口点,而是由框架包含的。

重要的原因是,如果require/include在函数内使用,则所包含文件中的代码也被认为在该函数内。

因此,您在该文件中提到的$name都引用了相同的本地变量,在该文件包含的任何函数的范围内。但它们并没有引用全局变量$name。顺便说一句,函数声明仍然创建全局函数,因为PHP没有嵌套/局部函数。

最简单的解决方案是改掉使用全局变量的习惯,这样你就不必担心这个问题了。在这种情况下,您正在定义一个函数,这样您就可以根据需要传递该函数所需的信息;然后,如果您需要根据不同的组合来调用它,您可以,而不必重新定义一个全局变量来适应每种情况。

function form_submit($name, $description, $crn, $password_init, $password_rt)
{
    if (empty($name) || empty($description) || empty($crn) || empty($password_init) || empty($password_rt))
    {
        echo "<b style='color:red'>* $name</b><br>";
        echo "<b style='color:red'>* $description</b><br>";
        echo "<b style='color:red'>* $crn</b><br>";
        echo "<b style='color:red'>* $password_init</b><br>";
        echo "<b style='color:red'>* $password_rt</b><br>";
    }
}
if(isset($_POST['Submit']))
{
    form_submit($name, $description, $crn, $password_init, $password_rt);
}

甚至:

if(isset($_POST['Submit']))
{
    form_submit($_POST['name'], $_POST['description'], $_POST['crn'], $_POST['password_init'], $_POST['password_rt']);
}