防止将无效或空值保存到数据库中,并在出错时保留表单域的值

时间:2017-02-16 作者:ManzoorWani

我正在使用设置API保存插件的设置。我想要设置字段中的正整数值。

register_setting( $option_group, $option_name . \'_number\', \'sanitize_number_callback\' );

function sanitize_number_callback( $value ) {

    $filtered = sanitize_text_field( $value );

    if ( preg_match(\'/\\A[1-9]\\d*\\Z/\', $filtered) ) {
        return $filtered;
    }
    else{
        $type = \'error\';
        $message = \'Number must be a positive integer\';

        add_settings_error(
            \'my_settings\',
            esc_attr( \'settings_updated\' ),
            $message,
            $type
        );
    }
}
现在,如果用户输入非整数值并尝试保存设置,则会显示错误,并将空值保存到数据库中,覆盖先前保存的值,因为没有return 条件为false时的语句。字段值也为空。

现在,如果我返回无效的净化值,那么它仍然保存在数据库中!

我不知道显示了一个错误,设置仍然保存着,这有什么意义!真奇怪!

我想要的:

  1. 清洁并验证$value
  2. 在表单字段中保留输入的值是否有解决方法?

1 个回复
SO网友:Neil McGann

你可以这样做:

function sanitize_number_callback ($input){

    if( !preg_match( \'/...regex for valid here.../\', $input ) ){
        add_settings_error(
            \'my_option\',
            esc_attr( \'my_option\' ), //becomes part of id attribute of error message
            __( \'Number must be a positive integer\', \'wordpress\' ), //default text zone
            \'error\'
        );
        $input = get_option( \'my_option\' ); //keep old value
    }

    return $input;
}
基本上,如果验证失败,则返回旧的保存值。您的验证完全限制了输入值,因此无需进行清理。

我不知道如果验证失败,您如何在表单字段中保留不正确的值。据我所知,设置API不允许直接使用它。其他人可能会提供解决方案?

相关推荐

Options表崩溃并修复后无法访问wp-admin

我的选项表崩溃了,我成功地修复了它。但现在当我登录时,它会重定向到没有工具栏的主页,如果我键入/wp admin,我会得到“抱歉,您不允许访问此页面。”我尝试了通常的禁用插件和主题的方法。正在删除。htaccess文件。似乎什么都没用。我确实有一个5天前的DB备份,可以恢复访问,但在这段时间内做了很多更改,所以我希望以不同的方式解决这个问题。