web-dev-qa-db-fra.com

Désinfectez textarea au lieu de saisir

Je souhaite ajouter un nouveau champ à l'enregistrement de l'utilisateur. J'utilise ce tutoriel de Paul Underwood .

Le didacticiel fonctionne, mais je souhaite remplacer le texte saisi par une zone de texte que je sais faire. Le problème est de s’assurer que WordPress enregistre correctement ces informations.

J'ai réalisé que c'était à cause de sanitize_text_field( $_POST['facebook_profile'] )

J'essaie de trouver un moyen d'accomplir la même chose pour textarea au lieu d'un champ de texte, mais je ne trouve rien (que je comprends. Je suis nouveau en tant que développeur PHP). Comment puis-je faire en sorte que les informations textarea soient sauvegardées?

Voici le code exact que j'utilise:

add_action( 'show_user_profile', 'add_extra_social_links' );
add_action( 'edit_user_profile', 'add_extra_social_links' );

function add_extra_social_links( $user )
{
    ?>
        <h3>Additional Information</h3>

        <table class="form-table">
            <tr>
                <th><label for="facebook_profile">Facebook Profile</label></th>
                <td><input type="text" name="facebook_profile" value="<?php echo esc_attr(get_the_author_meta( 'facebook_profile', $user->ID )); ?>" class="regular-text" /><BR><span class="description">Please enter your Twitter username.</span></td>
            </tr>
        </table>
    <?php
}
get_the_author_meta( $field, $userID ); 
update_user_meta( $user_id, $meta_key, $meta_value, $prev_value );

add_action( 'personal_options_update', 'save_extra_social_links' );
add_action( 'edit_user_profile_update', 'save_extra_social_links' );

function save_extra_social_links( $user_id )
{
    update_user_meta( $user_id,'facebook_profile', sanitize_text_field( $_POST['facebook_profile'] ) );
} 
1
Tara

wp_kses_post si vous souhaitez autoriser certains codes HTML dans votre éditeur textarea/wp (le plus sûr, comme l'a dit @Bordoni).
esc_textarea est ce que vous pourriez rechercher.

2
Abhik

Depuis WordPress 4.7 il y a sanitize_textarea_field() .

Qui fait exactement ce que vous voulez, du Codex.

Assainit une chaîne multiligne à partir des entrées utilisateur ou de la base de données.

2
Mark

Il existe plusieurs solutions à votre problème, certaines vous donneront plus de souplesse, d’autres rendront le terrain plus sûr.

J'aime bien utiliser wp_kses_post the most, car il n'autorisera que le code HTML que vous auriez accepté dans un message, mais si vous souhaitez supprimer toutes les balises HTML, vous devez utiliser un wp_kses( $string_unsafe, array() ) .

Vous pouvez également opter pour une méthode de saisie assainie que vous avez citée ci-dessus, mais en l’utilisant ligne par ligne pour vous fournir la solution que vous souhaitez.

// When dealing with user input always cast the input as you expect it to be
$lines = explode( "\n", (string) $_POST['facebook_profile'] );

// Apply the method
$lines = array_map( 'sanitize_text_field', (array) $lines );

update_user_meta( $user_id,'facebook_profile', implode( "\n", $lines );

Comme indiqué ci-dessous - La réponse ci-dessus n'est peut-être pas la meilleure option, mais c'est une solution que vous pouvez envisager.

1
Bordoni

PHP possède des fonctions intégrées pour la désinfection avec filter_var (). Vous appelez simplement la fonction, lui donnez la variable contenant vos données et lui dites quel filtre utiliser et tous les drapeaux facultatifs:

$myTextArea = "This is the data from my text area";
$mySanitizedText = filter_var($myTextArea, FILTER_SANITIZE_STRING);
0
Cedon