我有一个会话安全的文件“admin.php”。这是登录后的默认页面。 这引发了以下错误:
致命错误:在第14行的C:\ xampp \ htdocs \ cd-website \ cms \ admin.php中调用未定义的函数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()
存在的每一行显示错误。
为什么会这样?请帮忙!
答案 0 :(得分:8)
您在if
块中声明了一个函数,这可能很棘手。根据{{3}},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";
}
}
所以解决方案是在if
块之外声明函数,或者将它们放在你使用它的位置之上(如果它真的需要驻留在if
块中)。
答案 1 :(得分:0)
这里有两个解决方案,其中一个是使用Class,上面的方法 如果您使用上述方法,则应在调用该函数之前定义该函数。
所以
function listPages()
{
//include listPages.php here
}
after that call listPages()
答案 2 :(得分:0)
我对php并不是特别熟悉,但看起来你只是在那里的大if块中定义你的函数。你可能正在遇到php处理范围的方式。
尝试将您的函数定义放在if块之外,看看会发生什么?
答案 3 :(得分: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");
}
答案 4 :(得分:0)
在通话前检查您的功能是否已设定。在PHP中,您必须在调用函数之前声明函数。
您的错误清楚地告诉您,当您致电listPages()
时,此功能尚不存在。
我确定你是否放在后面:
if(isset($_SESSION['admin_user']))
{
声明此功能
function listPages()
{
//Do something here
}
你的错误会消失。
我可以看到你正在尝试在结构代码中使用函数,就像它们在某个类(面向对象的代码)中一样,并且不幸的是PHP不会那样工作。