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