2014-10-09 122 views
0

我在使用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']不打印。我的代码有什么问题?

+0

http://joomla.stackexchange.com/questions/55/whats-the-proper-way-to-get-the-entire-post – Cheery 2014-10-09 22:09:08

+0

@Cheery邮政工作。就像我所说的,var_dump($ name)打印正确的值,但是在我的函数中没有$ var_dump($ GLOBALS ['name'])。 – 2014-10-09 22:10:48

回答

1

鉴于您提到的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']); 
} 
+0

我怀疑它与Joomla有关,但后来我在本地MAMP服务器下测试了相同的文件,结果相同。我想我只是重构我的代码没有全局变量 – 2014-10-09 22:29:28