2012-10-23 232 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不会那样工作。