У меня проблемы с использованием массива PHP GLOBALS на сайте Joomla. Когда форма отправлена,
функция 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) печатает правильное значение, а $ GLOBALS [‘name’] внутри form_submit — нет. Что не так с моим кодом?
Учитывая ваше упоминание о 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']);
}
Других решений пока нет …