Мы уже рассматривали на блоге такие функции, как sanitize_text_field() и говорили о необходимости очистки данных перед их сохранением в базу данных.
И если для обычного текстового поля это может выглядеть примерно так:
update_option( 'option_name', sanitize_text_field( $_POST[ 'option_value' ] ) );
То для выпадающих списков <select>
и для радио-кнопок я бы не спешил применять подобный подход.
Дело в том, что когда мы задаём определённые значения для <select>
, мы подразумеваем, что только они и будут использоваться, а не какие-либо другие. Поэтому, очищая это поле как обычное текстовое поле, мы даём пользователям возможность проинспектировать этот элемент в браузере и ручками поменять его значение на какое им захочется. И в некоторых ситуациях, могу предположить, это может привести и к нежелательным результатам как бы.
Другое дело, если мы его очистим так:
// массив допустимых значений $possible_values = array( 'val1', 'val2' ); $option_value = in_array( $_POST[ 'option_value' ], $possible_values ) ? $_POST[ 'option_value' ] : ''; update_option( 'option_name', $option_value );
Как видите, тут даже необязательно запускать sanitize_text_field().
Ещё есть вариант очистки мультиселектов:
// массив допустимых значений $possible_values = array( 'val1', 'val2' ); $option_value = array_filter( $_POST[ 'option_value' ], function( $el ) { return in_array( $el, $possible_values ); }); update_option( 'option_name', $option_value );