FAQ
Buenas,

Quería consultaros un comportamiento extraño de la función filter_input,
a ver si alguien puede echarme una mano.

El problema surge cuando intento comprobar variables de $_GET puestas "a
pelo".

Ejemplo

<?php
echo "<pre>";
$_GET['valor'] = "texto, texto, texto.";
print_r($_GET);

if (filter_input(INPUT_GET, 'valor', FILTER_SANITIZE_STRING))
echo "OK";
else
echo "NOK";

?>

La salida es NOK, indicando que filter_input ha fallado.

Sin embargo, si comentamos la segunda línea (en la que se asigna valor a
$_GET) y ejecutamos pasando el parámetro en la URL
(prueba.php?valor=texto,%20texto,%20texto.) el resultado es OK.

Parece como si filter_input no encontrara la variable si se establece
por programa.

¿Puede alguien explicarme porqué funciona de este modo?

Gracias,


--
Miguel Jaque Barbero
Ilke Benson

Search Discussions

  • Antonio Galicia at Oct 22, 2008 at 4:35 pm

    2008/10/22 Miguel Jaque Barbero <mjaque@ilkebenson.com>:

    $_GET['valor'] = "texto, texto, texto.";

    if (filter_input(INPUT_GET, 'valor', FILTER_SANITIZE_STRING))
    Parece como si filter_input no encontrara la variable si se establece por
    programa.

    ¿Puede alguien explicarme porqué funciona de este modo?
    El filter_input no revisa el contenido de las supervariables sino lo
    que está en en stack SAPI.

    Revisa lo que dicen aquí[1], seguro te resolverá muchas dudas.

    Ahora, la pregunta es ... ¿para qué asigna un valor a una variable automática?

    --
    Saludos,
    PP
    -----------------------------------
    Soy Borracho, no alcohólico
    Los alcohólicos van a reuniones

    http://devzone.zend.com/node/view/id/1113
  • Miguel Jaque Barbero at Oct 23, 2008 at 7:43 am
    Gracias por la ayuda,

    Explico los motivos de un código tan poco ortodoxo.

    Estoy creando una clase Parametro. Esta clase es utilizada por las
    clases de Interfaz de Usuario de mi aplicación que son las responsables
    de la entrada y salida de datos de usuario (siguiendo la metodología GRASP).

    La clase Parametro debe leer un parametro del POST y entregárselo a la
    clase de IU debidamente filtrado. Por ejemplo

    function login(){
    $parametro = new Parametro('nombre');
    $nombre = $parametro->valor;
    $parametro = new Parametro('clave');
    $clave = $parametro->valor;
    ...
    $this->controlador->login($nombre, $clave);
    }

    La clase Parametro funciona correctamente, pero estoy intentando
    programar pruebas unitarias para la clase Parametro con PHPUnit. Y para
    preparar las pruebas unitarias tengo que fijar por programa los valores
    de POST para luego llamar a los métodos y comprobar el resultado.

    El problema es que al establecer $_POST por programa, la función de
    filtro de la clase Parametro falla. Es decir, no falla el programa, pero
    falla la prueba unitaria.

    Si alguien tiene interés, le puedo enviar la clase Parametro y las
    pruebas que quiero realizar, pero no quiero sobrecargar el mail.

    En fin, la cosa tiene poca solución por lo que veo.

    Gracias de todos modos.


    Miguel Jaque Barbero
    Ilke Benson



    Antonio Galicia escribió:
    2008/10/22 Miguel Jaque Barbero <mjaque@ilkebenson.com>:
    $_GET['valor'] = "texto, texto, texto.";

    if (filter_input(INPUT_GET, 'valor', FILTER_SANITIZE_STRING))
    Parece como si filter_input no encontrara la variable si se establece por
    programa.

    ¿Puede alguien explicarme porqué funciona de este modo?
    El filter_input no revisa el contenido de las supervariables sino lo
    que está en en stack SAPI.

    Revisa lo que dicen aquí[1], seguro te resolverá muchas dudas.

    Ahora, la pregunta es ... ¿para qué asigna un valor a una variable automática?
  • Mauricio Cuenca at Oct 23, 2008 at 9:35 am
    Hola Miguel,
    Te recomiendo que le eches un vistazo a SimpleTest, es un framework de
    pruebas para PHP que tiene lo que seguramente estás buscando:

    http://www.lastcraft.com/form_testing_documentation.php

    --
    ________________________
    Mauricio Cuenca


    2008/10/23 Miguel Jaque Barbero <mjaque@ilkebenson.com>
    Gracias por la ayuda,

    Explico los motivos de un código tan poco ortodoxo.

    Estoy creando una clase Parametro. Esta clase es utilizada por las clases
    de Interfaz de Usuario de mi aplicación que son las responsables de la
    entrada y salida de datos de usuario (siguiendo la metodología GRASP).

    La clase Parametro debe leer un parametro del POST y entregárselo a la
    clase de IU debidamente filtrado. Por ejemplo

    function login(){
    $parametro = new Parametro('nombre');
    $nombre = $parametro->valor;
    $parametro = new Parametro('clave');
    $clave = $parametro->valor;
    ...
    $this->controlador->login($nombre, $clave);
    }

    La clase Parametro funciona correctamente, pero estoy intentando programar
    pruebas unitarias para la clase Parametro con PHPUnit. Y para preparar las
    pruebas unitarias tengo que fijar por programa los valores de POST para
    luego llamar a los métodos y comprobar el resultado.

    El problema es que al establecer $_POST por programa, la función de filtro
    de la clase Parametro falla. Es decir, no falla el programa, pero falla la
    prueba unitaria.

    Si alguien tiene interés, le puedo enviar la clase Parametro y las pruebas
    que quiero realizar, pero no quiero sobrecargar el mail.

    En fin, la cosa tiene poca solución por lo que veo.

    Gracias de todos modos.


    Miguel Jaque Barbero
    Ilke Benson

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedOct 22, '08 at 10:11a
activeOct 23, '08 at 9:35a
posts4
users3
websitephp.net

People

Translate

site design / logo © 2022 Grokbase