我在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 :(得分: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);
}