0

だから、私は変数を関数に変えようとしています。

$go_menu=$_POST['menu'];
$go_menu();

Function potoato_chip()
{
    echo "I like Doritos!";
}

Function apples()
{
    echo "I like Fuji";
}

からデータを取得して$go_menu=$_POST['menu']いますが、以下のすべてが$go_menu();空白になっています。

完全なコードはここにペーストビンにあります。助けに感謝します!まだ勉強してる!

4

3 に答える 3

2
  1. 呼び出す前に、呼び出し可能であることを確認してください。

    $go_menu = $_POST['menu'];
    
    if(is_callable($go_menu))
        $go_menu();
    
  2. 有効な値の配列を保持します。これにより、「コンテンツなし」の問題セキュリティの問題の両方が解決されます。

    $valid_actions = array('potato_chip', 'apples');
    
    if(isset($_POST['menu']) && in_array($go_menu = $_POST['menu'], $valid_actions)) {
        $go_menu();
    }
    
于 2012-07-05T22:03:32.730 に答える
1

これを行うべきではありません: POST からその値を取得したばかりのときに変数を関数として実行するのは非常に安全ではありません! 特に、管理インターフェイスを作成しているためです。必要に応じて、悪意のある人物がコード内の他の機能を実行する可能性があります。

何が起こる必要があるかを制御するには、if ステートメントまたは switch ステートメントを使用する必要があります。

PHPのFunctionように書く必要があることに注意してください。function

于 2012-07-05T21:58:39.990 に答える
0

まず、あなたのコードは信じられないほど安全ではありません。私があなたのフォームを編集し、POSTリクエスト設定$_POST['menu']を に送信するとしましょうdie。これにより、プログラムがクラッシュします。これで他に何ができるか想像してみてください。これを行う正しい方法は次のswitchとおりです。

switch $_POST['menu'] {
    case "menu_1":
        menu_1();
        break;
    case "menu_2":
        menu_1();
        break;
    [...]
}

一般的に言えば、変数の可能な値を追跡するのが難しいため、変数変数または変数関数を使用するのは好きではありません。ただし、ミニテックの回答のように、適切に検証されている場合は引き続き使用できます。ただし、あなたの場合、呼び出すことができる関数の選択が限られているように見えるので、 を使用しますswitch

于 2012-07-05T22:05:35.027 に答える