web-dev-qa-db-fra.com

array_map () pour nettoyer $ _POST

Je travaille sur un panneau d'options pour un plugin. Et avoir un tableau publié et mis à jour dans le tableau des options. J'utilise la fonction array_map () pour parcourir le tableau avec sanitize_text_fields ()

Est-ce une façon optimale de procéder?

 if( ! empty( $_POST['my_array'] ) ) {
            foreach( $_POST['my_array'] as $value ) {
                $value = array_map( 'sanitize_text_field', $value );
                update_option( 'my_option_value', $value );
            }
        } 
2
colbyalbo

Ce n'est probablement pas une bonne idée. Premièrement, si vous avez d'autres types de champs, vous devriez probablement utiliser des fonctions plus appropriées. Par exemple, les champs textarea doivent être nettoyés avec sanitize_textarea_field(), et les sélecteurs de couleurs doivent être nettoyés avec sanitize_hex_color().

Vous devez également considérer que $_POST contient probablement aussi des champs que vous ne pas voulez enregistrer, tels que les entrées cachées qui alimentent l'API Settings: option_page, action_wpnonce, et _wp_http_referer.

Enfin, cela signifie que votre fonction accepte essentiellement toutes les entrées et les ajoute à la base de données. Bien que la désinfection et l'échappement des entrées signifient qu'ils ne peuvent pas faire trop de dégâts, vous ne codez toujours pas de manière défensive. Idéalement, vous devez ajouter à la liste blanche les entrées que vous prévoyez de soumettre, et ne les soumettre que.

Cependant, vous ne devriez pas avoir besoin de gérer le $_POST lorsque vous utilisez correctement les paramètres ou les API de personnalisation, ce qui suggère que vous ne construisez pas correctement ce panneau d'options. Lorsque vous utilisez correctement l'une de ces API, la fonction de désinfection peut être spécifiée lors de l'enregistrement du paramètre, et aucune manipulation de la soumission ne devrait être nécessaire.

1
Jacob Peattie

Je pense que vous êtes sur la bonne voie. Ce que vous pouvez faire pour vous améliorer, c'est:

Séparez la logique des fonctions pour augmenter la lisibilité ou faites un bon commentaire de ce que vous faites. Par exemple.:

... 

function mytheme_sanitize_fields($fields){

   foreach($fields as $field){
      mytheme_sanitize_field($field);
   }

}


function mytheme_sanitize_field($field){
      if( is_array($field){
           $value = array_map( 'sanitize_text_field', $field );

      }
      else{

           $value = sanitize_text_field($field);
      }

      update_option('yourkey', $value);

...

}


...


mytheme_sanitize_fields($_POST);      

...






}

1
Lucas Vendramini