2014-10-09 4 views
0

У меня возникают проблемы с использованием массива 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 ($ название) печатает правильное значение, но $ GLOBALS [ 'имя'] внутри form_submit не делает. Что не так с моим кодом?

+0

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

+0

@Cheery Почтовые работы. Как я уже сказал, var_dump ($ name) печатает правильное значение, но $ var_dump ($ GLOBALS ['name']) внутри моей функции нет. –

ответ

1

Учитывая ваше упоминание о Joomla и упоминание кода класса JFactory, которое должно быть определено в другом месте, я подозреваю, что этот файл не является прямой точкой входа в браузер, но включен в структуру.

Причина, что имеет значение в том, что если require/include используются внутри функции, то код в прилагаемом файле считается внутри этой функции, а также.

Итак, ваши упоминания о $name в этом файле все ссылаются на ту же локальную переменную, в рамках любой функции, из которой этот файл включен. Но они не относятся к переменной global переменной $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 и получал те же результаты. Думаю, я просто реструктурирую свой код без глобальных переменных –