PHP 5.3 $ GLOBALS无法访问

时间:2014-10-09 22:02:20

标签: php superglobals

我在Joomla网站上使用PHP GLOBALS数组时遇到问题。提交表单时 调用函数form_submit,检查表单信息的有效性。出于某种原因,我可以在函数外部正确访问我的变量,但是当我尝试通过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']不会。我的代码出了什么问题?

1 个答案:

答案 0 :(得分:1)

鉴于你提到了Joomla,并且代码提到了必须在别处定义的类JFactory,我怀疑这个文件不是浏览器的直接入口点,而是包含在框架。

重要的是,如果在函数中使用了<{1}} / require ,那么包含文件中的代码也被认为是在该函数内部

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

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

$name

甚至:

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);
}