web-dev-qa-db-ja.com

フロントエンドの投稿フォームの検証

フロントエンドの投稿フォームについて、ここにいくつかの投稿があります。私はそれらすべてを読みました。今私が出くわすすべてのフォームはあなたが必須にしたいフィールドの値をチェックするように思われる何らかの検証のフォームを持っています。私はそれらを試してみました、そして私は何も働かせることができません。私はただフィールドを必須にすることはできません。フォームに関する他のすべては完璧です。しかし、私は自分の必須フィールドを強制したいと思います(適切なエラーメッセージに対するボーナス)。

私はグーグルを見回してみました、私は本当にJSが私がこれに使用したいものであると思いません。そして他のどんなphpの検証でもうまくいくようには思えません。どういうわけか間違って組み込んでいると思います。

これは私が持っているものです: http://Pastebin.com/rw4c6jZQ (フルテンプレート行9-19は検証されることになっています)

テンプレートの末尾にあるスクリプトを処理します。

    <?php 
if( 'POST' == $_SERVER['REQUEST_METHOD'] && !empty( $_POST['action'] ) &&  $_POST['action'] == "new_post") { 

    // Do some minor form validation to make sure there is content 
    if (isset ($_POST['title'])) { 
        $title =  $_POST['title']; 
    } else { 
        echo 'Please enter the wine name'; 
    } 
    if (isset ($_POST['description'])) { 
        $description = $_POST['description']; 
    } else { 
        echo 'Please enter some notes'; 
    } 

    $tags = $_POST['post_tags']; 
    $winerating = $_POST['winerating']; 

    // ADD THE FORM INPUT TO $new_post ARRAY 
    $new_post = array( 
    'post_title'    =>   $title, 
    'post_content'  =>   $description, 
    'post_category' =>   array($_POST['cat']),  // Usable for custom taxonomies too 
    'tags_input'    =>   array($tags), 
    'post_status'   =>   'publish',           // Choose: publish, preview, future, draft, etc. 
    'post_type' =>   'post',  //'post',page' or use a custom post type if you want to 
    'winerating'    =>   $winerating
    ); 

    //SAVE THE POST 
    $pid = wp_insert_post($new_post); 

             //KEEPS OUR COMMA SEPARATED TAGS AS INDIVIDUAL 
    wp_set_post_tags($pid, $_POST['post_tags']); 

    //REDIRECT TO THE NEW POST ON SAVE 
    $link = get_permalink( $pid ); 
    wp_redirect( $link ); 

    //ADD OUR CUSTOM FIELDS 
    add_post_meta($pid, 'rating', $winerating, true);  

    //INSERT OUR MEDIA ATTACHMENTS 
    if ($_FILES) { 
        foreach ($_FILES as $file => $array) { 
        $newupload = insert_attachment($file,$pid); 
        // $newupload returns the attachment id of the file that 
        // was just uploaded. Do whatever you want with that now. 
        } 

    } // END THE IF STATEMENT FOR FILES 

} // END THE IF STATEMENT THAT STARTED THE WHOLE FORM 

//POST THE POST YO 
do_action('wp_insert_post', 'wp_insert_post'); 

フォームと他のすべてのものは、文脈の中でそれをすべて見るためにペーストビンで見ることができます。どうもありがとう!

2
Rev. Voodoo

フォームの検証を行う最善の方法は、JavaScriptとPHPの組み合わせです。

JavaScript検証を実行したいのは、フォームを送信せずにユーザーにエラーを修正する機会を与えるためです。さらに、それはどんな偶然のミスも止めます。また、JavaScriptが無効になっている場合に備えて、バックエンドでの検証を確実にしたいと思うでしょう。

いずれにせよ、あなたのデータをサニタイズすることはこのプロセスの一部であるべきです。そこにあなたを助けるためにこれらのWordPress機能のいずれかを使ってください: データ検証

JavaScriptの検証には、 jQuery検証プラグイン をお勧めします。実装とカスタマイズがとても簡単です。

あなたのPHP検証に関しては、空の値をチェックするためにこれを追加してみることができます:$_POST['title'] != ''

0
Matthew Muro

私は思う、phpによる正しい方法はWordPressのesc_attr *関数とこのファイルのすべての関数です。 wp-includes/formatt ing.php

また、PHPからの可能性を使用します。 filter_var

0
bueltge