過去ログ NO.1166083340
□ ひろたか [2006年12月11日13時54分]NXerさんへ 現在、遊び心が何かないか探し中のひろたかです。 また、お聞きしたいのですが、現在コメント付き投票方式になっているのですが、そのコメントを入力した際に顔アイコン画像を選択でき投票時にメッセージと一緒に表示できるようにはできますでしょうか? 顔アイコン メッセージ 日付 みたいな並びで表示できればOKです。 理想としては、 http://polls.dailynews.yahoo.co.jp/quiz/quizresults.php?poll_id=282&wv=1&typeFlag=1 のような事です。 重ね重ね申し訳ないですが回答いただければ有難いです。
□ ひろたか [2006年12月11日21時41分]NXerさんへ 書き忘れました。 そして、コメントの表示件数を最近のものが20件まで表示されていて、コメント一覧ページに一覧が表示されるようにできれば有難いです。 複雑過ぎますでしょうか?
□ NXer [2006年12月11日23時11分] ひろたかさん、当方は動物アイコンでテストしました。NXerです。
Twinkle-Starさんのgif画像を使いました。クール系ではなくて かわいい系です。ひろたかさんが想定する対象が不明なために 上記yahoo系よりも適しているかどうかは、不明です。しかし、 当方のグレー系のなかでは、画像作者のぬくもりを感じるアイコン です。アイコンサイズを指定しなくても、ほぼそのまま使えます。
その1)画像の準備 すぐにテストできますから、まず、画像から。出来上がりを考えて 画像を選択してください。フリー素材の場合は使用条件をお守り ください。説明ページを作成する場合は、そこに著作権を表示する などしてください。
/img/ 0.gif 1.gif 〜 9.gif
ファイルはコピーペーストしたあと、上の名前に変更してください。
なおテストのため以下は最小限の変更です。 アイコン選択欄の下か横に番号とアイコンを表示するスクリプトは ひろたかさんで考えてください。 1と入力すると0.gifが表示されます。画像番号は1から始めてください。
そのために初期設定 -----------------------------以前の修正 21# 画像フォルダ画像 $img = "./img/"; ------------------------------以前の修正 65# BODY $body = "<body text='$text' background=$img/b2.gif>";
その2)データ形式 データ例 ------------------------------------------- アイコン,20061211201019,35zzzz,0,0,0,nxer,,,1◇アイコンテスト (06/12/11)<br>2◇アイコンテスト2 (06/12/11)<br>3◇アイコン3 (06/12/11)<br>, ------------------------------------------ コメント部分抜き出し--------------------- 1◇アイコンテスト (06/12/11)<br>2◇アイコンテスト2 (06/12/11)<br>3◇アイコン3 (06/12/11)<br> ------------------------------------------ 1◇アイコンテスト (06/12/11)<br> ↑ ↑コメント文 先頭1文字が選んだアイコン番号、画像はマイナス1します。 終わりは改行マークbrの後の>(より大)記号です。 この単位で抜き出します。このような処理のアルゴリズム は、汎用性はありません。
その3)アイコン表示
改造、運用には以下のスクリプトを理解する必要はありません。 画像を2桁用意する場合、00、01、、、、、10、、、 20など前2文字の処理になるため、substr($mesunit,0,1) の第2引数を2に変更したりすることをご理解ください。
----------------------------- 281 print "</table><br><table cellpadding='15'><tr><td bgcolor='gray' colspan=40 class=plain><font color='white'>*** この質問・項目へのメッセージ *** <br><br>\n"; #---取扱い厳重注意!!■■エラーはサーバ暴走を引き起こします■■!!無限ループに突入します。 # $mes processing to substract icon number and message $len=length($mes); #while制御用文字列の長さ while ($len>0) { $i=index($mes,">");#単位コメントの終端マーク位置 if ($i>0){#終端マークがあれば $mesunit=substr($mes,0,$i);#単位コメント $icon=substr($mesunit,0,1)-1;#アイコンno-1 $mesunit=substr($mesunit,1);#残り単位コメント if ($icon eq "-1"){print "------$mesunit<br>\n";}#アイコンなし else {$icon=$icon.'.gif';#gif 付加 print "<img src=$img$icon></img>$mesunit\n";} $mes=substr($mes,$i+1);#残り全コメント print "<br>\n"#改行 } else {$len=-1;}#コメント文はありません。ループを出ます。 }#行の前はラウンジでは全角の空白です。コピーしたらとる事。 ---------------------------------上挿入、下1行一部変更 print "</font></td></tr></table><br>\n"; if ($vote_stop) { ---------------------------------------- スクリプト中にコメント文を書き込みました。 while構文から抜け出すには$mesの処理をして、文がなくなると 文字列長は0となり、値を-1とします。 ***********************************************万一の場合 この値にならない限り、無限ループに突入します。テストする 必要はありませんが、抜け出す条件式を忘れると暴走します。 万一レスポンスが無い時は、コンピュータのリセットボタンを 押してください。 ************************************************
その4)入力は番号を選びます。 (番号とアイコンの表示は自作してください。とりあえず、テストでは 番号を入力してみてください。成功したら、アイコン一覧に取り組んで ください。) --------------------------------------元 306# ■ message用 フォーム■ print "<tr><td colspan=5 class=plain><table class=plain><td class=plain><tr><td>メッセージ (全角$msg_max文字以内で内容、名前(匿名可))<br>\n"; print "<textarea name=mes cols=40 rows=3 wrap=soft></textarea></td></tr></table>\n"; --------------------------------挿入 # ■ icon用 フォーム■ print "<table><tr><td>あなたのアイコン</td><td class=plain><input name=icon size=5></td></tr>\n"; -----------------------------------------
その5)アイコン番号の埋め込み処理 ----------------------------------------- 634# ■ $mes prossessing for writing ■ icon embedding $mesnew =$in{'mes'}; if ($in{'icon'}){$icon=$in{'icon'};} else {$icon="z";}#zはアイコンなし 入力ミス対策 &antispam; if ($mesnew){ # ■ メッセージ 50字制限処理 if (length($mesnew) > 100) { $mesnew = substr($mesnew,0,100); $mesnew = $mesnew."..."; } $mes=$mes.$icon."◇".$mesnew.$mesdate; } ------------------------------------------------- 入力ミスは、z をデフォルト値として与えます。 デフォルトを0.gifにしておいて、1から9までの8ヶから 選ぶ時は $icon="0";とします。 $icon=substr($mesunit,0,1)-1;#アイコンno-1 のマイナス1をとります。
このあたりは、入力で、必ずアイコン選択と指示したり アイコン未選択はエラー処理して再入力するようにしても いいのですが、面倒な処理をすると投票してくれないかも しれません。運用して様子を見てください。
顔アイコンにするか動物アイコンにするか、それぞれ無数のフリー素材 が提供されていますから、アンケートの対象者を明確にして選択 されててはいかがでしょうか。
> コメントの表示件数を最近のものが20件まで表示されていて、 > コメント一覧ページに一覧が表示されるようにできれば有難いです。 上記スクリプトでコメント切抜きをカウントして20件表示で $cmntcount>20 なら{$len=-1;} としてループを抜け出します。 コメント一覧は別のサブルーチンを作成して、テーマ選択ページ でコメント一覧ページの選択ボタンにします。複雑にならない と思います。お試しください。ソフトは生き物です。大切に 育ててください。
ひろたかさんの数数の貴重なご提案で、すえぽんさんのあんQが本当に ダイヤモンドの原石であることを再認識しました。ローカルウェブサーバ を今回も開発中暴走させましたが、めげずにまけずに、より固い意志( 硬い石)で、なんとか切り抜けることができました。結果は動作して のお楽しみというところです。それは、利用者の楽しみでもあります。 いい利用者に恵まれ、ダイヤが輝きますことをお祈りいたします。
◇謝辞◇ すえぽんさんとTwinkle-Star運営者まさあきさんに こころから感謝申し上げます。
□ ひろたか [2006年12月12日11時24分]NXerさんへ アイコン表示、無事出来ました。 いつも有難うございます。 二つ目の質問ですが、コメントの表示件数の件、上手くいきません。 具体的に教えて頂いてもよろしいでしょうか? あと、画像を2桁用意する場合ですがsubstr($mesunit,0,1)の第2引数を単純に2に変更するだけではないのですね? 表示はされるのですがアイコンの後ろに二桁の1の位の数字が表示されますがどうすれば、、、 宜しくお願いします。
□ NXer [2006年12月12日13時33分] > アイコン表示 無事動作していますか。テストはコンピュータ、サーバに壊滅的 な不具合を引き起こすことを予想してデータのバックアップをく れぐれも忘れないようにしてください。当方には責任はないの ですが、コンピュータの再セットアップとなると半日仕事です。 NXerです。
>上手くいきません。 データ構造を文書化したり絵に描いて、目で見たままに、どのよう な配列にするか、というアルゴリズムを考えてください。積み木 (ブロック)遊びに似ています。 [1][2][3] を [3][2][1]にするには[1]の前、左に[2]を置きます。 このような、右別れ、左別れは、言語を含む記号の直線的な並べ かたの基本です。実際の積み木は、さらに、上や下という3次元の 処理もあります。慣れていても、決して上手くいかないものです。
>コメントの表示件数
その1)初期値設定 ---------------------------------- #全コメント用フラグ $msgflag=0; #---------------- 初期設定ここまで ---------#
その2)分岐スクリプト # 全コメントフラグ追加 elsif ($in{'mode'} eq 'allmsg') { $msgflag=1; &html; } -------------------------------------上の行挿入 131 elsif ($in{'mode'} eq 'vote') { &vote; }
その3)最新10件、全コメント表示 ------------------------------- 279 # ■ メッセージ表示 ■ # 元print "</table><br><table cellpadding='15'><tr><td bgcolor='gray' colspan=40 class=plain><font color='white'>*** この質問・項目へのメッセージ *** <br><br>$mes</font></td></tr></table><br>\n"; -------------------------------以下新規変更分◆を含む if ($msgflag<=0) {#◆修正 print "</table><br><table cellpadding='15'><tr><td bgcolor='gray' colspan=40 class=plain><font color='white'>*** 最新10メッセージ *** <br><br>\n";} else {print "</table><br><table cellpadding='15'><tr><td bgcolor='gray' colspan=40 class=plain><font color='white'>*** 全メッセージリスト *** <br><br>\n";}
# $mes processing to substract icon number and message $len=length($mes); #while制御用文字列の長さ $msgcount=0;#◆counter for the latest最新 10 messages while ($len>0) { $i=index($mes,">"); if ($i>0){ $msgcount++; $mesunit=substr($mes,0,$i);#単位コメント $icon=substr($mesunit,0,1)-1;#アイコンno-1 $mesunit=substr($mesunit,1);#残り単位コメント if ($icon eq "-1"){print "------$mesunit\n";}#アイコンなしコメント else {$icon=$icon.'.gif';#gif 付加 print "<img src=$img$icon></img>$mesunit\n";}#アイコンとコメント $mes=substr($mes,$i+1);#残り全コメント print "<br>\n";#改行 if ($msgcount>9 && $msgflag<=0){$mes="";}#◆最新かつ全flag0 } else {$len=-1;}#この行重要 } #---------------------------- print "</font></td></tr></table><br>\n"; if ($vote_stop) { print "<tr><td colspan=4 class=plain>この項目への投票は終了しました</td></tr></form></table>\n"; } -----------------------------------
その4)全コメント選択ボタン ------------------------------------------- 355 print "<input type=reset value=' 消 去 ' class=btn></td></tr></table>\n"; print "</form>\n"; } #■--------------コメント用 以下挿入 print "<p>\n"; print "■すべてのコメントを見る<br>\n"; print "<table border>\n"; print "<form action='$script' method=POST>\n"; print "<input type=hidden name=data value=\"$in{'data'}\">\n"; print "<input type=hidden name=mode value=allmsg>\n"; print "<table class=plain><td class=plain font color='white'><input type=submit value=' 全コメント ' class=btn ></font></td></table></form>\n"; #-----------------------------↑挿入↓既存 この場所は適切な場所にしてください。 print "<p>\n"; print "■編集/削除モードへ<br>\n"; print "□各種設定の変更及び削除はここから<br>";
その5)コメントの順列変更 重要な変更です。 -------------------------------------- 664 #$mes=$mes.$icon."◇".$mesnew.$mesdate;#旧ー新 $mes=$icon."◇".$mesnew.$mesdate.$mes;#新ー旧 --------------------------------------------- 最新10件でテストしています。 元の並びは、11件の場合、 コメント1(最古) コメント2 コメント3 。。。。 コメント10 コメント11(最新) となります。664では、データは、左から、1,2,3、、、10,11です。 最新10にするには一度全データを配列に格納して並べ替えて最新 11からに2にするか、から初めて11まで。 配列処理を簡潔にするために、データを旧データの前に新を追加する 処理をしています。 テーマ、登録者、投票総数などを最小限にして、スクロールを必要と しない工夫をしてください。投票画面はシンプルにする方が使いやす いとおもいますが、いろんな選択をテーブルで見やすく処理してみて ください。
>画像を2桁用意する場合ですが >二桁の1の位の数字が表示されますがどうすれば、、、
関連するスクリプトの行とデータの一部をお知らせください。 その結果を当方で試して再現してみます。 データファイルをエディタで開けると、格納データがわかります。
当方の愚作はローカルサーバ内限定です。ネットには匿名性保持のた めアップロードしていません。そのかわりにひろたかさんの作品には いつか、どこかでお会いする機会があるかもしれません。 i'm looking forward to accessing your fantastic polling website.
□ ひろたか [2006年12月12日14時21分]NXerさんへ 早速回答頂き有難うございました。 表示画像の2ケタの件です。 こちらは15個の画像でラジオボタンのチェックすればアイコンが画像に表示するようにしています。 これで確かにアイコンは表示されるのですが、10件以降のアイコンはアイコンの次ぎに10であれば0、11であれば画像1と表示されてしまいます。 宜しくお願いします。 374# 背景色 $bgcol = "beige"; print "</table><br>\n"; if ($scoreview>=1){ print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> コメント </font></b><br><br>\n"; $len=length($mes); while ($len>0) { $i=index($mes,">"); if ($i>0){ $mesunit=substr($mes,0,$i); $icon=substr($mesunit,0,2)-1; $mesunit=substr($mesunit,1); if ($icon eq "-1"){print "--$mesunit<br>\n";} else {$icon=$icon.'.gif'; print "<img src=$img$icon></img>$mesunit\n";} $mes=substr($mes,$i+1); print "<br>\n" } else {$len=-1;} } print "</font></td></tr></table><br>\n"; } if ($vote_stop) { print "<tr><td colspan=4 class=plain>この項目への投票は終了しました</td></tr></form>\n</table>\n"; } elsif (@sorted) { print "<table>\n"; print "<input type=hidden name=mode value=vote>\n"; print "<input type=hidden name=data value=\"$in{'data'}\">\n"; if ($mesinput >=0){ print "<tr><td colspan=5 class=plain><table class=plain><td class=plain><tr><td><font size='4pt'>【 コメントを書く 】</font><BR>(※全角50文字以内で内容、名前(匿名可)) <br>\n"; print "<textarea name=mes cols=40 rows=3 wrap=soft></textarea><br>\n"; # ■ icon用 フォーム■ print "<input type=radio name=icon value=1><img src='./img/0.gif'>\n"; print "<input type=radio name=icon value=2><img src='./img/1.gif'>\n"; print "<input type=radio name=icon value=3><img src='./img/2.gif'>\n"; print "<input type=radio name=icon value=4><img src='./img/3.gif'>\n"; print "<input type=radio name=icon value=5><img src='./img/4.gif'>\n"; print "<input type=radio name=icon value=6><img src='./img/5.gif'>\n"; print "<input type=radio name=icon value=7><img src='./img/6.gif'><br>\n"; print "<input type=radio name=icon value=8><img src='./img/7.gif'>\n"; print "<input type=radio name=icon value=9><img src='./img/8.gif'>\n"; print "<input type=radio name=icon value=10><img src='./img/9.gif'>\n"; print "<input type=radio name=icon value=11><img src='./img/10.gif'>\n"; print "<input type=radio name=icon value=13><img src='./img/12.gif'>\n"; print "<input type=radio name=icon value=14><img src='./img/13.gif'>\n"; print "<input type=radio name=icon value=15><img src='./img/14.gif'>\n"; }
□ NXer [2006年12月12日15時00分] コンピュータでは配列を0から始めます。スクリプトに i-1 などとあるのはゼロ位置の配列要素を意味します。 そのためテストでは、画像数を0〜9までの10枚の時は、 0を含める10ヶでした。NXerです。
その1)アルゴリズム 1桁を2桁に変更
画像を1枚目から99枚まで用意するとします。1〜9は 10の位のゼロを表示しないと
1,2、、、、9です。 0を有標にすると 01,02,03、、09です。
これで文字列として常に先頭の0位置から2文字が アイコン.gifの名前、左から2位置つまり3文字目から コメント文となります。
01◇昔からの言い伝えで雷が一番恐ろしい。ゴルフ場で、、<br> 012345(substr()の切り抜き開始位置の数)
その2)画像の準備
01.gif 02.gif 03.gif 〜 10.gif 〜 99.gif まで可能。
なお、入力番号とgif名番号は一致させます。-1は不要です。
その3)2桁位置に修正 (変数の意味に注意してください。)
298はsubstr()の第3変数を 2 にします。ゼロ位置から2文。 299はsubstr()の第2変数を、2位置、第3文字目から初めて残りすべて。 なお、第3変数がない場合は、すべてを意味します。 不具合は、1の場合、2桁目の数字から切り取り、それが表示されます。 アイコン番号入力忘れで投票した時のデフォルト値zz は ---- で代替表示 します。 ------------------------- 298 $icon=substr($mesunit,0,2);#2文字取得 $mesunit=substr($mesunit,2);#残り単位コメント if ($icon eq "zz"){print "------$mesunit\n";} -------------------------------------------------
その4)入力数字の1〜9の2桁処理とアイコン入力忘れ処理 --------------------------- 653 # ■ $mes prossessing for writing ■ plus icon 00〜99icon $mesnew =$in{'mes'}; if ($in{'icon'}){ $icon=$in{'icon'}; if ($icon<10){$icon="0".$icon;}#1〜9の2桁処理 marked zero(0有標) } else {$icon="zz";}#2桁対応zz アイコン入力忘れ対応 ----------------------------------------------
ゼロには面白い話があります。それは日本語ではないという人も います。ゼロ戦というのは、英語表現であるとか。いまでも 私達のまわりにはゼロを発見できない人がいるようです。 ソロバンでは玉が初期状態、ご破算状態がゼロ。デフォルト値 がゼロです。面白いのは十、二十、、のとき10として1の位にゼロを かきます。これを 1 、、、01の意味 1 、、、10の意味 -------------- のようにします。ソロバンでは、玉の芯が位取りをしていて 間違う人はいません。コンピュータで入力をする時2桁処理 をするとき、枠を作り位を2つ用意すれば間違いはありません。 例 [][]
しかし、1桁に[0][1]とするのは不経済な操作です。そのあたりを ------------------- if ($icon<10){$icon="0".$icon;}#1〜9の2桁処理 marked zero(0有標) ------------------- のように処理しています。
他にも不具合があれば、上のような愚案にそって修正してください。 あるいは、よりエレガントなアルゴリズムを開発してください。
> print "<input type=radio name=icon value=1><img src='./img/0.gif'>\n";
2桁の発想を上に詳述しました。画像を 01.gifから初めて、15.gifまで変更してください。
value=01
これで動作するか試してください。作品を見ていないので上の 説明は番号入力になっています。いずれでも動作すれば 使い勝手のいい方を選んでください。
□ ひろたか [2006年12月12日15時13分]NXerさんへ 組み込みましたが、表示しません。 どこが、問題なのでしょうか? if ($msgflag<=0) { if ($scoreview>=1){
print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 最新コメント </font></b><br><br>\n"; } else {print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 全コメント一覧 </font></b><br><br>\n"; }
$len=length($mes); $msgcount=0; while ($len>0) { $i=index($mes,">"); if ($i>0){ $msgcount++; $mesunit=substr($mes,0,$i); $icon=substr($mesunit,0,1)-1; $mesunit=substr($mesunit,1); if ($icon eq "-1"){print "--$mesunit<br>\n";} else {$icon=$icon.'.gif'; print "<img src=$img$icon></img>$mesunit\n";} $mes=substr($mes,$i+1); print "<br>\n" if($msgcount>9 && $msgflag<=0){$mes="";} } else {$len=-1;} } print "</font></td></tr></table><br>\n"; } if ($vote_stop) {
□ NXer [2006年12月12日15時31分] > 表示しません。> どこが、問題なのでしょうか?
当方とはバージョンの違いでいろんな旗の整合性はよくわか りませんが、すくなくとも組み込み前は、 (アイコン)(その下1桁の数字)を表示していたと思います。 そのバージョンまで戻ることができますか。 それから再度組み込んでください。NXerです。
スクリプトで気づいた点は、 298行目のsubstr()の第3引数 299行目のsubstr()の第2引数 の変更や入力忘れの処理を変更です。
■----------------------------------- 298 $icon=substr($mesunit,0,1)-1; $mesunit=substr($mesunit,1); if ($icon eq "-1"){print "--$mesunit<br>\n";} ------------------------------------------- □-------------------------by nxer 298 $icon=substr($mesunit,0,2);#はじめの2文字取得 $mesunit=substr($mesunit,2);#残り単位コメント if ($icon eq "zz"){print "------$mesunit\n";} ------------------------------------------------- 以上です。
□ ひろたか [2006年12月12日16時36分]NXerさんへ 画像ファイルを01で保存しても1と認識してしまうのですがどうすればいいでしょうか?
□ NXer [2006年12月12日17時57分] 表示されない訳(わけ)です。NXerです。
■-------------------- if ($msgflag<=0) { if ($scoreview>=1){ print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 最新コメント </font></b><br><br>\n"; } else {print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 全コメント一覧 </font></b><br><br>\n"; } ---------------------------- ($msgflagが初期値の0、最新のみ)なら、{処理1 (投票結果表示旗が1なら、投票後表示)、見出し 最新コメント} (さもなければ、投票結果表示旗が0なら結果表示なし)なら {処理2 全コメント} 全コメントを選ばなければ、初期値で最新のみ投票後に表示されそうです。 しかし、全体の時は、旗は1ですが、$scoreview>=1でない時見出しを表示 するという処理です。
if ($scoreview>=1){
} この枠組みが上位になるようにされてはいかがですか。 当方はオリジナル版でコメント文のあんQにしているために 気が付きませんでした。 □--------------------by nxer if ($scoreview>=1){ if ($msgflag<=0) { print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 最新コメント </font></b><br><br>\n"; } else {print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 全コメント一覧 </font></b><br><br>\n"; ,,,,,, }
(もし投票結果表示なら){ (もし、最新コメントなら){最新コメント見出し} (さもなければ、 ){全コメント } ....... }
という具合です。
>[16時36分]画像ファイルを01で保存しても1と認識してしまう
kao01.gif が今/img/フォルダにあるとします。 そのファイル名の上で、右クリックします。名前の変更を選びます。
01.gif
このように01.gif から 15.gifの名前を変更します。 コンピュータでは、abc,,,xyz,あいう、、、わ、ん、阿、亜、、 欝、蔚などは文字です。 しかし、数字は次の二つの区別がコンピュータ言語で使い分ける 必要があります。perlはその区別は変数としてはありません。
文字としての数字 と 数値としての数 です。 01 が 1 となるのは、数値です。 他方 01は、0と1という文字、数字です。零一と同じです。ただし 半角です。全角はファイル名として、現状ではウェブサーバが処理を してくれません。 ご質問の内容がよく理解できていませんが、少なくとも当方は 14ヶのgifファイルをコピーペーストしてから名前変更して 次の文でアイコン番号を入力しています。 ------------------------------------(修正済み) 323 print "<table><tr><td>あなたのアイコン</td><td class=plain><input type=text name=icon size=5></td></tr>\n"; ---------------------------------- これで試してください。type=textですから、1といれると文字です。 そして この2桁化処理を656行付近で 前に 0をつけて 01.gifになります。
ラジオボタンの name=icon value=1 では icon=1が送られますから その2桁化をしていると思います。保存されたデータで確認してください。 value=01にすれば2桁化しなくてもよいかもしれません。ためして ください。その時保存データを見て確認してください。
例 04◇このテーマなら、これしかない、たろう(2006/12/12)<br> ↑こうなっていたら成功。
ほんのちょっとした1桁を2桁に変更するだけですが、入力 表示、そのための処理、さらにデータと沢山不具合発生源があります。 成功したバージョンを常に別名で保存したり、あらたに anqmsg10.cgi のようなファイル名シリーズで開発してください。
□ ひろたか [2006年12月12日21時49分]NXerさんへ アイコン表示はなんとかできました。ありがとうございました。 次はコメント表示なんですが、これが上手くいきません。 当方のあんQは投票前はグラフが非表示バージョンとなっております。 当方の理想は投票前はコメントもグラフも非表示で投票する事によりグラフやコメント一覧が表示されるといったものです。 現状この部分はクリアされています。 がっしかしコメントが沢山投稿された場合に下に行が増えるため新たに項目を増やしたり投票したりした場合コメントが大半を占めるため投票ボタン等が解りづらくなると考えたため、最近のものだけコメントを表示され、他のコメントを見たい場合のみ全てのコメントボタンを押すと表示されるという機能です。 それで、教えて頂いた事を実践したのですが、投票した際に表示されるのは最近のコメントのみで全て表示ボタンをおせばグラフ等が非表示の状態に戻ってしまい全てのコメントが表示されません。 どうすればいいでしょうか? 当方のはこんな感じです。 どうでしょうか? 宜しくおねがいします。 if ($scoreview>=1){ if ($msgflag<=0) { print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 最近のコメント </font></b><br><br>\n"; } else {print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 全部のコメント </font></b><br><br>\n"; } $len=length($mes); $msgcount=0; while ($len>0) { $i=index($mes,">"); if ($i>0){ $msgcount++; $mesunit=substr($mes,0,$i); $icon=substr($mesunit,0,2); $mesunit=substr($mesunit,2); if ($icon eq "zz"){print "-----$mesunit<br>\n";} else {$icon=$icon.'.gif'; print "<img src=$img$icon></img>$mesunit\n";} $mes=substr($mes,$i+1); if ($msgcount>3 && $msgflag<=0){$mes="";} print "<br>\n"
}
else {$len=-1;} } print "</font></td></tr></table><br>\n"; } if ($vote_stop) { print "<tr><td colspan=4 class=plain>この項目への投票は終了しました</td></tr></form>\n</table>\n"; }
□ NXer [2006年12月13日10時31分] 1>(全コメント)表示ボタンをおせばグラフ等が非表示の状態に戻ってしまい 2>全てのコメントが表示されません。 3>どうすればいいでしょうか?
当方も投票時、グラフとコメント非表示モードにしました。NXerです。
1>の操作をします。
1.1 この時、$scoreviewの旗は、初期値の0、非表示です。そして
1.2 全表示旗は、132行で初期値0を1に変えています。これで -------------------------------------- if ($msgcount>3 && $msgflag<=0){$mes="";} --------------------------------------- ひろたかさんの場合 (A 3 を越えてかつ B 全コメント旗0)の Bの値が1のため、偽になります。よって、この処理式 $mes=""; は 実行されません。つまり、コメントを初期化する、空文字列にはしません。 わかり難(にく)い表現ですが、全コメントを正しく単位コメントごとに アイコンとコメントを表示します。
しかし、1.1で大きく非表示の設定になっています。そのため1.2そのものを 通過しません。 つまり 2>全てのコメントが表示されません。 となります。
これらは、すべて論理的に真です。ウェブサーバはひろたかスクリプトを忠実に 実行しています。そのことは感動することでもなんでもないのですが、ひろたか さんには表示するという期待があり、結果、大きいほど、より深く落ち込んだり します。期待にそうようなスクリプトは次のように変更してためしてください。
■------------------------------------------------------------ 132 elsif ($in{'mode'} eq 'allmsg') { $msgflag=1; &html; } □--------------------------------------------------------------------- 132 elsif ($in{'mode'} eq 'allmsg') { $msgflag=1;$scoreview=1; &html; } -------------------------------------------------------------------------- 全コメント旗を1にしてあります。さらに得点表示旗を1にします。
1.1 が得点表示になりました。 1.2 はもともと正しく動作します。
結果、全コメントが表示されました。
まとめ 得票表示旗 全コメント旗 ------------------------------ $scoreview $msgflag ------------------------------- 1 1 全コメント表示 0 1 全コメント非表示 ------------------------------- このような複数の条件の真偽は、perlや数学の参考書の 論理式を参考にして、プログラミングをしてください。
プログラミングの良さを理解していただく人はすくない かも知れません。アンケート/世論調査は、利用者という 不特定多数のアクセスしたい、使いたいというニーズ(needs) に左右されます。大掛かりな宣伝手段を持たない個人の場 合は、サイトのウェブページ、掲示板やブログによる案内 紹介、それにサーチ・エンジンの検索順位次第です。
しかし、なによりも、あんQのコンテンツ中身が勝負です。 来年は丁亥(ひのと・火の弟、い)の干支(えと、兄えと弟と) です。ひのと とは、陽気良し、草木繁茂の象。亥は核。種の こと。元気良く芽を出すの気。そういう年にしたいものです。
□ ひろたか [2006年12月13日14時18分]NXerさんへ コメント表示の件、お蔭様でなんとかクリアする事が出来ました。 そこで質問です。 現在、コメントを全表示にするとグラフまで表示されてしまいます。 と言う事はアンケートに投票せずとも全コメント表示をすればコメントと共にグラフも表示されてしまいます。 これではグラフを非表示にしている観点からズレてしまいます。 私なりの解釈で少し触ってみたのですが、それをすると投票ボタンが動作しません。どうすれば回避できるでしょうか? 内容としまして、アンケート選択時のグラフ非表示時にはコメント全表示ボタンを表示せず、投票しグラフが表示されなおかつ最新のコメント一覧も表示されますのでその最新のグラフ一覧の箇所に全グラフ表示ボタンが表示されるという事です。 現在、表示までは上手くいったのですがそれをすると投票ボタンが上手く動作しません。 どうすれば。。。 私が行った事です if ($scoreview>=1){ if ($msgflag<=0) { print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 最近のコメント </font></b><br><br>\n"; if ($scoreview>=1){ print "<form action='$script' method=POST>\n"; print "<input type=hidden name=data value=\"$in{'data'}\">\n"; print "<input type=hidden name=mode value=allmsg>\n"; print "<input type=submit value=' 全コメント ' class=btn ></form>\n"; } } else {print "</table><br><table cellpadding='15'><tr><td bgcolor='#6A0000' colspan=40 class=plain><font color='white'><font size='4pt'><b> 全部のコメント </font></b><br><br>\n"; }
□ NXer [2006年12月13日15時47分] >コメントを全表示にするとグラフまで表示され
旗の真偽表を一度作成してみてください。NXerです。
投票時 初期値のまま $scoreview=1 $msgflag=0 投票後最新コメントのみ 全コメント時 $scoreview=1 $msgflag=1 投票結果も全コメントも表示 ご要望 $scoreview=1 ではあるが、 $msgflag=1 では投票結果は表示しないが全コメントは表示するには $scoreview=1に制限を加えます。$msgflag<=0に限ってグラフ表示します。 これは 312行目付近とおもいます。 ----------------------------------------------- ■312 if ($scoreview>=1){#処理グラフ表示 print "$content</td><td align=center>$point</td>\n"; ----------------------------------------- □if ($scoreview>=1 && $msgflag<=0){#処理グラフ表示 ------------------------------------- これで全コメント時は、得点表示モードにもかかわらず、$msgflagが1のために、 偽となりグラフ表示処理をしません。しかし、番号、ラジオボタン、項目 と全コメントが表示されました。
******************************以下、愚案、お笑いください。 ご採用いただかなくても結構です。
1)zzを00.gifに置き換えてアイコン番号未入力は、デフォルト用00.gif を表示するに変更します。 2)コメントを書かないでアイコン番号だけという入力を避けるために コメントなしはエラー処理をします。 3)マイアイコン制度を採用します。以下その説明。
当方はアイコン入力にinput形式の入力フォームを使っています。 その下にアイコン番号、アイコンを15ヶ表示してみましたが、ラジオボタンと 違い、1〜99の豊富なアイコン画像を選べることから、一般用1〜15(20) で自由に使ってもらいます。残り84(79)をマイアイコンに利用するという もの。
---------------------------------------- 326 print "<textarea name=mes cols=40 rows=3 wrap=soft></textarea></td></tr></table>\n"; # ■ icon用 フォーム■ input 形式入力フォーム print "<table><tr><td>あなたのアイコン</td><td class=plain><input type=text name=icon size=5></td></tr>\n"; print "<tr><td colspan=5 class=plain><table class=plain><td class=plain font color='white'><input type=submit value=' 投 票 ' class=btn ></font></td></form>\n"; print "<form action='$script' method=POST>\n";
334 print "<input type=hidden name=data value=\"$in{'data'}\">\n"; print "<td class=plain><input type=submit value=' 更 新 ' class=btn></td></form></table></td></tr>\n</table></table>\n"; #-アイコン一覧 15ヶ---------------------以下挿入 print "<table><tr><td>番号</td>\n"; for ($i=1; $i<16; $i++){ print "<td>$i</td>\n"; } print "<tr><td>アイコン</td>\n"; for ($i=1; $i<16; $i++){ if ($i<10){$icon="0".$i;} else {$icon=$i;} $icon=$icon.".gif"; print "<td><img src=$img/$icon></img></td>\n"; } print "</tr></table>\n";} #----------------------
ここで、閃いたのが「マイアイコン」です。一般用には15ヶ〜20ヶから 選んでいただくわけですが、1アンケートに一人1票モードでは、幾つかの アンケートを同一人が投票した時、アイコンが自分専用があると、コメ ントに責任を持ってもらえます。 2桁gifファイル名にしたために残り16(21)〜99の84(〜79)ヶが個人 的に利用できます。
あんQの説明で、マイアイコン制度を説明します。メールで 希望者する人だけに限定84(79)ヶのアイコン一覧ページ (HTMLで作成)のURLを知らせ、希望のアイコンを選 んでもらいます。それを投票の時のコメント記入に使っても らいます。ただし、適当にアイコン番号を推測されないよう に、メールで受け付けます。また、秘密を守るように依頼します。
アイコンはケーキシリーズ10ヶ、車シリース10ヶ、果物シリー ズ10ヶなどフリー素材さんから借りることができるとおもいます。 動物シリーズを入れると対象者は、保育園児まで広がりそうですね。
一覧URL用の画像ディレクトリは/imglist/にしておきます。 一ヶ使ったら、そのgifを/img/ディレクトリに転送します。 これで/imglist/側は、その欄が×印になり使えないことを 意味します。
欠点は、アイコン番号管理と間違って使われる、忘れる、これ だけ用意したのにだれもマイアイコンを使ってくれないかも しれない、ということでしょうか。
++++++++++++++++++++++++++++++++++++++++++++++ あんQの活用シリーズということで、すえぽんさん、愚案 をラウンジに投稿させていただきました。 +++++++++++++++++++++++++++++++++++++++++++++++
□ ひろたか [2006年12月13日21時46分]NXerさんへ いつもいつも大変ありがとうございました。 現在、NXerさんのお陰で沢山の問題点が解消され嬉しく思います。 前回、ご説明させて頂きました事でコメントを全て表示ボタンを最新のコメント一覧のすぐ近くにボタン配置したいのですが、そうすると1度投票され最近のコメントが表示された時にもう一度投票ボタンを押そうとすると上手く機能しません。 コメントを表示ボタンは可能な限りコメント一覧のすぐ近くに組み込みたいのですが何とかなりますでしょうか?
□ NXer [2006年12月14日11時50分] >表示ボタンは、コメント一覧のすぐ近くに組み込みたい
当方の画面は、すでにかなり整理してあります。NXerです。
1 テーマ選択後の画面・・・ 1.0 top すえぽん 使い方 のリンク行 1.1 テーマ、投稿者など、投票指示など (この内容も、投票前と投票後の指示を条件別しています。) 1.2 ラジオボタン付き投票欄(グラフ非表示) 1.3 コメント入力欄 1.4 アイコン番号入力欄 1.5 アイコン表示15ヶ 1.6 項目追加用欄 1.7 全コメントボタン 1.8 編集削除パスワード欄 1.9 アンケート一覧リンク文字 (評価ボタンもひろたかさんの場合は付いていると思います。 これは開発用バージョンです。)
これらはすべて残してあります。
以下 2 投票後不要なもの 1.1 の中では投票指示関係文 1.2 投票後なのでラジオボタンは不要グラフは表示。この時だけ 結果を知ることができる。必要なら印刷が名前をつけて 保存できます。 1.3 1.4 1.5 1.6 1.8 これらはすべて不要 ただし、全コメントボタンは見たい人のために残してあります。 1.9も残します。
3 全コメント時不要なもの 1.1 の中では投票指示関係文 1.2 投票後なのでラジオボタンは不要 (グラフは非表示) 1.3 1.4 1.5 1.6 1.7 1.8 これらはすべて不要
いろんな旗で場合わけと処理(する、またはしない)を しています。サブルーチンに分ければいいのですが 良く似たルーチンになり、また、if (旗)やif (旗1 && 旗2) で簡単に処理できることから、今回のご要望もそうします。
その1)初期値設定 ---------------------- #全コメント用フラグ $msgflag=0;#全コメントフラグ、0最新ベスト 1 全コメント $scoreview=0;#グラフ投票前非表示0 $voteflag=0; #新規設定0 投票前、1 投票後 #---------------- 初期設定ここまで ----------------#
その2)投票後の不要アイテム非表示旗設定 #---------------- 133 # 全コメントフラグ追加 elsif ($in{'mode'} eq 'allmsg') { $msgflag=1;$scoreview=1; &html; } elsif ($in{'mode'} eq 'vote') { $voteflag=1;$scoreview=1;&vote; }
その3)ラジオボタン非表示 if ($vote_stop) { print "<tr><td align=right>$c</td>\n"; } else { print "<tr><td align=right>$c</td>\n"; -----------------------下の条件式 投票前表示、投票後非表示 if ($scoreview<=0){ print "<td><input type=radio name=select value=$num></td>\n"; } } ------------------------
その4)投票前表示、投票後非表示処理 該当する項目 追加 364 if (! $ent_mode) { #■------------------------ if ($voteflag<=0 && $msgflag<=0 ){
(途中省略) print "<input type=reset value=' 消 去 ' class=btn></td></tr></table>\n"; print "</form></table>\n"; } 388 }#括弧終わり
389#■--------------コメント用 if ($msgflag<=0){ 略 399 } #-----------投票前削除モード欄表示 投票後と全コメント表示の時非表示 401 if ($voteflag<=0 && $msgflag<=0){ 略 412 print "</td></table>\n<p>\n"; 413 }#全コメント表示↑非表示 414 print "■<a href='$script'>アンケート一覧へ</a>\n"; ----------------------------------------
上の変更箇所には#コメント文をつけて保守性を向上させてください。
1.1も投票前と投票後に内容を分けて、投票前は$voteflag<=0 とし 投票後は$voteflag>=1 となります。 >=は == の代わりです。
以上です。******************************* 以下愚考まで、時間のあるときおよみください。
ひろたかさんとチームを組んでcgiを開発させていただき、当方の 曖昧さや考えの至らない点をその都度ご指摘いただきました。 当方のあんQは約1040行です。双方のラウンジ投稿のハードコピー は、A4サイズで60ページを越えています。他のcgiを沢山見られて あんQを選ばれたようですが、当方は、スクリプトは、あんQしか知 りません。
原作で十分(すぎる)と思っていましたが、ウェブでのエンタテイメ ント娯楽的要素のアイコンや、さらに、マイアイコンなど考えると必要 かつ十分の、十分さは見極め難いものです。パイグラフ、円グラフ 表示などは、データをエクセルに落とし、グラフ処理してサイトに 表示するなどしてください。
江戸時代から相撲以外にも番付文化が定着しています。町内の横綱が グローバルな横綱に格付けされるネット時代です。あんQ番付cgiは、 テーマをローマ字版も加えると、すくないですが、ローマ字で日本語 を習っているブラジルやオーストラリア、ヨーロッパなどの人人からア クセスが予想されます。 とくにアニメ、まんが関連テーマは、日本語漢字かな版、日本語ローマ 字版、英語版、中国語版などを同時に作成されると十分と思われます。
チームあんQのメンバーがこのようにふえることをこころよりいのり ます。
|
|