0

我有以下 PHP 代码:

//switch
if (isset($_GET['pg']))
    $pg = $_GET['pg'];

else{
    $pg = 'home';
    }

switch ($pg){
    case 'home':
        if (file_exists("pages/home.php")){
            include("pages/home.php");}
        break;

    case 'about':
        if (file_exists("pages/about.php")){
            include("pages/about.php");}
        else{include_once("error.php");}
        break;

    case 'products':
        if (file_exists("pages/products.php")){
            include("pages/products.php");}
        else{include_once("error.php");}
        break;

    case 'contact':
        if (file_exists("pages/contact.php")){
            include("pages/contact.php");}
        else{include_once("error.php");}
        break;


    default:
        if (file_exists("error.php")){
        include("error.php");}
}
?>

如何通过 MySQL 查询进行此切换?我尝试过这样的事情,但不幸的是不起作用:

$SQLquery = "SELECT * FROM pages";
$result = mysql_query($SQLquery);

switch ($pg){
while($row = mysql_fetch_array($result)) {
    case $row['id']:
        include($row['id'].'.php');
        break;
}
}
4

1 回答 1

2

AFAIK,您不能在运行时动态定义 switch 语句。这些控制结构在代码运行之前被解析,以后不能更改(如果我错了,请纠正我)。

我会尝试这样的事情:

while($row = mysql_fetch_array($result)) {
    if($row['id'] == $pg){
        include($row['id'].'.php');
        break;
    }
}


编辑:再想一想,@Marc M 作为对该问题的评论发布的解决方案要好得多。做这个:

$SQLquery = "SELECT * FROM pages WHERE id='" . $pg ."';";
$result = mysql_query($SQLquery);

if($row = mysql_fetch_array($result))
    include($row['id'].'.php');
else
    include("error.php");

并且由于您希望已将 MySQL 列声明idUNIQUE,因此您要么得到精确的一行,要么"error.php"将包含您的文件。

于 2013-01-15T21:01:06.030 回答