Sanitizar entrada de enteros para update_post_meta

13 nov 2014, 09:04:46
Vistas: 15.7K
Votos: 8

Al actualizar un metadato de post donde la entrada siempre será un entero, ¿debo usar (int) o existe alguna función de WordPress para eso (como sanitize_text_field)?

Por ejemplo:

if(isset($_POST['category_id'])){
    // Convertir a entero y actualizar el metadato
    update_post_meta($post->ID, 'category_id', (int)($_POST['category_id']));
}
0
Todas las respuestas a la pregunta 3
0

Para números enteros, KSES no tiene una función especial.

Utiliza (int) o intval() o absint()

Ver más: Validación de Datos - Enteros

13 nov 2014 10:05:31
0
// Sanitiza el ID de categoría convirtiéndolo a entero
&safe_id = intval( $_POST['category_id'] );
// Si el ID es 0 (no válido), lo establecemos como cadena vacía
if ( ! $safe_id ) {
  $safe_id = '';
}

// Actualizamos los metadatos del post con el ID sanitizado
update_post_meta( $post->ID, 'category_id', $safe_id );

La función intval() convierte la entrada del usuario en un entero, y devuelve cero si el valor no era numérico. Luego verificamos si el valor resultó ser cero. Si es así, guardamos un valor vacío en la base de datos. De lo contrario, guardamos el category_id correctamente validado.

4 ago 2016 12:55:14
1

Utiliza una sentencia condicional para verificar primero si $_POST['category_id']) es un entero. La función de PHP es is_int()1

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

También deberías eliminar los espacios en blanco de tus datos $_POST porque is_int() devolverá falso si la cadena tiene espacios en blanco2.

13 nov 2014 09:30:12
Comentarios

Tu is_int(...) nunca funcionará porque $_POST siempre contiene cadenas de texto.

Maxime Maxime
30 dic 2019 00:28:25