2012-10-23 73 views
0

我有一個會話保護「admin.php」的文件。這是登錄後的默認頁面。 該投擲如下錯誤:調用未定義的函數錯誤偶函數被定義

Fatal error: Call to undefined function listPages() in C:\xampp\htdocs\cd-website\cms\admin.php on line 14

<?php 
/* 
* initialize session for admin 
*/ 
session_start(); 

if(isset($_SESSION['admin_user'])) 
{ 
    require_once '../cms/config.php'; 

    $action = isset($_POST['action']) ? $_POST['action'] : ''; 

    if ($action == null) 
    { 
     listPages(); 
     exit; 
    } 

    /* 
    * using switch for choosing function 
    */ 
    switch($action) 
    { 
     case 'ManagePages': 
      ManagePages(); 
      break; 
     case 'listUsers': 
      listUsers(); 
      break; 
     case 'orderList': 
      listOrders(); 
      break; 
     case 'listBanner': 
      listBanners(); 
      break; 
     case 'NewsletterUser': 
      NewsletterUsers(); 
      break; 
     case 'Newsletter': 
      Newsletter(); 
      break; 
     case 'listQuestion': 
      listquestions(); 
      break; 
     case 'testinomial': 
      listTesti(); 
      break; 
     default: 
      listPages(); 
    } 

    /* 
    * different function for different tasks 
    */ 
    function ManagePages() 
    { 
     listPages(); 
    } 

    function listUsers() 
    { 
     // include listusers.php here. required rows is in listusers.php file 
    } 

    function listOrders() 
    { 
     // include listorders.php here 
    } 

    function listBanners() 
    { 
     // include listbanners.php here 
    } 

    function NewsletterUsers() 
    { 
     // include listNUsers.php here 
    } 

    function listquestions() 
    { 
     // include listquestions.php here. 
    } 

    function listTesti() 
    { 
     // include listTesti.php here. 
    } 

    function Newsletter() 
    { 
     // include newsletter.php 
    } 

    function listPages() 
    { 
     // include listPages.php here 
    } 
} 
else 
{ 
    header("Location:index.php"); 
} 

當我嘗試解決第14行錯誤,它顯示在哪裏listPages()存在的每一行的錯誤。

爲什麼會這樣呢?請幫忙!

+0

doesn; t似乎有任何錯誤,雖然它的編碼非常複雜的方式 – diEcho

+0

沒有發現錯誤;請參閱[使用最小設置的工作演示](http://codepad.viper-7.com/abxLmp) – diEcho

+0

@diEcho如果代碼中沒有錯誤,爲什麼我會在此處發帖。我沒有生氣,也沒有其他正在迴應的人。在寫任何東西之前想一下。 – geekhere

回答

0

這裏有兩個解決方案是一個療法使用級,上述方法 如果您使用的是函數應該調用該函數之前定義上述方法。

所以

function listPages() 
    { 
           //include listPages.php here 
    } 

after that call listPages() 
+0

嗯....它工作,但我有一個相同類型的代碼工作正常。爲什麼如此。順便謝謝Naveen! – geekhere

8

你宣佈if塊,這可能會非常棘手裏面的函數。據http://www.php.net/manual/en/functions.user-defined.phpconditional functions,他們將無法使用,直到執行到達函數的定義,但如果你把外面的功能,順序並不重要,作用在整個腳本可用。

<?php 
bar(); // OK 
function bar() 
{ 
    echo "I exist immediately upon program start.\n"; 
} 

if (TRUE) { 
    foo(); // Fails because `foo` isn't defined yet. 
    function foo() 
    { 
    echo "I don't exist until program execution reaches me.\n"; 
    } 
} 

並請檢查http://codepad.org/EMW3kzqC

因此,解決方案是在if塊之外聲明函數,或者將它們放在使用它的位置之上(如果它確實需要駐留在if塊內)。

+0

感謝您的有用信息。我也在想。 – geekhere

+0

不,它不對。 PHP不像JS – diEcho

+0

那樣以分塊的方式解析整個文件,但是'if'條件與會話變量有關。它可用的會話不會退出,整個代碼塊將不會執行。 – diEcho

0

我不是特別熟悉PHP,但它看起來像你只在大的,如果有塊定義你的函數。您可能會遇到php處理範圍的方式。

試着將你的函數定義之外,如果塊的,看看會發生什麼?

0
<?php 
/* 
* initialize session for admin 
*/ 
session_start(); 

if(isset($_SESSION['admin_user'])) 
{ 
    require_once '../cms/config.php'; 

    $action = isset($_POST['action']) ? $_POST['action'] : ''; 

    if ($action == null) 
    { 
     listPages(); 
     exit; 
    } 


    /*Functions */ 
    function ManagePages() 
    { 
     listPages(); 
    } 

    function listUsers() 
    { 
     // include listusers.php here. required rows is in listusers.php file 
    } 

    function listOrders() 
    { 
     // include listorders.php here 
    } 

    function listBanners() 
    { 
     // include listbanners.php here 
    } 

    function NewsletterUsers() 
    { 
     // include listNUsers.php here 
    } 

    function listquestions() 
    { 
     // include listquestions.php here. 
    } 

    function listTesti() 
    { 
     // include listTesti.php here. 
    } 

    function Newsletter() 
    { 
     // include newsletter.php 
    } 

    function listPages() 
    { 
     // include listPages.php here 
    } 


    /* 
    * using switch for choosing function 
    */ 
    switch($action) 
    { 
     case 'ManagePages': 
      ManagePages(); 
      break; 
     case 'listUsers': 
      listUsers(); 
      break; 
     case 'orderList': 
      listOrders(); 
      break; 
     case 'listBanner': 
      listBanners(); 
      break; 
     case 'NewsletterUser': 
      NewsletterUsers(); 
      break; 
     case 'Newsletter': 
      Newsletter(); 
      break; 
     case 'listQuestion': 
      listquestions(); 
      break; 
     case 'testinomial': 
      listTesti(); 
      break; 
     default: 
      listPages(); 
    } 

    /* 
    * different function for different tasks 
    */ 

} 
else 
{ 
    header("Location:index.php"); 
} 
+0

爲了將來的參考,如果您回答了一個問題,請包含一個解釋,說明您在提供的代碼中所做的更改。否則,我們如何知道您已更正並更改了哪些內容? – Studocwho

0

檢查您的功能是否在調用之前設置。在PHP中你必須在調用它們之前聲明函數。

你的錯誤顯然是說,當你調用listPages()這個功能還不存在。

if(isset($_SESSION['admin_user'])) 
{ 

聲明此功能

function listPages() 
{ 
    //Do something here 
} 

你的錯誤將會消失的:

我如果把剛過敢肯定。

我可以看到你正試圖在結構代碼中使用函數,因爲它們會在某些類(面向對象的代碼)中,而且不幸的是PHP不會那樣工作。