2014-10-09 14 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는 form_submit하지 않는 내부의 정확한 값이지만 $ GLOBALS [ '이름'] 출력한다. 내 코드에 어떤 문제가 있습니까?

+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의 언급은 모두이 파일이 포함 된 기능의 범위 내에서 동일한 로컬 변수를 참조합니다. 그러나 그들은 글로벌 변수 $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 서버에서 같은 파일을 테스트 한 결과 동일한 결과가 나타났습니다. 전역 변수없이 코드를 재구성 할 것입니다. –