¿Cómo desinfectar los valores del cuadro de selección en el meta de publicación?

4

He añadido un cuadro de selección en el meta Post. Aquí está el código, y funciona bien. Mi pregunta es, ¿necesito sanear los valores antes de actualizar el meta de la publicación? En caso afirmativo, ¿cómo debería hacerse?

Así es como estoy agregando el campo meta:

<?php $value = get_post_meta( $post->ID, 'my_options', true ); ?>
<select name="my_options">
    <option value="option1" <?php selected( $value, 'option1'); ?>><?php _e('Option 1', 'textdomain'); ?></option>
    <option value="option2" <?php selected( $value, 'option2'); ?>><?php _e('Option 2', 'textdomain'); ?></option>
</select>

y así es como estoy actualizando el valor:

if ( isset( $_POST['my_options'] )){
    update_post_meta( $post->ID, 'my_options', $_POST['my_options'] );  
}
    
pregunta qasir 20.02.2015 - 10:21

2 respuestas

5

Al aceptar las entradas de datos del usuario, creo que la validación de los datos debe realizarse, si es posible, no solo el saneamiento. Por ejemplo, puede esperar un número, un valor bool, una cadena de texto (incluso cuando la entrada es un cuadro de selección puede tener un valor de cadena), etc. Puede realizar el santizado para esos tipos de datos; luego puede ir más allá y validar los datos con los valores esperados: entero, flotante, verdadero / falso, correos electrónicos, URL, etc.

Vamos con tu caja de selección. Tiene dos opciones con los valores "opción1" y "opción2", por lo que ambas son cadenas y se pueden desinfectar con sanitize_text_field :

if ( isset( $_POST['my_options'] )){

    $value = sanitize_text_field( $_POST['my_options'] );

    update_post_meta( $post->ID, 'my_options', $value );  

}

Pero un usuario puede cambiar el valor de las opciones de selección de formulario fácilmente desde el frontend, para que pueda manipular el formulario y enviar valores diferentes a "option1" o "option2" que almacenará en la base de datos. Como sabe exactamente cuáles son los valores esperados, puede realizar una limpieza y validación de datos. Por ejemplo:

if ( isset( $_POST['my_options'] )){

   $valid_values = array(
                       'option1',
                       'option2',
   );

    $value = sanitize_text_field( $_POST['my_options'] );

    if( in_array( $value, $valid_values ) ) {

        update_post_meta( $post->ID, 'my_options', $value );

    }

}

O puede definir una devolución de llamada de desinfección personalizada para la opción "my_options" y usar sanitize_meta :

if ( isset( $_POST['my_options'] ) ){

        $value = sanitize_meta( 'my_options', $_POST['my_options'], 'post' )

        update_post_meta( $post->ID, 'my_options', $value );

}

Y define la devolución de llamada de santitización:

add_filter( 'sanitize_post_meta_my_options', 'sanitize_my_options_meta' );

function sanitize_my_options_meta( $value ) {

   $value = sanitize_text_field( $value );

   $valid_values = array(
                       'option1',
                       'option2',
   );

   if( ! in_array( $value, $valid_values ) ) {

        wp_die( 'Invalid value, go back and try again.' );
    }

    return $value;
}
    
respondido por el cybmeta 20.02.2015 - 12:37
0

Puede usar cualquiera de las funciones de saneamiento integradas en Wordpress (como sanitize_text_field ). Alternativamente, si le preocupa que se inyecten elementos específicos en las opciones de selección, puede escribir su propia función de saneamiento con la función sanitize_meta .

    
respondido por el Evan Van Slooten 20.02.2015 - 10:59

Lea otras preguntas en las etiquetas