ラウンジ(兼FAQ掲示板)

あんきゅーでこんな事できますか?
過去ログ NO.1164603825
□ morino [2006年11月21日13時45分]
はじめまして。
morinoと申します。
あんQにて投票時に任意でコメントも入力できるようにする事はできるのでしょうか?
また、そのコメントが一覧で表示されればいいのですが?
宜しくお願いします。
□ NXer [2006年11月21日18時14分]

はじめまして。NXerです。

>投票時に任意でコメント

機能を追加するには、あんQに 
1 入力 2 保存 3 表示 4 日付処理(日付つきの場合) 
などの変更を各サブルーチンに加えれば100%可能です。

>一覧で表示

例----------------------------テーマ好きな季節
◇この前、九州は薩摩の焼き芋屋さんが、車で売りに来たけれど、鹿児島から?って聞きました。 よか女。 (05/11/07)
◇ナイターなら泣けるね。栂池、白馬、志賀高原、、、いい所教えて。 謎の貴公子。 (05/11/07)
◇花より団子。花子さ〜ん。田舎の太郎より。 (05/11/07)
◇私は熱い砂浜で、あなたの厚い胸で、あっちち。あなたは鉄の人形だった。 火遊び隊員。 (05/11/07)
------------------------------------
データ形式:
$subject\,$newnum\,$pass\,$limit\,$ent_mode\,$repost_mode\,$name\,$mail\,$url\,$mes\,

メッセージ用変数$mesを最後に追加しています。

プログラミングでは、入力フォーム(textareaで複数行
入力化)を投票画面に追加する、保存表示には
メッセージの長さを50文字程度の任意の文字列長に整形
処理する、そして
年月日は次のように98行目の$dateを利用します。
------------------------------- 05/11/07
#■ $year2桁処理+改行 ■
$mesyear=substr($year,2,4);
$mesdate = " ($mesyear/$month/$mday)<br>";
------------------------------------------
個人の好みで面白いcgiに改造できると思います。
上記例は試作版のため同一日入力順になっています。

フリーソフトウェアで類似の作品のコメント機能
はおそらくたいへん参考になると思います。

このような変更をしないで、htmlページにあんQと
掲示板をフレームで表示すると、とても簡単に
ご要望を実現することができます。文字数制限がなくなり
ます。アンケートの単調さと掲示板のにぎやかさがうまく
マッチすれば、絵になるかもしれません。
すえぽん風に、電光!プラスあんQも可能と思います。

□ morino [2006年11月21日20時56分]
NXerさん返信ありがとうございます。
恥ずかしながらCGIについて初心者でして詳しく教えていただけないでしょうか?
よろしくお願いします。
□ NXer [2006年11月22日12時24分]

メッセージ機能追加は、データの保存や呼び出しでスクリプト
のほぼ全体が対象になります。いくつかのステップに分けて
変更を試みます。NXerです。

********************* たいせつなおことわり
1 当方の愚案ですから、ご期待の作品になるという保証はできま
  せんのであらかじめお断りします。できたという程度です。
2 cgiの変更は自コンピュータ内にウェブサーバを構築して
  契約する、稼働中のサーバに不測の負荷をかけないようにして
ください。いろんな参考書があります。ほぼ無料でサーバを
構築できます。手順どおりすれば意外に簡単です。
3 (1入力)(2保存)(3表示)などには直接目で確認できない変更
  が含まれます。その場合、データで間接的に検証するなどして
  スクリプトを変更します。
  このためにもできる限り、自コンピュータ内にウェブサーバを
  インストールされますことをお勧めします。
4 ラウンジのトップページにりティさんのご助言があります。
  プログラム開発の優れた手順書です。自己解決に有益です。

上記お断りにもかかわらず、貴コンピュータと貴契約サーバに
不具合が発生しても、当方にはその責任が無いことをご理解くだ
さい。この作業の途中で中断されてもいつでも再開できます。
ご勤務/家業/生活時間のご都合で自由にお取り組みください。
また、以下でご期待に沿わない場合は、変更しないオプションも
あります。morinoさんの目的により適合するソフトを開発ご利用
いただくことを願って投稿します。
**********************************************************

1予備的な作業:
1.1 最初に現在当方のローカルサーバ上のanq.cgiのディレクトリ編成です。
/home/
...|-/anq/
.......|-anq.cgi
.......|-/temp/
............|-20061122105707

morinoさんのサーバでもほぼ上のようになっていると思います。

1.2 morinoさんのanq.cgi元版は、コンピュータ上に残ってい
ると思います。

そのファイルをエディタで開き
--------------------------------
16 # このファイルの名前
17 $script = "anqmes.cgi";
-------------------------------と変更します。
ファイル名も17行目の$scriptの値もanqmes.cgiと変更して保存します。

この変更したあんQv2(変更版)を転送し、パーミッションを
設定してブラウザで起動してみてください。
メッセージ機能を追加するのはこのあんQv2 anqmes.cgiです。
改造は、新しいソフトウェアの作成開発と考えてください。
そのためには、どうしてもあんQのデータを知る必要があります。

1.3 すぐに新しいテーマ 例「メッセージ」を作成してみましょう。
これはとても大切な作業です。サーバデイスク上にデジタル情報が
どのように保存されているかを知るためです。

作成後サーバのtempディレクトリから、たとえば
20061122105707
という新規作成ファイルをダウンロードして、エディタで開いてみて
ください。
------------------------------------------データファイル例
メッセージ,20061122105707,434zzzzzze7W2,0,0,0,nxer,,,◇テスト (06/11/22)<br>,
20061122105643,aaa,0,#000000,
20061122105642,bbb,0,#a9a9a9,
20061122105641,ccc,1,#8b0000,
---------------------------------------------
項目はテストように特別な意味をもたない aaa, bbb, cccです。

-------------------------------------------------------------------------
メッセージ,20061122105707,434zzzzze7W2,0,0,0,nxer,,,◇テスト (06/11/22)<br>,
-----------------------------------------------------------------------
($subject,$lastmod,$pass,$limit,$ent_mode,$repost_mode,$name,$mail,$url,$mes,) = split(/\,/,$subject);
----------------------データと変数の関係、変数の意味をご理解ください。

◇印以降は変更後の追加変数 $mes 、とデータ例です。今回の変更のテーマです。
しかし ◇と日付はスクリプトを複雑にするために以下では割愛します。
最後の<br>は改行マークです。表示にはとても大切なタグですが、これも
とりあえず割愛します。

2 第一の変更は、入力欄の新設です。
-----------------------------------------------行番号はその付近です。
# ■ message用 フォーム■
285 print "<tr><td colspan=5 class=plain><table class=plain><td
286 class=plain><tr><td>メッセージ (全角50文字以内で内容、名前(匿名可))<br>\n";
287 print "<textarea name=mes cols=40 rows=3 wrap=soft></textarea>\n";
----------------------------------上挿入下既存
287 print "<tr><td colspan=5 class=plain><table class=plain><td class=plain><input type=submit value=' 投 票 '
-----------------------------------------
285〜287で使用しているそれぞれのタグは、htmlの表のタグです。
フォーム cols=40 rows=3 とは 40桁3行です。50字以内の指定の大きさです。
適当に変更してください。

ここでファイルを保存して、転送します。起動して入力フォームが
できているか確認します。

2.1 起動しないエラーも予想されます。そのエラーメッセジから
   原因を考え修正して転送します。

2.2 入力フォームが100%完成したら次の保存に進んでください。
   デザインなども満足いくまでご検討ください。用途によっては、
urlを知らせて友人にみてもらうなどしてください。

3 第2の変更は保存です。
----------------------------629行に一致する番号を探してその前に628挿入
# ■ $mes prossessing for writing ■
628 $mes =$in{'mes'};
-------------------------------上挿入下既存で最後に$mes\,を追加。
629 unshift (@new2,"$subject\,$newnum\,$pass\,$limit\,$ent_mode\,$repost_mode\,
$name\,$mail\,$url\,$mes\,\n");
----------------------------------------------

この段階でも確認をします。ローカルサーバであれば、temp ディレクトリ
内のデータをエディタでみます。データの最後にメッセージがあれば
成功です。次に進みます。さもなければ、見直します。

--------------------------------------
メッセージ,20061122105707,434zzzzze7W2,0,0,0,nxer,,,テスト
---------------------------------
テストが書き込んだメッセージです。

ここまでできればほぼ完成です。
なお大きなソフトなので、他に変更が必要です。
------------------------------------------------------------
($subject,$lastmod,$pass,$limit,$ent_mode,$repost_mode,$name,$mail,$url,$mes,) = split(/\,/,$subject);
-------------------------------------------------------
split(/\,/,$subject)という関数を含む行はたくさんありますから、
すべて$urlの後に$mesを追加します。ほかにもこのデータの並びはすべて
追加してください。これは相当数あります。なかにはほとんど使わない
ルーチンの変更もありますが、全部変更します。検索をかけてください。
微妙な違いがあり全置換ではエラーが出る恐れがあります。細心の注意が
必要とされる作業です。

4 さて最後はメッセージの表示です。
--------------------------------------------------
# ■ メッセージ表示 ■
276 print "<tr><td colspan=40 class=plain><br>*** この質問・項目へのメッセージ *** <br><br>$mes</td></tr>\n</table>\n";
------------------------------------------
277 if ($vote_stop) {
---------------------------------
とりあえず最小限の変更です。

変更は、(1,2,3,4)と左/上から右/下へつながる一本のひも状になっています。
1が100%検証できたとき初めて2に進むことができます。2で1%のミス
があってもこの変更全体は動作しません。それぞれの段階で何らかの
動作検証確認が可能です。保存されたデータをエディタでみるなど
します。
当方でテスト済みの改造ですが、サーバを共有するひとびとに
取り返しの付かない不具合を万が一ですが、発生させるおそれがあり
ますのでご注意のほどよろしくお願いします。

なお、細部では メッセージのはじめに ◇をつけたり、日付を
つけるなどの処理は割愛しました。上記は骨格だけです。骨まで
愛して というはやり歌がありましたが、$mes という1本の
骨を、あんQに生成する、移植するわけですから、愛情一杯の
作業になります。
□ morino  [2006年11月22日14時44分]
NXerさんありがとうございます。
できる事には出来たのですが、コメント部分が投票するたびに消えるのですが。。。
私としましてはコメントを残していきたいのですが可能でしょうか?
□ NXer [2006年11月22日15時06分]

>投票するたびに消える

メッセージは正しく書き込まれ表示されたと思います。NXerです。

正しく消えた理由は当方の次の行にあります。
----------------------------629行に一致する番号を探してその前に628挿入
# ■ $mes prossessing for writing ■
628 $mes =$in{'mes'};
--------------------------------

628行目は、常に新規メッセージのみ保存表示しています。

過去の書き込みを追加するには次のように変更します。
文頭の◇マークなどや改行の<br>など追加してください。
-----------------------------
628 $mesnew =$in{'mes'}; #新規メッセージの取得
629 $mesnew =$mesnew."<br>"; #改行コード付加
630 $mes=$mes."◇".$mesnew; #旧書き込みに文頭マーク、改行付き新規追加
-------------------------------#はコメント文です。

なお当方のテストでは
1人目 書き込みあり 「はじめまして」
2人目 書き込みなし
3人目 書き込みあり 「1を選択しました一郎です。」
の場合、
「はじめまして」
「1を選択しました一郎です。」となります。
そのためには次の変更が必要です。追加してください。
----------------------------------------------
#■ $mes 新規用 改行コード挿入
840 if (! $in{'mes'}) { $in{'mes'} = "<br>"; }
-------------------------------------下既存上挿入
841 if (! $in{'mail'}) { $in{'mail'} = "<br>"; }
----------------------------------------------
以上お試しください。

□ ひろたか [2006年11月24日16時38分]
NXerさん、こんにちわ。
私もコメント付投票に魅力を感じ組み込んでみたのですが、$mesnew =$in{'mes'};
$mesnew =$mesnew."<br>";
$mes=$mes."◇".$mesnew;を付け加えると上手に出来る時と投票すると投票項目が勝手に増えラジオボタンの箇所に>が付きます。
対処方法はありますでしょうか?
コメントなしで投票された場合でも◇が付いてあとは空白で行が増えていくのですが、コメントがある場合のみ入力されるようにはどうすればいいでしょうか?
あと、投票前はグラフを非表示にしている為に枠のレイアウトの形が変です。
投票項目の文字数をふやすと番号の所とラジオボタンの枠の所の幅は小さくなっていき文字数が少ない時はその逆になります。
対処方法があればよろしくお願いします。
□ NXer [2006年11月24日19時51分]
ひろたかさん、テスト運用ありがとうございました。
以下ご指摘の2点です。

>コメントがある場合のみ

このことばをそのままperlで表現してみます。次のように 
if ($mesnew){ } 文を付け足してください。( )内が真のとき
動作します。
本格運用直前のようなので、さらに文字列長の制限や日付(
前/上の投稿をみてください、改行処理済)を追加します。NXerです。

----------------------------------------日付有り
# ■ $mes prossessing for writing ■
$mesnew =$in{'mes'};
if ($mesnew){#もし(新規書込みがある)なら
# ■ メッセージ 50字制限処理
if (length($mesnew) > 100) {
$mesnew = substr($mesnew,0,100);
$mesnew = $mesnew."...";
}
$mes=$mes."◇".$mesnew.$mesdate;
}
----------------------------
文字コードにより、また半角英数全角の混在などの環境下では、
文末のデコードで、コードが表示されることがあるかもわかり
ません。エラーではありません。

日付なし、ならば新規に改行マーク処理
----------------------
$mesnew=$nesnew."<br>";
$mes=$mes."◇".$mesnew;
------------------------------------

メッセージ入力でのスパム投稿防止策は
$mesnew =$in{'mes'};
& antispam;

sub antispam{



のように防止サブルーチン(この投稿では割愛)を入れます。さら
に、本格運用前にできれば質問項目入力チェックにも組み込みたい
ルーチンです。善意の運営を悪用されて、思わぬ加害者になることを
未然に防ぐ必要があります。インターネット利用は、被害者になり
易い小・中学生、さらに思春期のこどもたちに、悪意の書き込で取り
返しのつかない傷を心に残すことがあるからです。それは成人でも
耐えられないことです。

以下はひろたかさんのような投票前グラフ非表示の時に限った
現象です。

>枠のレイアウトの形
>投票項目の文字数をふやすと番号の所とラジオ

291 elsif (@sorted) {
#--------------------投票更新を別表に
292 print "<table>\n"
----------------------

[投票][更新]の枠が漢字4文字プラス横の空白で計13文字程度です。
これは固定長です。Xの長さとします。

他方、アンケートの番号、ラジをボタンで4文字程度。質問事項が
すべて術語1〜4語程度の場合(例、桜、楓、松。 中日、阪神、広島
この順列に特別な意味はありません)は、合計文字列長8文字以内。
この変動長をYの値とします。(上記メッセージの50字制限も
最長文字列を50字に固定する処理です。画面、表のサイズで調整
してください。)

投票時、Y<X の時、固定長のXの枠に自動的になりますが、投票後は、
グラフの長さ文加わりY+グラフ長。これは常にXより大です。その結果、
質問事項の文字列と番号とチェックボックスの合計長がXよりも短い時と、
グラフ表示の時の枠の差で、ご指摘の現象が発生します。

このような画面の動作は、運用する時利用者に不安感を与える恐れ(操作
を間違ったのかと思わせること)があります。改善策は他にもあると思い
ますが、292行目を挿入してみてください。

以上です。当方の未熟なウェブプログラミングの駄目だしと考えて、使う立場
で、ご意見ご批判のほどよろしくお願いします。wikipediaでは24時間
以内に記述ミスなどが訂正されるほど、オープンソースの世界は萌え(x2)
ているようです。

(当方も予期できないエラー対策に貴コンピュータにウェブサーバを構築
されますことをお勧めします。その方法が分かりやすく説明されている
すえぽんさんの著作はアマゾンでたぶん注文可能です。)

□ NXer [2006年11月24日20時50分]

>ラジオボタンの箇所に>

原因は次のようなデータ形式に起因します。

原作データ
--------------------------------------------------------
test,20061120165103,1777777NJokl6,20061119,0,0,nxer,,,
-----------------------------------------------------------
右端三つ目のコンマのあと、非表示ですが、改行マークがあります。

他方メッセージ書き込みのデータでは
-------------------------------------------------
coment,20061124201430,18888w0TYAI,0,0,0,nxer,,,◇test (06/11/24)<br>◇test2 (06/11/24)<br>◇test3 (06/11/24)<br>◇test4 (06/11/24)<br>
----------------------------------------------------
のように、メッセージ文字データが追加されています。

--------------原作データ形式
$url
--------------メッセージ追加形式
$url,$mes
--------------
のズレのために、旧データ形式で作成されたデータの場合
新あんQで投票直後一つ分のデータのずれが発生して
特定はできませんが、タグ用の>を表示するのかもしれません。

開発のために新テーマを作り、問題なく動作しているため
に気が付きませんでした。旧データではたしかにエラー
がでました。
新旧を同時に運用する場合には、このような混乱を生じさせ
ないように新メッセージ用あんQではたとえば
------------------
# 作業用フォルダ
$tmp = "./temp/";

-------------------
$tmp = "./tempmes/";
--------------------
のように変更する必要があるかもしれません。

コメントタイプに統一するなら、以前の/temp/を
サーバで一度削除してあらたにデータを作成する
あるいは、保存されているデータファイルを削除する
などのリセットが必要になるかもしれません。
いわゆるデータの下位互換性/上位互換性の対策が
ソフトウエアの更新では重要になります。

新しい酒を古い皮袋に入れるというたとえ話があります。
私達はしばしばmindset思い込みで、新しいものをつい
古い感覚で考えていることが多いようです。ヒューマン
エラーの代表的なものです。
ひろたかさんの参加をいただき、エラーも3倍かもしれ
ませんが、3人寄れば文殊の知恵です。
□ ひろたか [2006年11月24日22時59分]
NXerさん
何度やっても投票項目が増えてそこに入力した文字が追加されるのですが、何か間違っているのでしょうか?
tempmesのフォルダに出来たものです。
あああ,20061124230018,11b0WGZJEBWiw,20061124,0,0,あい,,,
◇<br>,
20061124230011,あああ,1,#000000,
$mes =$in{'mes'};
だけだと上手くいくのに$mesnew =$in{'mes'};すると何故かおかしくなります。
助けてください
□ ひろたか [2006年11月24日23時34分]
NXerさん追加です。
調べてみると、まず始めにコメントなしでクリックすると上での質問のような症状がでます。
対照的にコメントありで投票すると正常に動作するようです。
□ NXer [2006年11月25日11時22分]

ひろたかさん
>調べて
いただき、お手数を掛けてごめんなさい。NXerです。
プログラミングでは、デバッグ(間違い探しと修正)が付き物
です。当方の愚考をヒントにもう少しいろいろ変更を試して
ください。時間が無い時は、822行目付近の変更で不具合の
有無を確認してください。

ひろたかデータ
hiro1---------------------------------------------------
あああ,20061124230018,11b0WGZJEBWiw,20061124,0,0,あい,,,(非表示改行コード)
◇<br>,
nxerデータ---------------------------------------------------------
bbbbb,20061125092634,11qjbfhb0gG5I,0,0,0,nxer,,,◇aaa (06/11/25)<br>◇dddd (06/11/25)<br>,
------------------------------
違いを取り出します。
hiro2----------------
あい,,,(非常時改行コード)
◇<br>,
nxer--------------------改行なし
nxer,,,◇aaa (06/1
---------------
ひろたかさんのデータでは、名前あいの後に省略時のメルアドや
url用のコンマが有り、非表示のperl改行マークがあります。
従って、◇<br>、を質問事項として読み、<を表示しているようです。
これは読み出しのデータ構造が、、、、$urlで終わり、コメントなしの
処理をしているようです。

原因はスクリプトのデータ構造の変更もれにあります。
■-------------------------------------------------------------
sub new_file { このサブルーチン内のデータ処理旧と新を見てください。

822 $value ="$in{'subject'}\,$newnum\,$pass\,$limit\,$in{'ent_mode'}\,$in{'repost_mode'}\,$in{'name'}\,$in{'mail'}\,$in{'url'}\,\n";
□----------------------------------------------------------------
$value ="$in{'subject'}\,$newnum\,$pass\,$limit\,$in{'ent_mode'}\,$in{'repost_mode'}\,$in{'name'}\,$in{'mail'}\,$in{'url'}\,$in{'mes'}\,\n";
--------------------------------------------------------------------
他のほとんどは $url\,$mes\,\n の形式ですが、ここは$url検索では
$in{'url'}\ と不一致のためにたぶんエディタ任(まか)せでは見落とします。
置換機能も動作しないため、目で探すかurlで検索してたどり着いてください。
822行目付近です。
20ページ程度のスクリプトを見直しているのですが、当方も久しぶりに
にみる/読む/解読するために、新規フィファイルのデータの値$valueの代
入文書換のことに触れるのを忘れていました。

----------コメント機能有り日付なしスクリプトです。当方で動作検証済み。
$mesnew =$in{'mes'};#新コメント一時変数
if ($mesnew){#もし(新規コメントがある)が真なら
$mesnew=$mesnew."<br>";#一時変数に改行コード(htmlタグ)追加
$mes=$mes."◇_".$mesnew;#旧コメントに見出しと一時変数追加
}
unshift (@new2,"$subject\,$newnum\,$pass\,$limit\,$ent_mode\,$repost_mode\,$name\,$mail\,$url\,$mes\,\n");
------------------------------

データ1項目の追加ですが、ほぼスクリプト全体の各サブルーチンの見直
しが必要です。当方の長期記憶機能の加齢にともなうエラーと、デバッ
グでは容易に見つからない論理エラーの重なりでした。なお短期記憶も
あてになりません。ご検討のほどよろしくお願いします。



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

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