1

セッションで保護された「admin.php」ファイルがあります。ログイン後のデフォルトページです。これにより、以下のエラーがスローされます。

致命的なエラー: C:\xampp\htdocs\cd-website\cms\admin.php の 14 行目の未定義関数 listPages() の呼び出し

<?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()存在するすべての行にエラーが表示されます。

なぜそうなのですか?助けてください!

4

5 に答える 5

10

ブロック内で関数を宣言しましたがif、これは扱いにくい場合があります。http://www.php.net/manual/en/functions.user-defined.php条件付き関数によると、実行が関数定義に到達するまで使用できませんが、関数を外側に配置すると、シーケンス重要ではなく、関数はスクリプト全体で使用できます。

<?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ブロック内に存在する必要がある場合)。

于 2012-10-23T05:25:50.457 に答える
0

呼び出す前に、関数が設定されているかどうかを確認してください。PHPでは、関数を呼び出す前に関数を宣言する必要があります。

エラーは、呼び出したときにlistPages()この関数がまだ存在しないことを明確に示しています。

あなたが直後に配置するかどうかは確かです:

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

この関数の宣言

function listPages()
{
    //Do something here
}

エラーは消えます。

私が見ることができるものあなたは、あるクラス(オブジェクト指向コード)のように構造コードで関数を使おうとしていますが、残念ながらPHPはそのようには機能しません。

于 2013-01-15T14:03:34.807 に答える
0

私はphpに非常に精通しているわけではありませんが、関数を大きなifブロック内でのみ定義しているようです。PHP がスコープを処理する方法に遭遇している可能性があります。

関数定義を if ブロックの外に置いてみて、何が起こるか見てみましょう。

于 2012-10-23T05:29:21.017 に答える
0

上記のメソッドを使用している場合は、その関数を呼び出す前に関数を定義する必要があります。

それで

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

after that call listPages()
于 2012-10-23T05:23:45.340 に答える
-1
<?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");
}
于 2012-10-23T05:34:02.023 に答える