0

以下の例を使用して、このように配列をすべてリストするのではなく、配列をスイッチに渡す方法を尋ねます。

おそらく、すべての「ページ」をページとしてデータベースからフェッチする配列があったとします。

この方法は最もエレガントなアプローチではないと考えました。

switch($_GET['page'])
{
case 'home':
    include('home.php');
    break;
case 'oem-customers':
    include('oem-customers.php');
    break;
case 'job-shop': 
    include('job-shop.php');        
    break;
case 'anodized-magnet-coils':
    include('anodized-magnet-coils.php');
    break;
case 'design':
    include('design.php');
    break;
case 'services':
    include('services.php');
    break;
case 'black-foil':
    include('black-foil.php');
    break;  
case 'contact':
    include('contact.php');
    break;
case 'order';
    include('order.php');
    break;
default: 
    include('home.php');
}
4

7 に答える 7

5

どうですか

switch($_GET['page'])
{
case 'home':
case 'oem-customers':
case 'job-shop': 
case 'anodized-magnet-coils':
case 'design':
case 'services':
case 'black-foil':
case 'contact':
case 'order';
    include("$_GET[page].php");
    break;
default: 
    include('home.php');
}
于 2012-09-20T23:25:26.030 に答える
3

配列の例:

$pages = array(
    'oem-customers',
    'job-shop',
    'anodized-magnet-coils',
    'design',
    'services',
    'black-foil',
    'contact',
    'order' 
);

if(in_array($_GET['page'], $pages)){
    include($_GET['page'].'.php');
}else{
    include('home.php');
}
于 2012-09-20T23:25:34.547 に答える
3

マッピングを作成できます:

$mapping = array(
   'home' => 'home',
   'oem-customers' => 'oem-customers',
   #....
);

$page = $_GET['page'];
$file = isset($mapping[$page]) ? $mapping[$page] : 'home';
include($file.'.php');

または、最初にファイルを検索し、ファイルが存在するかどうかを確認し、必要に応じて追加のマッピングを使用します。注: 入力をサニタイズします。ユーザー../../etc/whateverはリクエストで送信できます。

于 2012-09-20T23:25:59.680 に答える
2

次のことができます。

switch($_GET['page']){
  case 'home':case 'oem-customers':case 'job-shop':case 'anodized-magnet-coils':
  case 'black-foil':case 'services':case 'design':case 'contact':case 'order':
    include($_GET['page'].'.php');
    break;
  default: 
    include('home.php');
}
于 2012-09-20T23:25:26.510 に答える
2

私だったら、リクエストできるスクリプトをrequests/フォルダーに移動し、次のことを行います。

$script = basename( $_GET['page'] );
$dir = 'requests/';
$file = $dir . $script . '.php';
if ( !file_exists( $file ) ) {
  $file = $dir . 'home.php';
}
include( $file );
  1. 何よりもコンパクト。
  2. 新しいページを追加するたびに自動更新されます。
  3. インクルード前にファイルの存在をチェックするビルトインチェック。
  4. requests/フォルダとが含まれているため安全basename()です。
于 2012-09-20T23:36:57.387 に答える
2

私はまったく別の方法を提案します:

$base_path = '/path/to/dir/';
$req = basename($_GET['page'] . '.php');
$page = $base_path . $req;
$file = file_exists($page) ? $page : $base_path . 'home.php'; 
include($file);
于 2012-09-20T23:37:53.437 に答える
2

$_GET['page']とページのファイル名がかなり一致しているようです。簡単なことは次のとおりです。

   $toInclude = "{$_GET['page']}.php";
   include($toInclude);

もちろん、注意が必要です。誰かがpage'../../some_other_project/delete_all_data.php' のような悪いものを渡すことであなたをだますことができます。したがって、許可するすべてのページの検証リストを保持できます。

   $validPages = array('order.php', 'home.php');
   if (!in_array($toInclude, $validPages))
       $toInclude = 'home.php';
于 2012-09-20T23:27:42.870 に答える