過去ログ NO.1166349861
□ ひろたか [2006年12月14日16時38分]NXerさんへ 以前アンケートテーマについて文字数制限をしていただいたのですが、アンケート項目についても文字数制限を行いたいのですがどうすればいいでしょうか? アンケートテーマは$subjectで項目は何になるのでしょうか? 宜しくお願いします。
□ NXer [2006年12月14日20時02分] >項目は何に その変数は、$content です。NXerです。
ただしname属性としては <input size=30 name=content value='$content'
のために、入力の文字列は $in{'content'} に格納されています。それはその1)です。
893にもあるためにその前に処理しても最初の1項目だけの処理 になります。入力した項目数だけの配列変数(@が配列arrayを 意味します)を対象にします。 foreach (@cont){} 内で898のように変数ごとに処理します。それはその2)です。 この時変数は$_という形式になります。
>アンケート項目についても文字数制限
プラス スパム対策例
その1)項目追加ルーチンの文字列長制限 例15字 30バイト長 略記号...付加 593 if ($in{'content'} && ! $in{'color'}) { &error("グラフの色を指定して下さい"); } #---------------------------------------- if ($in{'content'}){$mesnew=$in{'content'};&antispam;} if (length($in{'content'}) > 30) {#項目15字制限 $in{'content'} = substr($in{'content'},0,30)."...";} #---------------------------------------------------------------- if ($in{'mode'} ne 'change') { @new = @lines; }
その2)新規項目ルーチンの文字列長制限 例15字 30バイト長 略記号...付加 893 if ($in{'content'}) { 894 @cont = split (/ /,$in{'content'}); 895 $c = 0; $no = $newnum; foreach (@cont) { #---------------------------------------- 898 if ($_){$mesnew=$_;&antispam;} if (length($_) > 30) {#項目15字制限 $_ = substr($_,0,30)."...";} #----------------------------------------- $val = "$no\,$_\,0\,$colsmp[$c]\,\n";
$_ = substr($_,0,30)."...";
substr( ). と "..." とセミコロンです。括弧の後の点は 連結子の点です。後の3つの点は文字としての点です。適当に 4つを並べたものではありません。
入力例-------------------------------------------- あいうえおかきくけこさしすせそたちつてとなにぬねの 出力例---------------------------30+3バイト長 123456789012345678901234567890123 あいうえおかきくけこさしすせそ...
他にも入力制限としては、文字種を限定するなどあります。 しかし見本となる幾つかのアンケートテーマで例を示したり また、説明ページを作り入力例を書いておけば十分と思います。
以上です。
□ ひろたか [2006年12月14日21時18分]NXerさんへ 無事出来ました。ありがとうございます。 これも先日お聞きした分ですが、評価ポイントですが評価しないボタンを追加でつけポイントを減らすボタンを考えていますが可能でしょうか? たびたびすみませんが宜しくお願いします。
□ ひろたか [2006年12月14日22時24分]NXerさんへ アンケート項目のスパム対策ですが、アンケートを作成する際は何文字でも項目が入力出来るのですが、その際に大量に文字を入れるとフォームが崩れてしまいます。 やはり、アンケート作成時に文字数を指定し超える文字は入力出来ないようにはできないでしょうか?
□ NXer [2006年12月16日09時14分] >アンケート作成時に文字数を指定
すえぽんさんのcgiの魅力は、他に例を見ない表現力の豊かさです。 それは、perlとjavascriptを巧みに使いこなされているからと思います。 NXerです。
以下はjavascriptの記述です。//の後はコメントです。非実行文です。 ------------------------------------------ 747 function value_plus() { val = document.forms[0].anq_value.value; //■ 文字列長15字制限string length limit 1行挿入 val=val.substr(0,15); //■ 文字数は15 if (change < 0) n = opt; else n = change; -------------------------------------------
入力15文字以上、制限処理後の表示欄文字列例
1) 123456789012345 2) あいうえおかきくけこさしすせそ 3) abcdefghijklmno
このことから 1)3)の半角英数のasciiコードは、1文字1「バイト」です。つまり 15「バイト」の15文字です。 2)の日本語は、s-jis、eucでは2バイト系のために30「バイト」15文 字です。テーマや項目の文字数制限はperlのため、30バイトで設定 しました。しかし、javascriptで組まれた連続する項目設定中の 表示文字列は、日本語15文字の文字数制限になっているようです。
********************************** メモ1 文字数の数え方 すえぽんさんの特徴は、2種類のスクリプト言語を混成(こんせい hybridize)してより強力な性能の言語を使われていることです。 そのため、この種の言語(hybridized script ハイブリッド・スク リプト)を構成する言語の違いをよく知る必要があります。
それ以外にも、perl 5.8版では、2「バイト」1文字を1文字として計算し ているようです。ひろたかさんのサーバやプロバイダのサーバが搭載する perlを使って当方のローカルサーバと同じ結果を保証することはできませ んので、必ず検証してください。utf-8ベースのosでは日本語文字コードは 3「バイト」1文字計算になります。
参考文献 小飼弾、まるごとencode、まるごとperl vol 1 インプレスジャパン 2006、p.20 *******************************************
> - 評価ボタン
マイナス評価ボタンは+評価ボタンを少しだけ変更します。 -------------------------------------- 55 # + 評価フラグ $evalflag=0; # - 評価フラグ $evalmnsflag=0; #---------------- 初期設定ここまで ----------------#
132 &get_cookie; # eval branching--------------------- if ($in{'eval'}) { $evalflag=1;$file=$in{'eval'};&vote;} if ($in{'evalmns'}) { $evalmnsflag=1;$file=$in{'evalmns'};&vote;} #--------------------------------
349 print "<td class=plain><input type=submit value='評 価 +' class=btn></td></form>\n"; #- - eval----------------- print "<form action='$script' method=POST>\n"; print "<input type=hidden name=evalmns value=\"$in{'data'}\">\n"; print "<td class=plain><input type=submit value='評 価 -' class=btn></td></form></table>\n"; ------------ } ------------------------
645 sub vote { if ($evalflag==0 && $evalmnsflag==0){ -------------------------------
654 (/\,/,$subject); #------------------------------------------- if ($evalflag>=1){$url++;}#eval increment if ($evalmnsflag>=1){ if ($url>0){$url--;}#eval decrement else {$url=0;}#最下限を0とします。 } if($repost_mode && $post_no eq $file) { ------------------------------------------
690 &set_cookie; #------------------------------ if ($evalflag>=1 || $evalmnsflag>=1){&enter;} else {&html;} exit; -------------------------------------------
***********************************評価について愚考まで 掲示板やブログで開設してまもなく攻撃にさらされて閉鎖す ることがよくあるようです。その一つに、自由に書き込み 登録をしてくださいというからそうしたのに、勝手に削 除された、という問題です。
つぎに評価ですが、おおむね良い評価には、ファン心理など に近くあばたもえくぼ評価も含まれます。しかし、同一人が 同一テーマに何度も評価ボタンを押すことを防ぐ工夫が必要 と思います。 個人で楽しむ程度のアンケートですが、上のマイナスボタン も含め、押すと数字が変化する、ホット画像になったり、ニ ュー画像に戻ったりするなどアンケートを離れて、ゲーム感 覚で楽しく遊ぶことができます。ある程度はお遊びですが、 運用して不具合があれば、改善されてはいかがでしょうか。
問題はマイナス評価です。テーマ設定者としては、投票が なければそれだけでマイナス評価です。投票されないと、自ら 編集で削除する人もあると思います。折角良い評価を得たテーマ を、マイナスボタンを何度も誰かが押すだけで、0にすることが できます。善意のマイナスと悪意のマイナスをcgiは識別できません。
最初から、正当な理由や根拠を明らかにすることなく、人 のマイナス点を探すようなcgiを提供するのは、掲示板など の運営でもおおきな問題です。ご要望なのでスクリプ トを書きますが、ご自身でマイナス評価を受けることも本格 運用前に、検証してください。よくない評価をおそれて折角 のいいテーマを出してもらえないおそれもあります。 コメントについてもデータファイルをダウンロードして、 中傷誹謗の類は削除してアップロードするなど試してください。
---------------------------------------------- print "○最終更新:$lastmod ■趣旨に沿わないメッセージは、断り無く削除します。<br><br>\n"; ----------------------------------------------- 当方はあんQを当面運用する計画はありませんが、別のcgiでは上のような 1行を挿入して運用しています。
ご質問頂く内容には、当方にとって未知の事柄が沢山含まれ、愚案 愚論以外によりエレガントな解決策があると思われます。より新し い参考書などでご確認ください。
|
|