ラウンジ(兼FAQ掲示板)

あんQについて
過去ログ NO.1164627562
□ KENJI [2006年11月16日21時51分]
はじめまして!
サイトにアンケートを作りたく色々探していまして。想像にぴったりなCGIプログラムを発見し大変嬉しく思います。
そこであんQで質問なんですが、質問数は何項目まで増えていくのでしょうか?
また、たくさん質問が増えてくれば下にずらーっとならんでそれを超えると次のページになるのでしょうか?
それとも永遠と下に増えていくのでしょうか?
ご回答のほどよろしくお願いします
□ NXer [2006年11月17日17時43分]

KENJIさん、はじめまして。NXerです。こちらこそよろしく。

1>質問数は何項目まで増えていくのでしょうか?
2>超えると次のページか/下に増えていくのでしょうか?

その1)項目の「超える」上限

スクリプトの初期設定欄には、質問/投票項目の最大数、上限設定は
ありません。テーマにそって考えられる質問数だけ増えます。
百名山をテーマにすると100項目必要かもしれません。

見落としているかも分かりませんので、KENJIさんも初期設定を
スクリプトでみてください。

cgi歴にかかわらず、次のおよそ222行目付近のスクリプトを見てください。
-------------------------------------222
foreach (@lines) {
($num,$content,$point,$color,) = split(/\,/,$_);
------------------------------------------
画面表示するために、データに格納されている数だけの質問/投票項目を
それぞれの行(@lines)ごとに項目番号、内容、得票、バーの色に分解して
います。今のサーバやコンピュータなら100項目程度は瞬間で処理すると
思います。

その2)スクリプト的には下に続く

データの数だけ、番号、項目名、得点のように270行付近で表示されます。
--------------------------------------------------
270 print "$content</td><td align=right>$point</td>\n";
-------------------------------------------------- 

以上です。
-----------------------------------------------------
以下はアンケート調査に関する愚論です。時間があればお読みください。

参考:
アメリカ(USA)での成人の余暇の過ごし方のある
調査では、項目数は、10です(Putnam,R.Bowling Alone,2000)。
レストランでの食事、食事で友人宅に訪問、友人を食事に
招く、映画などです。テレビが主たる娯楽であるについて
の態度をアンケート調査する度合いの項目数は、まったくその通り
から、まったく違うまでの6項目になっています。

このようにアンケートにすることがらや態度、感じ方を1画面内に
収まる程度の質問項目数にすることが調査、統計の手法と思います。
ネット上の個人的なアンケートでも、その結果を公開すれば
サーチ・エンジンでその情報を必要とする人が、アクセスする
かもしれません。あんQの可能性を追求してみてください。ま
たその信頼性を高めてください。

なお、KENJIさんが予想されます、調査する人ごとに微妙な態度、
感じ方の違いなどの項目が際限なく人の数だけ増えることを避け
る方法があります。より近い項目を選択いただき、意見を書き込
んでいただくというものです。運用してその必要性を感じられました
ら、スクリプトをすこし改造して意見収集付きあんQにしてくだ
さい。

たとえば、この回答の満足度調査では次の6項目で十分です。
----------------------------------------------------
1 わからない 2 まったく不満0% 3 びみょうに不満25%
4 ふつうに満足50%  5 かなり満足75%   6 ドまん中満足120%
(その他ご意見欄                )
----------------------------------------------------
□ KENJI [2006年11月20日22時22分]
NXerさん大変貴重なお意見ありがとうございました!
そこで一つお聞きしたいのですが、例えばアンケートの一覧を50行までとし、それ以降のアンケート分は次のページへみたいな事は出来るのでしょうか?
□ NXer [2006年11月21日16時36分]

>一覧を50行

KENJIさんのcgi歴は不明です。以下のスクリプトと説明が
分からない時は改めてご質問ください。NXerです。

当方のtestデータ例
--------------------------------質問項目名a1~d2
view test,20061121130714,36PeRwkZZZZ,0,0,1,nxer,,,
20041030153736,a1,2,#000000,
20041030153735,a2,3,#a9a9a9,
20041030153734,a3,1,#8b0000,
20041030153733,a4,2,#ffc0cb,
20041030153732,a5,2,#000000,
20041030153731,a6,3,#a9a9a9,
中略
20041030153707,c0,3,#a9a9a9,
20041030153706,d1,2,#8b0000,
20041030153705,d2,1,#ffc0cb,
---------------------------------
このようなデータ32件を作成してテストします。

サンプルのために20件を始めに表示。次の21件以上は新たに作成
する次頁ボタンで残る12件が表示されます。21件以上は残り全デー
タです。(20単位ではありません。)これは特殊な要望と考えて
そのためだけの処理です。汎用性は考えていません。
50件単位のときは数値を変えてください。ただし、判定フラッグ
の名称は、ご要望どおり$fiftyとしてあります。

変更その1)46行目挿入 45行はコメント文 
初期値設定-------------------行番号はエディタ表示例(後ほどかなりずれます)
43 $max = 300;
44
45 #表示単位フラグ 50件 0は単位前の件数、1は単位後の残部件数
46 $fifty=0;
#---------------- 初期設定ここまで ----------------#

変更その2)単位フラッグ切り替え 
次ページボタンの値nextで旗を $fifty=1 に切り替え
--------------------------125挿入他既存
122 &get_cookie;#既存行これを探してください

124 #表示旗変更
125 if ($in{'mode'} eq 'next') { $fifty=1; } 

126 if ($in{'mode'} eq 'reg' || $in{'mode'} eq 'adreg' || $in{'mode'} eq 'change') { ®ist; }
--------------------------------------------

変更その3)アンケート質問一覧 html サブルーチン内
266〜269行の挿入 元の行はサブルーチンにします。
---------------------------------------------
263 $len = int ($point * $scl);
264 }
#◆-----------------266、267挿入 50件の時は$cの変数の値を50にします。
266 if ($fifty<=0 && $c<=20){
267  &view; } #元の268〜280行付近はサブルーチンにします。
#■--------------------------268と269行挿入
268 elsif ($fifty>=1 && $c>20){&view;}
269 }
#--------------
285 if ($vote_stop) {
----------------------------------------

変更その4)次頁ボタン挿入
--------------------------------------------
293 print "<tr><td colspan=5 class=plain><table class=plain><td class=plain><input type=submit value=' 投 票 ' class=btn></td></form>\n";
#-----------------------次ページボタンの作成以下5行挿入
print "<form action='$script' method=POST>\n";
print "<input type=hidden name=mode value=next>\n";
print "<input type=hidden name=data value=\"$in{'data'}\">\n";
print "<td colspan=5 class=plain><table class=plain><td class=plain><input type=submit value=' 次 頁 ' class=btn></td></form>\n";
#--------------------
name 属性はmode, その値は next です。

その下の更新ボタンを
value=' 更新前頁 '
とすると、20件の次12件にないため、前の20件から選びたいとき、このボタン
で戻れます。

変更その5)サブルーチン作成

最後にview サブルーチンを作成しました。
---------------------------------------------
sub view {
#-------------------------------268〜280行付近コピーペーストします。
if ($vote_stop) { print "<tr><td align=right>$c</td>\n"; }
else { print "<tr><td align=right>$c</td><td><input type=radio name=select value=$num></td>\n"; }

if ($last_cont eq $num) { print "<td bgcolor='$sel_bg' background='$pos'>"; }
else { print "<td>"; }

print "$content</td><td align=right>$point</td>\n";
print "<td><table cellpadding=0 cellspacing=0 class=plain><td class=plain>";
print "<table cellpadding=0 cellspacing=0 bgcolor='$color' class=plain><td class=plain><img src='$grh' width=$len height=10></td></table></td>";
print "<td width=5 class=plain> </td><td class=plain>$perse\%</td></table></td></tr>\n";
}
-------------------------------------------

変更後、はじめの20件で投票したり、また、次の21〜32件で
投票して確認しましたが不具合はありませんでした。
次のページという表現よりも、固定した一覧画面で
次のアンケート項目だけが変化するという 発想です。

使い方としては、プロファイルで100の質問風にたくさん
項目を並べて答えていただくと、他者が認識している自分
との評価/認識のズレ(perception gap)などが明確になり
面白そうです。タレントなどがファンサイトにこのあんQ
を設置して、本人が気が付かないファンが認識している魅
力などが数値で出そうなきもします。
組み込み可能なら、ブログにも使えそうです。

その前にエラーがでるかもしれません。実験台を覚悟で
いろいろ編集してみてください。この投稿に基づくテストで
不具合の発生する恐れがあります。発生の責任はNXerには
一切ありません。しかし、文法ミスなどは当方の責任です。
サーバでのスクリプト暴走などを避けるために、ローカル
サーバでテストするか、できる環境を整えてください。

なお、変更したスクリプトの再配布は許可されていません。
簡単な挿入やコピーペースト編集で多分成功すると思います。
□ KENJI [2006年11月22日10時10分]
NXerさんまず初めにご回答ありがとうございます。
CGI歴としましてはごく最近興味をもちだしたくらいです。
ご指示通り、してみたのですが、どうも上手くできませんでした。
以下の部分はこれでいいのでしょうか?

$len = int ($point * $scl);
}
if ($fifty<=0 && $c<=20){
&view; }
elsif ($fifty>=1 && $c>20){&view;}
}
sub view {
if ($vote_stop) { print "<tr><td align=right>$c</td>\n"; }
else { print "<tr><td align=right>$c</td><td><input type=radio name=select value=$num></td>\n"; }
if ($last_cont eq $num) { print "<td bgcolor='$sel_bg' background='$pos'>"; }
else { print "<td>"; }
print "$content</td><td align=right>$point</td>\n";
print "<td><table cellpadding=0 cellspacing=0 class=plain><td class=plain>";
print "<table cellpadding=0 cellspacing=0 bgcolor='$color' class=plain><td class=plain><img src='$grh' width=$len height=10></td></table></td>";
print "<td width=5 class=plain> </td><td class=plain>$perse\%</td></table></td></tr>\n";
}
□ NXer [2006年11月22日14時03分]

>sub view {

このサブルーチンの位置を示す行番号を付かなかったため
期待通り動作しなかったものと思われます。NXerです。

表示ルーチンの位置です。行番号をつけます。スクリプトの最後
に追加します。書き込みが不十分だった点失礼しました。
-----------------------------
952 sub copy {
print "<hr noshade color='$text'>\n";
print "<div align=right>\n";
print "<a href='http://CGIScriptMarket.com/' target='_blank'>あんQ $ver</a>\n";
print "</div>\n";
958 }

960 sub view { 以下略
---------------------------

なおKENJIさんの記述のようにより近くで、任意の位置にサブルーチン
を置くことができます。しかし、サブルーチン内に置くことはできません。
------------------------------
sub html {


sub view {


sub 他のルーチン{

}
------------------------------
エラーは
sub html{

sub view{
〜 }
}

となったことが原因と思われます。m(_ _)m;

>cgi歴、、最近

最近はブログやiPOD、SNS、ケイタイなどが流行しています。
それぞれ多機能満載です。しかし、自分でウェブプログラミン
グするには、perlによるcgiも面白いと思います。
KENJIさんの100項目のアンケートは、すぐ実現すると
思いますが、ウェブで体験してみたいですね。
一般に多項目の商品などの選択肢になると、上位2%が頭を形成し
て残り98%が尻尾になるそうです。その現象をロングテールと
いいます。アンケートでも恐竜の尻尾がでるのか、ぜひ貴サイト
のあんQで検証してみてください。

□ NXer [2006年11月23日20時56分]

>それとも永遠と下に

KENJI [2006年11月16日21時51分]さんの質問に項目
一覧を中心に回答させていただきました。NXerです。

ファイル上で作成した32項目のデータに基づく回答の
ため、実際にあんQでためすには、入力画面で次の制約があります。
----------------------------------------
758 (一度に設定できるのは10項目までです)
-----------------------------------------
愚案のように6項目程度のアンケートを作成しておりこの
制限に触れたことが無く、気が付きませんでした。すえぽん
さんはおそらく画面処理を考慮し、一般用ソフトとして
10を限度に作成されています。このようなソフトは汎用
ソフトといわれ、万人向けですが、個別の目的にはカス
タマイズが多少必要になります。

その1)入力画面で10項目を越える質問を作成するには

以下の変更で動作します。なお、変更する部分はperlでは
なくてjavascriptというスクリプト言語で記述されています。
-------------------------上限30の変更下例 文の一部引用
661  for (i = 0; i < 30; i++) {
   document.forms[0].anq_view.options[i].value = '';
672  if (29 < n) {  
    if (confirm('初期設定で入力できるのは10項目までです。\\nこれ以上追加すると入力した順上書きされます。'))
677 if ( (30 > n) && val) { 
702 for (i = 0; i < 30; i++) {
753 for ($i = 0; $i < 30; $i++) { if (! $i) { print "<option>現在設定されて
-------------------------------------------------
753の変更がない場合は、javascriptの、null あるいはオブジェクトではない
などのエラーメッセージがでます。753が上よりも小さい時、上の添え字変数
i では、より大きな配列が未設定のためにエラーになります。

その2)原作入力スクリプトを変更しないで10を超える任意の
   事項を設定するには。(とても沢山入力するとき便利です。)

始めに新たな次のテーマ「view test]のように、5項目程度入力します。
---------------------------------------- 
view test,20061121130714,36PeRwkZZZZ,0,0,1,nxer,,,
20041030153736,a1,0,#000000,
20041030153735,a2,0,#a9a9a9,
20041030153734,a3,0,#8b0000,
20041030153733,a4,0,#ffc0cb,
20041030153732,a5,0,#000000,
-----------------------------------------
tempファイルからダウンロードしてエディタやエクセル(コンマ
で区切ったcsv形式保存読み込み)で残りの10を越える任意のデータ
をコピーペースト、入力、変更などして作成します。完成したら
転送します。

a1,a2,a3が質問事項です。
このとき、左の時間の下2桁を36、35、34など入力時間を
降順になるように整序しておけば、表示がその順になり
ます。また棒グラフの色も16進数値でカラーチャート表
などを参考に見やすい色を時間をかけて設定することが
できます。

あんQは、印字するとA4用紙で20ぺージ程度の作品です。
その可能性は、他に例を見ないファイル管理能力などがある
ことから、アンケートという枠を突き抜けて、多様なインター
アクティブ(相互交流可能)な場面で活用できるcgiの一つと
思います。perlとjavascriptを併用するハイブリッドスクリプト
で記述されています。カスタマイズには言語の使い分けが必要
です。
2001年11月14日のすえぽん作品です。その5年と2日後
のKENJIさんの、どこまでもつづくのかな、という誰もが抱く
素朴なご質問は、あらたな活用法を示唆してくれました。
KENJIさん、原作者すえぽんさん、ありがとうございました。

suepon.com | CGI作成/CGI制作 | JavaScript | ドメイン検索 | バナー自動作成 | Google ダンスツール | 松浦亜弥 | H.P.memo | パソコン | ネイル

Copyright (C) 2002 - 2008 suepon , All rights reserved. Powered by CGI Script Market.