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

私の知る限り、実行時に 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");

idまた、MySQL 列を として宣言したことを願っているのでUNIQUE、正確に 1 つの行を取得するか、"error.php"ファイルが含まれます。

于 2013-01-15T21:01:06.030 に答える