función de PHP para el cotejo de las variables externas en un único objeto, independientemente de GET o POST

StackOverflow https://stackoverflow.com/questions/524413

  •  22-08-2019
  •  | 
  •  

Pregunta

Recuerdo la revisión de otro código PHP una vez y tenía un método de función o clase que rodó todas las variables GET y POST en un único objeto viejo y simple, que luego podrían pasar alrededor. Si el mismo par nombre-valor surgieron en ambas GET y POST, POST ganaría.

¿Existe un PHP así codificado-complemento por ahí de cualquier tipo que hace exactamente esto?

¿Fue útil?

Solución

Usted podría utilizar $_REQUEST , pero tenga en cuenta que contiene el contenido de $_GET, $_POST y $_COOKIE, y que la presencia (y el orden, para sobrescribir los propósitos) de las variables en este superglobal está sujeta a la configuración en el entorno de ejecución.

Si esto está causando problemas, podría ser una buena idea para enrollar una versión simple, el quid de lo que sería algo así como

$requestData = array_merge( $_GET, $_POST );

A continuación, puede terminar con esto de alguna manera, tal vez proporcionar funcionalidad adicional útil, por ejemplo, aplicar automáticamente a los valores stripslashes() destrozados usando magic_quotes, que proporciona valores por defecto para las variables que faltan, etc.

Otros consejos

La fusión de ambas variables (o usando $_REQUEST o Register Globals vez ) puede causar problemas de seguridad ya que no puede identificar definitivamente la fuente de sus valores. Así que cuando se accede a $_REQUEST['foobar'] no se puede saber si el valor se ha enviado a través de URL, el cuerpo POST o Cookie. Esto puede hacer que la escritura vulnerables para Cross-Site Request Falsificación .

Así que os recomiendo ir para la seguridad sobre la comodidad y el uso de estas variables en los que espera sus valores vienen. $_GET para los argumentos que se espera que ser aprobado por el URL, $_POST para los aprobados a través de POST y $_COOKIE para las cookies.

Me considero una mala práctica a confundir con $_GET $_POST. Están destinadas a cosas completamente diferentes, y tratándolos como iguales, que están haciendo mal uso de manera efectiva el protocolo HTTP. Como se ha mencionado, $_REQUEST hace lo que quiere, pero es un poco impredecible. Desde aquí se puede escribir su propia función global para hacer lo mismo:

function param($name, $default = null) {
  return isset($_POST[$name])
    ? $_POST[$name]
    : (isset($_GET[$name])
      ? $_GET[$name] 
      : $default);
}

Pero en realidad .. es una mala práctica.

puede utilizar $ _REQUEST variable global. que se define por el PHP interpretado de forma predeterminada cuando se ejecuta la aplicación en SAPI Web (CGI o módulo de servidor web), que es el caso de su aplicación cuando está escribiendo aplicaciones basadas en web utilizando PHP. $ _REQUEST es una matriz asociativa de todos los datos en $ _GET y $ _POST y se define por defecto. no se necesita ninguna extensión / Librari utilizarlo.

Esta es la clase de mi marco que maneja globales en toda la aplicación. Sin procesamiento de las variables se hace aquí.

class stGlobal

{

//instance
private static $instance;

//global settings
public $post = '';
public $get = '';
public $files = '';
public $request = '';

private function initialize()
{
    $this->post = $_POST;
    $this->get = $_GET;
    $this->files = $_FILES;
    $this->request = $_REQUEST;
}

public function getInstance()
{
    if (!isset(self::$instance))
    {
        $class = __CLASS__;
        self::$instance = new $class();
        self::$instance->initialize();
    }
    return self::$instance;
}

}

Para utilizarlo en cualquier lugar

$myObj = stGlobal::getInstance();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top