Санітизация цілочисельного введення для update_post_meta

13 нояб. 2014 г., 09:04:46
Просмотры: 15.7K
Голосов: 8

При оновленні post meta, де введення завжди буде цілим числом, чи варто використовувати (int) чи є спеціальна функція WordPress для цього (наприклад, sanitize_text_field)?

Наприклад:

if(isset($_POST['category_id'])){
    update_post_meta($post->ID, 'category_id', (int)($_POST['category_id']));
}
0
Все ответы на вопрос 3
0

Для целых чисел KSES не имеет специальной функции.

Используйте (int), intval() или absint()

Подробнее: Валидация данных - Целые числа

13 нояб. 2014 г. 10:05:31
0
// Приведение пользовательского ввода к целочисленному значению
&safe_id = intval( $_POST['category_id'] );
// Проверка на нулевое значение
if ( ! $safe_id ) {
  $safe_id = '';
}

// Обновление метаполя поста с безопасным значением
update_post_meta( $post->ID, 'category_id', $safe_id );

Функция intval() преобразует пользовательский ввод в целое число, возвращая ноль для нечисловых значений. Затем мы проверяем, не оказалось ли значение нулевым. Если так, мы сохраняем пустое значение в базе данных. В противном случае сохраняется правильно валидированный category_id.

4 авг. 2016 г. 12:55:14
1

Используйте условное выражение для проверки, является ли $_POST['category_id']) целым числом. В PHP для этого есть функция is_int()1

if(isset($_POST['category_id']) && is_int($_POST['category_id'])){
    update_post_meta($post->ID, 'category_id', $_POST['category_id']);
}

Также следует обрезать пробельные символы в данных $_POST, так как is_int() вернет false, если строка содержит пробелы2.

13 нояб. 2014 г. 09:30:12
Комментарии

Ваша функция is_int(...) никогда не сработает, так как $_POST всегда содержит строки.

Maxime Maxime
30 дек. 2019 г. 00:28:25