データベースに送信する前にフォームデータをサニタイズする正しい方法は何ですか?次のようなテキストを入力しました。
<form method="post" action="options.php">
<?php wp_nonce_field('update-options'); ?>
<input style="width:100%" type="text" name="data[title]" id="title" value="<?php $title = get_option('data_test'); echo $title['title']; ?>" /></p>
<input type="hidden" name="action" value="update"/>
<input type="hidden" name="page_options" value="lu_ban_data"/>
<input style="float:left;margin-top: 10px; margin-bottom: 10px; vertical-align: middle; clear: both;" class="button-primary" type="submit" value="<?php _e('save changes') ?>" />
</form>
私はecho sanitize_text_field($title['title']);
をやろうとしました、しかしそれはdbからそれを要求するときにデータを消毒するだけです、dbの中のデータはまだ不必要な文字を含みます。これが私がそれを提出する前に消毒したい理由です。
これが参考になるかどうかはわかりません。 s_ha_dumが言ったように、送信したデータをどのように処理してdbに送信しているかを投稿する必要があります。
しかし、初心者にとっては、出力されたデータを次の形式でエスケープすることを検討してください。
<input style="width:100%" type="text" name="data[title]" id="title" value="<?php $title = get_option('data_test'); echo esc_attr($title['title']); ?>" /></p>
追加するデータには、 esc_attr() および esc_html() を使用してください。ユーザーによって送信されたページへのリンクです。
esc_attr()
は、htmlタグ属性に出力されるコンテンツのためのもので、esc_html()
は、ページ内またはタグ間に直接出力されるコンテンツのためのものです。翻訳が必要な場合は、esc_attr_e()
、esc_attr__()
、esc_html_e
、およびesc_html__()
バージョンもあります。
最後に、エスケープ系列の中には、データベースに送信しようとしているユーザー送信データ用の esc_sql() があります。
編集:
@Miloがコメントで指摘したように、ここでesc_sql()を使用することはあまりありません。それらのエスケープ関数は、sanitize_option()関数を介してupdate_option()にすでに適用され、データベースに配置されるときに準備されるためです。だからあなたはそれをスキップすることができます。あなたがデータを保存するためにあなた自身のMySQL呼び出しを書いているなら、あなたはそれらをエスケープするために$ wpdb-> prepareを見るべきです。
組み込み関数を使用してmeta_dataとオプションをデータベースに追加する方法については、すでに説明しました。