Правильная очистка радио-кнопок и селектов

Мы уже рассматривали на блоге такие функции, как 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 );

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал