冬言響 / 日記

アメコミとか映画とか音楽とか猫とか単車とか自転車とか革とか銀とかジーンズとかブーツとか今日喰ったものとか。

RSS2.0

投稿されたコメントの名前欄が空欄だった場合のこと

ログを眺めてたら、以前に書いた記事に検索サイトから来たひとがコメントをくれたのだけど、名前欄を空欄のまま投稿してたので一度弾かれてそのまま再投稿とかせずに去っていった形跡があった。フォームから送られてきた内容をサーバー側の PHP スクリプトでチェックして名前欄が空欄だったりの不備があった場合はその旨メッセージを表示して本文とか既に入力された情報は保持したままフォームを再表示するのだけど、一度ボタン押してページが遷移してからエラーが表示された時点でもう良いかとかって気になっちゃったんだろうなあと。

コメント投稿機能作ったときに当たり前のように名前欄必須にしたのだけど本当にそれは必要なのか、空欄だったら空欄のままでも適当に「名無しさん」とか表示しとくでも良いんじゃないか、については、ウチはまあ古き良きホームページの延長のつもりでいて 2ch ねるみたいな不特定多数の匿名投稿者がわいわいやってるような感じにしたいとは思ってないのでその場限りの捨てハンであっても何か名乗って欲しい。

とはいえ件のコメントはそれなりに有意義なもので、それが名前欄の未入力から結局投稿されずに終わるのはそれはそれで勿体無くて、まあそもそもフォーム下の説明ンとこに一言書いておけば済む話ではあるのでそれは一応書くは書いて、そのうえでもうひとつこんなことをしてみた。

$("input#postcomment").click(function() {
    if($("input#name").val() == "") {
        var strName = prompt("名前を入力してください。", "ジョン・ドゥ");
        if(strName) {
            $("input#name").val(strName);
            }
        else {
            return false;
            }
        }
    });

投稿ボタン(#postcomment)が押されたら名前欄(#name)をチェックして、空欄だったらプロンプトを表示して入力を求める。入力して OK を押すとスクリプトはそこで終了、あとはフォームの本来の動作に戻って入力内容が投稿される。キャンセルが押されたら投稿処理もキャンセル。

スクリプトが無効な環境ではもちろん動かないのでサーバー側のチェックが要らなくなるわけじゃないけど、有効であればクライアント側で事前チェックされるのでもう少し気軽に何かしら入力してくれるだろと。

本文のスパム判定とか空欄チェックも一緒に出来なくはないけど、スパム判定を PHP と Javascript の両方で書くのもアレで Ajax とか使うのも無駄なトラフィックが発生するだけで無意味だし、名前欄はともかく本文を空欄のまま投稿ボタン押す輩に気を遣う必要もなかろ。

あとは OK を押したらそのまま投稿処理継続で良いのか、名前欄に入力しただけで終了して改めて投稿ボタン押して貰うようにした方が良いのか、はまだ悩み中。「OK」なんだから OK だろうとか、いやその「OK」は名前欄への入力に対しての OK だろうとか、そもそも名前欄が空欄のまま本文入力して投稿ボタン押した時点で投稿者には投稿の意思があるんだから今更ちょっとまったとか要らんだろとか、いろいろ。

まあ考えて気が変わったらまた変更するかも(←それが一番駄目な気もする)

追記。忘れてた。件のコメントが投稿されたのは『アベンジャーズ』のノベライズの話。