Pasar un argumento que no se puede configurar en PHP

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?

preguntado el 22 de mayo de 12 a las 14:05

¿Tienes una lista de todos los parámetros posibles? como podría comprobar si la matriz POST/GET contiene ese elemento -

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:

usar $_SESSION en lugar de pasar variables? -

3 Respuestas

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

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

$_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 or haz tu propia pregunta.