传递可能未在PHP中设置的参数

时间:2012-05-22 13:01:48

标签: php

这是一个狡猾的问题......

请求页面时,页面的输出取决于传递的参数。洙:

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 );
}

这就失败了......

那么有办法解决这个问题吗?

3 个答案:

答案 0 :(得分: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;
  }
}

答案 1 :(得分:1)

$_GET是一个全局变量。你可以轻松地做一些事情:

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

因此,无论在何处定义,您都可以调用redirect_on_fail()方法。

答案 2 :(得分: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.