这是一个狡猾的问题......
请求页面时,页面的输出取决于传递的参数。洙:
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 );
}
这就失败了......
那么有办法解决这个问题吗?
答案 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.