Pasar un argumento que no se puede configurar en PHP
Frecuentes
Visto 86 veces
0
Esta es una pregunta dudosa...
Al solicitar una página, la salida de la página depende de los parámetros pasados. Entonces:
http://localhost/test/php?key=value
Y DE
http://localhost/test/php?key=other_value
producirá diferentes salidas.
Hay muchos de estos parámetros y, a veces, están configurados, a veces no.
Tengo este bloque de código, que sigo copiando una y otra vez:
if ( !isset( $PARAMS["type"] ) ){
$message = urlencode("No Type Parameter Defined In File {$_SERVER["PHP_SELF"]}");
header( "Location: /admin/pages/{$PARAMS["page"]}?m=$message" );
exit;
}
¡Ahora este bloque de código se repite en algunos casos unas 6 veces!
Así que pensé que podría escribir una función:
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;
}
}
OBVIAMENTE esto no funcionará
porque tendré que llamar redirect_on_fail( $PARAMS["type"] );
y si no está configurado, no se pasará a la función ...
Porque necesito probar si la variable existe en el Alcance de las páginas...
Así que podría hacer esto, supongo:
function redirect_on_fail( $message, $redirect_to ){
header( "Location: /admin/pages/$redirect_to?m=".urlencode($message) );
exit;
}
Pero luego en la página que estoy haciendo:
if ( !isset( $PARAMS["type"] ) ){
redirect_on_fail( "No Type Parameter", $redirect_to );
}
y eso anula el punto...
Entonces, ¿hay alguna forma de evitar esto?
3 Respuestas
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.
contestado el 22 de mayo de 12 a las 14:05
1
Creo que gunnx está en el camino correcto. Aquí hay un código de ejemplo. Simplemente modifique los valores en el $params
matriz según corresponda.
<?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;
}
}
contestado el 22 de mayo de 12 a las 14:05
1
$_GET
es una variable global. Fácilmente podría hacer algo como tal:
function redirect_on_fail(){
if(!isset($_GET['type'])){
// redirect
}
}
Entonces, por lo tanto, siempre podrías llamar al redirect_on_fail()
método dondequiera que esté definido.
contestado el 22 de mayo de 12 a las 14:05
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas php or haz tu propia pregunta.
¿Tienes una lista de todos los parámetros posibles? como podría comprobar si la matriz POST/GET contiene ese elemento - gunnx
Puede poner este código en un archivo e incluirlo al comienzo de la página. Tendrás esto varias veces pero en un archivo: kskaradzinski
usar $_SESSION en lugar de pasar variables? - user1299518