web-dev-qa-db-fra.com

Comment désinfecter les valeurs des cases de sélection dans post meta?

J'ai ajouté une zone de sélection dans la méta Post. Voici le code, et cela fonctionne bien. Ma question est la suivante: dois-je purifier les valeurs avant de mettre à jour le méta de publication? Si oui, comment cela devrait-il être fait?

Voici comment j'ajoute le champ méta:

<?php $value = get_post_meta( $post->ID, 'my_options', true ); ?>
<select name="my_options">
    <option value="option1" <?php selected( $value, 'option1'); ?>><?php _e('Option 1', 'textdomain'); ?></option>
    <option value="option2" <?php selected( $value, 'option2'); ?>><?php _e('Option 2', 'textdomain'); ?></option>
</select>

et voici comment je mets à jour la valeur:

if ( isset( $_POST['my_options'] )){
    update_post_meta( $post->ID, 'my_options', $_POST['my_options'] );  
}
4
qasir

En acceptant les entrées de données utilisateur, je pense que la validation des données doit être effectuée si possible, pas seulement la désinfection. Par exemple, vous pouvez vous attendre à un nombre, une valeur booléenne, une chaîne de texte (même si l'entrée est une boîte de sélection, elle peut avoir une valeur de chaîne), etc. Vous pouvez déssize pour ces types de données; vous pourrez ensuite aller plus loin et valider les données par rapport aux valeurs attendues: entier, float, vrai/faux, emails, URL, etc.

Allons avec votre selectbox. Il a deux options avec les valeurs "option1" et "option2", donc les deux sont des chaînes et peuvent être nettoyées avec sanitize_text_field:

if ( isset( $_POST['my_options'] )){

    $value = sanitize_text_field( $_POST['my_options'] );

    update_post_meta( $post->ID, 'my_options', $value );  

}

Mais un utilisateur peut modifier facilement la valeur des options de sélection de formulaire à partir de l'interface frontale, afin de pouvoir manipuler le formulaire et envoyer des valeurs différentes de "option1" ou "option2" que vous allez stocker dans la base de données. Comme vous savez exactement quelles sont les valeurs attendues, vous pouvez effectuer une purification et une validation des données. Par exemple:

if ( isset( $_POST['my_options'] )){

   $valid_values = array(
                       'option1',
                       'option2',
   );

    $value = sanitize_text_field( $_POST['my_options'] );

    if( in_array( $value, $valid_values ) ) {

        update_post_meta( $post->ID, 'my_options', $value );

    }

}

Ou vous pouvez définir un rappel de désinfection personnalisé pour l'option "my_options" et utiliser sanitize_meta:

if ( isset( $_POST['my_options'] ) ){

        $value = sanitize_meta( 'my_options', $_POST['my_options'], 'post' )

        update_post_meta( $post->ID, 'my_options', $value );

}

Et définissez le rappel de santitisation:

add_filter( 'sanitize_post_meta_my_options', 'sanitize_my_options_meta' );

function sanitize_my_options_meta( $value ) {

   $value = sanitize_text_field( $value );

   $valid_values = array(
                       'option1',
                       'option2',
   );

   if( ! in_array( $value, $valid_values ) ) {

        wp_die( 'Invalid value, go back and try again.' );
    }

    return $value;
}
5
cybmeta

Vous pouvez utiliser n'importe quelle fonction d'assainissement intégrée à Wordpress (telle que sanitize_text_field ). Si vous êtes préoccupé par des éléments spécifiques ajoutés aux options de sélection, vous pouvez également écrire votre propre fonction d'assainissement avec la fonction sanitize_meta .

0
Evan Van Slooten