0

私はいくつかのウェブサイトを見ました (たとえば): メッセージ ボックスを表示したい場合は、次のようになります:example.com/file.php?action=pmまた、メッセージを再度送信する場合は、アドレスとファイルは同じですが、$_GETが異なります:example.com/file.php?action=sendpm

それはどのように機能しますか?

それはただですか:

if ($_GET['action'] == "pm")
{
    //lots of html code(divs, forms, etc) paste here for action=pm.
}
else
{
    //lots of html code paste here for action=send
}

ファイルを持つ代わりに: pm.php、send.php ...?またはメカニズムが異なりますか?

SMF がこのメカニズムを使用しているのを見ました。また、facebook.com/?ref=something でこのようなものを見ました。

それはどのように機能しますか?

4

3 に答える 3

6

最も簡単な方法は次のとおりです。

$action = isset($_GET['action']) ? $_GET['action'] : 'default';
if(!in_array($action, array('list', 'of', 'allowed', 'pages')))
    $action = 'default';
include($action . '.php');

検証ステップは非常に重要であることに注意してください。値を適切に検証しないと、スクリプトがアクセスできるファイルをユーザーが読み取ることができるという厄介なセキュリティ ホールが発生し、ユーザーが任意のコードを実行できるようになります。

質問で提案したようにすべてのコードを単一のファイルに入れることは、コードが読めなくなるため、悪い考えです。特に、質問が示唆するように同じファイルに PHP と HTML を混在させる場合 (ヒント: テンプレート エンジンを使用してください!)。

于 2012-06-14T10:23:54.347 に答える
1

これはルーティングと呼ばれ、単一のアプリケーション内の多くの機能への単一のエントリポイントを許可します。

リクエストは取得され、処理され、修正機能にルーティングされます。このルーティングパターンは、コードを整理するためのModel View Controller(MVC)パターンによく適合します。

Zend FrameworkがMVCとルーティングをどのように記述しているかを見てください:http: //framework.zend.com/manual/en/learning.quickstart.intro.html#learning.quickstart.intro.mvc

于 2012-06-14T10:31:47.000 に答える
0

switch ステートメントを使用できます。例えば

 example.com/file.php?action=pm or example.com/file.php?action=sendpm


if (isset($_REQUEST['action'])) {
$param = $_REQUEST['action'];
    switch($param) {
    case "pm":
        // Code goes here
        break;
    case "sendpm":
        // Do something here
        break;
    default:
        // handle the default case
        break;
    }
} else {
    // Handle it here
}

まあ、それを行う他の方法もあります!! Switchは最も簡単な方法の1つです!!

于 2012-06-14T10:24:57.020 に答える