0

これは危険な質問です...

ページをリクエストする場合、ページの出力は渡されたパラメータによって異なります。Soo:

http://localhost/test/php?key=value

http://localhost/test/php?key=other_value

異なる出力を生成します。

これらのパラメータはたくさんあり、設定されている場合と設定されていない場合があります。

私はこのコードブロックを持っており、それを何度もコピーし続けています:

if ( !isset( $PARAMS["type"] ) ){
    $message = urlencode("No Type Parameter Defined In File {$_SERVER["PHP_SELF"]}");
    header( "Location: /admin/pages/{$PARAMS["page"]}?m=$message" );
    exit;
}

これで、このコードブロックが約6回繰り返される場合があります。

だから私は関数を書くことができると思いました:

function redirect_on_fail( $var ){
    if ( !isset( $var ) ){
        $message = urlencode("No Type Parameter Defined In File {$_SERVER["PHP_SELF"]}");
        header( "Location: /admin/pages/index?m=$message" );
        exit;
    }
}

明らかにこれは機能しません

呼び出す必要があるためredirect_on_fail( $PARAMS["type"] );、設定されていない場合、関数に渡されません...

変数がページスコープに存在するかどうかをテストする必要があるため...

だから私はこれを行うことができたと思います:

function redirect_on_fail( $message, $redirect_to ){
    header( "Location: /admin/pages/$redirect_to?m=".urlencode($message) );
    exit;
}

しかし、私がやっているページでは:

if ( !isset( $PARAMS["type"] ) ){
    redirect_on_fail( "No Type Parameter", $redirect_to );
}

そしてそれはポイントを打ち負かします...

それで、これを回避する方法はありますか?

4

3 に答える 3

1
function redirect_on_fail () {
  $args = func_get_args();
  $params = array_shift($args);
  foreach ($args as $arg) {
    if (!isset($params[$arg])) {
      $message = urlencode("No $arg Parameter Defined In File {$_SERVER['PHP_SELF']}");
      header("Location: /admin/pages/index?m=$message");
      exit;
    }
  }
}

// Call it like:
redirect_on_fail($_GET, 'required_key', `another_required_key`);
// Basically takes an array as the first argument, then the required keys as
// subsequent arguments, and redirects the user if any of them are not set.
// Pass as many required key names as you like.
于 2012-05-22T13:13:30.330 に答える
1

gunnxは正しい方向に進んでいると思います。ここにいくつかのサンプルコードがあります。$params必要に応じて、配列の値を変更するだけです。

<?php

$params = array('foo', 'bar', 'baz');
foreach ($params as $param) {
  if (!isset($PARAMS[$param])) {
    $message = urlencode("No {$param} Parameter Defined In File {$_SERVER['PHP_SELF']}");
    header( "Location: /admin/pages/index?m=$message" );
    exit;
  }
}
于 2012-05-22T13:10:49.097 に答える
1

$_GETグローバル変数です。あなたはそのようなことを簡単に行うことができます:

function redirect_on_fail(){
    if(!isset($_GET['type'])){
        // redirect
    }
}

したがって、redirect_on_fail()メソッドが定義されている場所ならどこでも、いつでもメソッドを呼び出すことができます。

于 2012-05-22T13:11:34.263 に答える