如何清理后元中的选择框值?

时间:2015-02-20 作者:qasir

我在Post meta中添加了一个选择框。这是代码,它工作得很好。我的问题是,我是否需要在更新post 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>
这就是我更新值的方式:

if ( isset( $_POST[\'my_options\'] )){
    update_post_meta( $post->ID, \'my_options\', $_POST[\'my_options\'] );  
}

2 个回复
最合适的回答,由SO网友:cybmeta 整理而成

在接受用户数据输入时,我认为如果可能,必须执行数据验证,而不仅仅是清理。例如,您可以期望一个数字、一个布尔值、一个文本字符串(即使输入是一个选择框,它也可以有一个字符串值),等等。您可以为该数据类型调整大小;然后,您可以进一步根据预期值验证数据:整数、浮点、真/假、电子邮件、URL等。

让我们使用您的选择框。它有两个值为“option1”和“option2”的选项,因此这两个值都是字符串,可以用sanitize_text_field:

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

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

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

}
但是用户可以从前端轻松地更改表单选择选项的值,这样他/她就可以操纵表单并发送不同于“option1”或“option2”的值,您将把这些值存储在数据库中。由于您确切知道期望值是什么,因此可以执行数据清理和数据验证。例如:

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 );

    }

}
或者,您可以为“my\\u options”选项定义自定义清理回调并使用sanitize_meta:

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

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

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

}
并定义santitization回调:

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;
}

SO网友:Evan Van Slooten

您可以使用Wordpress中内置的任何卫生功能(例如sanitize_text_field). 或者,如果您担心特定元素被注入到select选项中,您可以使用sanitize_meta 作用

结束