過去ログ NO.1167915312
□ ひろたか [2006年12月27日17時54分]NXerさんへ たびたび失礼します。 不具合といくつかご質問をさせて頂きます。 @点目 アンケートテーマの訂正をすると今までのコメントが入力されていたものが消えてしまいます。 訂正したあともコメントを引き継ぐようにはできるのでしょうか? A点目 現在当方のあんQは投票前はグラフ非表示なのですが、項目を追加すると非表示のまま1票はいります。そこを項目を追加するとグラフが表示され1票はいる形にしたいのですがどうでしょうか? B点目 これは別の質問のところにも書きましたが念の為にもう一度書かさしていただきます。 アンケートが終了した際に項目の追加のテーブルが表示されていて終了したにも関わらず項目が追加できるようになっております。 そこでアンケートが終了した場合、項目の追加のテーブルを表示しないようにはできますでしょうか? C点目 現在、当方はリストでカテゴリの選択するとそのカテゴリだけが抽出されるようになっていますが、カテゴリを選択し抽出された際にリストの中の表示がリストボックスの一番初めに表示されているものが表示されます。 そこを現在抽出されているものが表示されるようには可能なのでしょうか? D点目 やはり、一つのアンケートに対して複数の回答があってもいいのではと考えます。 そこで回答を複数回答可能にはできますでしょうか? 沢山お書きしましたが可能な限りでかまいませんので宜しくお願いします。 最後になりましたが、よいお年を! そして、原作者すえぽんさんにつきましても、たびたびの改造などをさせて頂きますこと誠に勝手ながら感謝いたします
□ NXer [2006年12月28日17時11分] ソフトウェアをチームで開発するにはある程度効率のよさが期待 されます。しかし、当方にはその経験や能力がなく非効率的な点 があるかもしれません。NXerです。
ひろたかさんのご指摘の不具合やご質問は、次のようなテスト作業表を 作成してみると納得のいくことばかりです。 このような作業はドキュメンテーションといわれます。ラウンジの範囲 をこえる内容かもしれませんが、あんQの開発ではオープンソースとし てサポートが必要と思われますので掲載させていただきます。それぞれ のルーチンでテストすべきところは補ってください。
表1 テスト項目 -----------------------------------------表は崩れるかもしれません。 動作/機能 グラフ 項目追加 コメント コメント入力欄 ----------------------------------------------------------------- 投票 旗=0 表示=1 旗=0 有り 評価ボタン 投票後 旗=1 非表示=0 最新旗=1 なし new、hot、編集 全コメント 旗=1 非表示=0 旗=1 なし 編集 なし 0有り @欄なし なし 項目追加 旗=1 A なし なし 終了処理 旗=1 B 全コメント なし メール配信、保存、削除 カテゴリ表示 テーマ一覧C 複数回答 D クロス集計 なし -----------------------------------------------------------------
虫取り(debugging)がプログラミングの大切な作業工程の一つです。 以下はそれぞれ複雑の論理ミスのために相互に関連する複数の行の 変更が必要となります。
@>訂正したあともコメントを引き継ぐ データからみた現象。改行タグが削除されています。 ----------------------------- 03◇選択..⇒2 (06/12/28)<br>, ------------------------------------ これが編集後は次のように<br>が削除されます。 ----------------------------------------------- 02◇訂正..⇒こめんと2 (06/12/28)03◇選択..⇒2 (06/12/28), ----------------------------------------------------------
あんQのようなcgiでは、セキュリティ上、htmlのタグを禁止する のが一般的です。121行のようにデコードルーチンで削除したりします。 #---------------------------- 121# $value =~ s/<.*?>//g;#タブ禁止 -----------------------------------以下変更 if (index($value,"<br>")<0) {$value =~ s/<.*?>//g;}#<br>以外タブ禁止 ----------------------------------- ---------------------------------------------- 475 print "<input type=hidden name=pass value='$in{'pass'}'>\n"; #■ comment adreg-------------------コメントの継承 print "<input type=hidden name=mes value='$mes'>\n"; ----------------------------------------------------------- このスクリプトで$mesの値は、編集後も保持されます。 121では、コメントから改行マークが空(null)になり、コメント自体 はありますが、表示されないようです。
そこで改行マークに限りタグを解除する変更を挿入します。 他に、データ識別子として記号を使えば簡単ですが、コメント文字列 連鎖のルーチンを組み替えるのはたいへんです。スクリプトは、汎用 性を無視した荒技ですから、制約が一杯あります。
それ以外にスクリプトの変更漏れがあるかも分かりません。見直してください。 sub edit 418 ($subject,$lastmod,$pass,$limit,$ent_mode,$repost_mode,$name,$mail,$url,$mes,) = split(/\,/,$subject); sub regist 601 $val = "$subject\,$lastmod\,$pass\,$limit\,$in{'ent_mode'}\,$in{'repost_mode'}\,$in{'name'}\,$in{'mail'}\,$in{'url'}\,$in{'mes'}\,\n"; sub delete 626 ($subject,$lastmod,$pass,$limit,$ent_mode,$repost_mode,$name,$mail,$url,$mes,) = split(/\,/,$subject);
split関数でコンマ毎に左辺に値を代入する行をすべてチェックしてください。 また保存で $in{'url'}\,$in{'mes'}\,\n のメッセージ変数がないなどの不具合です。商品の場合は、リコール問題が 発生しますが、フリーソフトでも不具合は、信頼性を失いますが、バージョン アップで信頼回復を図るなどしてください。なお、当方の愚案のすべてに おいて、ひろたかさんの運用上発生する不具合の責任がないことをご理解ください。 そうでないと、とても新年を迎えることができません。
A項目を追加するとグラフが表示され1票 ---------------------------- 560 else { $newpoint = 0; } #■ if item added point increment--------------挿入1行 if ($in{'mode'} ne 'change') { $newpoint=1; } #-------------------------------- $val = "$newnum\,$in{'content'}\,$newpoint\,$in{'color'}\,\n"; ----------------------
614------------------------結果確認用表示、下新規 # elsif ($in{'mode'} eq 'reg') { $in{'select'} = $newnum;&vote; } elsif ($in{'mode'} eq 'reg') { $in{'select'} = $newnum;$scoreview=1;&html; } ----------------- グラフ表示にして、投票処理を項目表示ルーチンにします。 $scoreview=1;&html;
---------------参考データ上2つ項目追加共に、その後のpointが1です。 20061228132332,確固たるyes,1,#ff00ff, 20061228132314,絶対yes,1,#ffff00, 20061221162037,yes,0,#000000, 20061221162036,yes & no,1,#a9a9a9, ----------------------------- 必ずデータで確認してください。見かけ上1を表示することもありますが その場合、データは保存されていません。
B終了した場合、項目の追加のテーブル非表示 おそらく全コメント表示のためにフラグを考えた時、終了処理まで 考えが至らなかった結果と思われます。
sub html内 216-------------------- $limit =~ s/(\d{4})(\d{2})(\d{2})/$1年$2月$3日<font color=red>【終了】<\/font>/; $vote_stop = 1;$scoreview=1;#非表示フラグ ---------------------------------- 上で表示の$scoreview値を 1 にしています。したがって、0か負ならば表示しかし、 終了すれば 1 なので必ず非表示になります。
355------------------------------ if (! $ent_mode) { #■------------------------- #if ($voteflag<=0 && $msgflag<=0 ){#旧 if ($voteflag<=0 && $msgflag<=0 && ($scoreview<=0)){#新 略 }#終わりの括弧は既存 --------------------------- 上の2行の旧と新の変化を見てください。上のテスト表を作成して旗の管理 をすることが今後の運営保守改善に効果的と思われます。 終了処理は、メール配信だけでなくて、まだまだ沢山の機能が未解決です。
たとえば、 3.1 過去ログとして保存する/作成者の希望で終了時後2週間ほど で自動的に削除する/作成者の希望で結果を通知して直ちに削除する/ 結果は保存し、作成者の意思を確認して再生利用する、 などの選択があります。 3.2 過去ログの閲覧様式の設定、過去ログリーダcgiの作成など 3.3 あんQシステムとして、作る、回答する(答える)、あんQログブック (あるいはあんQブック)という三つの柱を確立するなどシステムの 発展にともない、cgiの開発が予想されます。wikipediaが簡単な編集 ソフトで無数の人々が参加できるように、あんQブックリーダcgiも 今後欠かせないアイテムと愚考します。
Cは、 「一番初めに表示されているも」「現在抽出されているもの」が分か りません。具体例を追加してください。
Dは、選択肢と入力フォーム、さらに集計アルゴリズムの問題です。
5.1 単純複数選択の例。 5.1.1 一アクセスで他の項目なら投票可。つまり複数選択できます。 使い方で説明できます。多分多くはこれで解決します。
5.1.2 複数の組み合わせでありそうなものを用意する例。 組み合わせでは項目数の10制限を超えますが、基本的に どれか一つの選択が原則と思われます。 テーマ ラーメン 札幌 喜多方 高山 博多 札幌と博多 喜多方と高山
5.1.3 その他組み合わせは追加項目で可能(ただし10項目制限内で)
5.2 上で触れたあんQシステムの一つに 5.2.1 ラジオボタンでなく 5.2.2 チェックボタンで複数回答可能なcgiを用意します。 旗での処理はスクリプトを複雑にするおそれがあります。 これは他のフリーソフトなどを参考にしてください。あんQシステムで、 答える の入力をチェックボタンに変更し、投票の集計サブルーチ ンを変更します。
5.3 さらにクロス集計をするには、入力、集計処理専用のあんQを開発します。 例です。 テーマ よくTVで観るスポーツ 1-1 男 1-2 女 2-1 中学生 2-2 高校生 2-3 大学生 3-1 野球 3-2 サッカー 3-3 ゴルフ 3-4 テニス
111と選べば、男中学生野球という回答です。 男中学生野球 5 女中学生野球 1 などの結果を得ることができます。
商品の開発や政党支持などではターゲットを絞りこみ宣伝 情宣をします。その時有効です。こともたちの悩み調査など も学年、性別、家族構成、地域などの要因の分析に役立つ と思われるアンケートです。例では111〜233まで24の組み合わ せが可能です。最下位項目のスポーツの種類だけ組み合わせは 増えます。利用者の層によりますが、おそらくそれぞれ100 名計300名でほぼ全国的な傾向を把握できると思われます。 これは、選択項目の構成が複雑なために汎用ソフトでは 対応できないかもしれません。複数ソフトを用意する必要があります。
電光!がcgiの標準アイテムとして定着していますが、あんQも 多数を超えて無数に利用されているようです。しかし、ひろたか さんのあんQシステムは、無限の利用が可能と思われます。 例、特定機関で定期的(月一度)にひろたかさんのあんQを利用 できるようにパスワード入力あんQを提供するなど。
************************************************** ◇謝辞◇すえぽんさんにはこの1年御世話になりっぱなしです。 logcheckによる検索語分析、あんQによる練習問題作成ソフト などを運用しています。こころより感謝申し上げます。 みなさん、良いお年を。
□ ひろたか [2006年12月28日22時24分]NXerさんへ ご回答いただきまして誠にありがとうございます。 一つ一つ修正している最中ですが、@点目の件、なんとか回避することができたのですが、当方のあんQはmail2をつかって評価ポイントにしております。 その評価ポイントも訂正するとリセットしてしまうのですがどうすればいいでしょうか? mesの部分をmail2に変えて代入すればいいだけなのかと考えましたが違うみたいですね。。。 print "<input type=hidden name=mes value='$mail2'>\n"; 宜しくお願いします。
□ ひろたか [2006年12月28日22時44分]NXerさんへ 追加です。 アンケートを投稿し、訂正を行った場合にアンケートのカテゴリ部分と顔アイコンのラジオボタン部分が訂正前が何にされていたのかでませんがどうすれば現在の設定が保存されるのでしょうか? 具体的には現在、当方のあんQで新しくアンケートを投稿し作成者の名前だけ訂正する場合、インプット入力の部分は入力されているデーターが残っているのですが、ラジオボタンとリストボックスで選択されている箇所はリセットされていて名前だけ訂正するだけでいいのに、ラジオボタンの顔アイコンとカテゴリについては無条件で再入力しなければなりません。 回避方法はありますでしょうか?
□ NXer [2006年12月29日13時42分] 新規設定変数が編集ルーチンでもれているようです。NXerです。 当方の評価は$evalです。 -------------------------------------------------- 451 print "<input type=hidden name=pass value='$in{'pass'}'>\n"; 452 print "<input type=hidden name=eval value='$eval'>\n"; ---------------------------------------------------上挿入 これで $evalにファイルから読み込んだ値が代入されます。編集で変更なしに eval = $eval が編集後サーバに送られます。
■print "<input type=hidden name=mes value='$mail2'>\n"; この場合は
mes=$mail2 となり、評価の値ではないようです。 当方の585行付近の $in{'mail'}\,$in{'eval'}\,$in{'url'}\ そちらの$in{'mail2'} に合わせて □ name=mail2 という変更をお試しください。
テストのために次の行を挿入して評価が編集前と編集後で どのように変化するか試してください。 422#■------------------------- print "評価:$mail2\n";#この1行 if (! @lines) { print "<td>現在登録されている項目はありません</td>\n</table>\n"; --------------------------------------
>ラジオボタンの顔アイコンと >カテゴリ これらの変数が不明です。 ------------------------------------ 548 ($subject,$lastmod,$pass,$limit,$ent_mode,$repost_mode,$name,$mail,$eval,$url,) = split(/\,/,$subject); 584 $val = "$subject\,$lastmod\,$pass\,$limit\,$in{'ent_mode'}\,$in{'repost_mode'}\,$in{'name'}\,$in{'mail'}\,$in{'eval'}\,$in{'url'}\,\n"; -------------------------------------- 当方と違う点に注意して 452 print "<input type=hidden name=eval value='$eval'>\n"; のname属性やvalue属性の値を設定してください。
カテゴリの不具合は、おそらく新しい変数、例$ctgry を作成 されているために、編集ルーチンではこれまでのコメント、 今回の評価点数と同じような結果になったものと思われます。 当方は愚案どおりmailをカテゴリに使っているので問題は 発生していません。 アイコンも$iconも新規設定なら同じ結果になり、再登録が必要と 思われます。editサブルーチンに、新規の変数がすべて組み込ま れているかスクリプト上で点検して、ない場合は補足してみてください。
ラウンジの書き込みも開発中のあんQのドキュメンテーションの一種です。 現象だけでなくて、その現象を引き起こす変数や式なども大切な要素です。 相互にことなることばを使っていますが、変換して理解してください。
□ ひろたか [2006年12月29日20時54分]NXerさんへ たびたびすみません 編集の際にポイントがリセットになる件ですが、上手くいきません。 こちらの変数間違いもありましたので整理いたします。 ポイント→$eval カテゴリ→$url 顔→$mail です。 質問させていただいた事は @点目 アンケートの内容変更した場合にポイントがリセットになってしまう。 A点目 アンケートの内容を変更する際にカテゴリと顔アイコンが現在なにに選択されているか表示されていない。 ちなみにカテゴリはリストボックスで顔アイコンはラジオボタンで構成しております。 すみませんが少し詳しく教えていただいてもよろしいでしょうか? 宜しくお願いします。
□ NXer [2006年12月30日15時33分] >Q1>ポイントがリセットに
原因は、変数の競合です。NXerです。
評価ボタン用に、名前属性で'eval'を使いました。そのためそこで リセットされてしまう可能性があります。
eval を、たとえば、 evalat に変更します。 検索で name=evalを捜し、書換えてください。全置換では書換え過ぎになります。 ----------------------- 129 &get_cookie; # evalat branching--------------------- if ($in{'evalat'}) { $evalflag=1;$file=$in{'evalat'};&vote;}
337 print "<table><input type=hidden name=data value=1>\n"; 338 print "<table><input type=hidden name=evalat value=\"$in{'data'}\">\n"; ---------------------------
452の eval は唯一評価の加点用名前になります。 ------------------------ 451 print "<input type=hidden name=pass value='$in{'pass'}'>\n"; 452 print "<input type=hidden name=eval value='$eval'>\n"; -----------------------------
モニター画面で検索をかけると、変数をつかめるためにドキュメンテーション として変数一覧などを作成していません。むかしむかしには変数一覧を作成し 変数の変化をモニタしてプログラミングを楽しんでいたのでが、perlと htmlでは、モニタするのにheaderルーチンを通してprint $変数と する必要があります。
作業メモ 1 perlで変数をモニタするには html文にします。 ********************************************* headerルーチンの後なら表示できます。 268 &header;
変数モニタ例---------282行目 281 print "■$repost<p>\n"; 282 print "評価 :$eval\n"; ---------------------- **********************************************
Q2>カテゴリ→$url Q3>顔→$mail
上の二つの変数はすえぽんさんの原作どおりです。編集画面では どのように表示されていますか。 当方のカテゴリはメールを使っていますが、編集画面にメールで でます。このことからクロスしますが、そちらの顔は、おそらく メール欄に12.gifの12だけが表示されているはずです。 ----------------------------------------- 453 print "<input type=hidden name=eval value='$eval'>\n"; 454 print "<tr><td>登録者名:</td><td><input name=name value='$name'></td></tr>\n"; 455 print "<tr><td>メールアドレス:</td><td><input size=30 name=mail value='$mail'></td></tr>\n"; 456 print "<tr><td>ホームページ:</td><td><input size=40 name=url value='http://$url'></td></tr>\n"; --------------------------------- このままでは、メルアドのところに顔0〜15.gifの0〜15の数字が表示されます。 また、url欄には初期値設定で http://になっています。
Q2.1 編集ができるようにする例。
顔アイコン。あくまでんもアイコン番号の表示となる例です。
----------------------------- 455 print "<tr><td>顔アイコン番号:</td><td><input size=30 name=mail value='$mail'></td></tr>\n"; ------------------------------------ メール用に新たにmail2などを作成しているときは ----------------------------------- 456 print "<tr><td>メールアドレス:</td><td><input size=30 name=mail2 value='$mail2'></td></tr>\n"; ------------------------------------ などと、新設します。しかし、保守を考えると、メールはmailでアイコンはiconと この際変更する方がよいかもしれません。
Q2.2 顔アイコン新規name=iconの、編集での表示例 ----------------------------- 455 print "<tr><td>顔アイコン番号:</td><td><input size=30 name=icon value='$icon'></td></tr>\n"; ------------------------------------ 変更不許可なら type=hidden です。 となります。これは全体に関係しますから、慎重に変更してください。 また、アイコンそのものの表示となるとさらに画像表示に変えます。しかし、 番号変更ですむのならより簡単な方法で十分と思います。
**************作業メモ 2********************************** 現在運用可能なanq.cgiとは名前をanqver2.cgiのようにします。 ---------------------------- # このファイルの名前 $script = "anqver2.cgi"; --------------------------- とすれば問題はありません。 当方は、もう1ダースほどのあんQソフト群構成になっています。 *********************************
Q3>カテゴリ ------------------------------------------------ 456 print "<tr><td>カテゴリ:</td><td><input size=40 name=url value='$url'></td></tr>\n"; ------------------------------------------------- 変更を許可する場合です。ただしその場合、ひろたかさんの設定がカテゴリを value=1 などと番号で指定している場合は、番号のみの表示になります。 カテゴリ名と数字の対応表が必要かもしれません。あるいは、 value ="文字列”; perl文中では ’文字列’ に変更します。当方は文字 をリストボックスで選択していますから、文字列です。
anqmaster.cgiで管理人用に編集可としてテーマ作成者は変更不許可 としても良いと思います。 その場合は、評価のようにtype 属性をhiddenに変えます。 ------------------------------------------------ 456 print "<input type=hidden name=url value='$url'>\n"; ------------------------------------------------- 以上です。
********************************************* アンケートあるいは何らかの選択/投票(voting,polling)方式について 1 html文でラジオボタンなどによる単一選択 選挙など複数候補からただ一人だけに投票するもの。 通常の投票は、一人一回一票(複数候補者中一人)です。 あんQ原作の集計は、複数項目中一項目について$pointが加算 されています。
1.1 項目A,B,C,Dにさらに 1.2 AB,AC,AD,BC,BD,CDなどの組み合わせの 単純項目が考えられますが、1と同じ加算集計ですみます。
cgiでは、$selectの値が select = $i (番号または名前) でサーバに送られ処理されます。
2 html文でチェックボックスを使えば、複数の選択が可能です。 あなたの住みたい町など類似の環境を備えた都市を複数選択 できます。 perlでは送信の形式が get と postがあります。あんQは postのため送信内容は表示されません。getではその内容が url バーに表示されます。2つ選択した例。 --------------------------------------- select=20061229164828&select=20061229164827 ----------------------------------------- あんQの原作では 名前=一郎 テーマ=好きな食べ物 select=20061229164828 と左辺と右辺は1対1の対応をしているためにselectで上のように 同時に2つの値を受け取った時は、後の値一つだけが有効になります。 (詳細、末永 2004:92)
従って、複数選択には、あんQの読み取りルーチンを改造するか、 複数読み取りに 対応するperlのモジュールを利用することになります。 原作でも1.2で同様の選択は可能です。 1の単一選択(singular selection)と2の複数選択(plural selection) を混ぜた場合は、複数選択が処理できるように改善が必要となります。
例 すきなデザート A B C 一つ選択。 そのうちアイスクリームだけは 次のD E F G H I J K から複数選択可
3 クロス集計用に上位下位それぞれに複数の項目がある場合は、複合選択 (multi-selection)です。あんQの入力、集計、表示にすこし改造が 必要です。また、項目の設定のために要素分析などの事前調査があれば アンケート/調査質問の信頼性と妥当性が向上すると思われます。 現在何らかの調査研究に携わる人にとって、perlで簡単に集計処理が 可能なあんQのクロス集計は、c言語やvbaなどを初歩から学ぶこと と比較すれば、入門レベルから利用でき、またその奥深さでは他の言 語に劣ることはないように思われます。また、大きなプロジェクトを、 地域や時間で分散して処理するのにもperlならダウンロード、インストー ルも簡単です。
ひろたかさんのプロジェクトとのかかわりはすくないかもしれませんが 単一、複数、複合選択(これはNXerの個人語です)について愚考してみ ました。妄念忘年まで。 参考文献 末永正浩、JavaScript+CGI ハイブリッドスクリプト、DART、2004
□ ひろたか [2006年12月30日22時43分]NXerさんへ 質問@の件ですが、アンケート項目を変更した場合はポイントは引継ぎますが登録者など変更した場合はポイントがリセットしてしまいますがどうすればいいでしょうか? 質問A 顔アイコンは以下のようにしてあります。 理想は修正する際にアンケートを作成した顔アイコンのラジオボタンがチェックされているという事です。 print "<tr><td>登録者名:</td><td><input name=name value='$name'></td></tr>\n"; print "<tr><td>顔アイコン:</td><td>\n"; print "<input type=radio name=mail value=1><img src='./img/kao1.gif'>\n"; print "<input type=radio name=mail value=2><img src='./img/kao2.gif'>\n"; print "<input type=radio name=mail value=3><img src='./img/kao3.gif'>\n"; print "<input type=radio name=mail value=4><img src='./img/kao4.gif'>\n"; print "<input type=radio name=mail value=5><img src='./img/kao5.gif'><br>\n"; print "<input type=radio name=mail value=6><img src='./img/kao6.gif'>\n"; print "<input type=radio name=mail value=7><img src='./img/kao7.gif'>\n"; print "<input type=radio name=mail value=8><img src='./img/kao8.gif'>\n"; print "<input type=radio name=mail value=9><img src='./img/kao9.gif'>\n"; カテゴリについても同様なのですが、ラジオボタンとセレクトボックスは修正画面ではリセットされてしまうのでしょうか? 何度もすみませんが宜しくお願いします。
□ ひろたか [2006年12月31日11時51分]NXerさんへ 別件です。 現在、当方のあんQでは、カテゴリの設定を必須にしております。 以下の通りですが、新規にアンケートを作成した場合はカテゴリが未設定と表示されますが、修正する際は設定できてしまいます。 カテゴリのなしの表示はセレクトボックスで--となっております。 要するに--でカテゴリを選択した場合、新規・修正に関わらずかカテゴリの未設定と表示されたいのですが、宜しくお願いします。 サイトURLも念の為、貼り付けておきます。 http://htk-system.com/enquete/ sub new_file { $mesnew=$in{'name'};&antispam; $mesnew=$in{'subject'};&antispam; $mesnew=$in{'url'};&antispam; if (-e "$tmp$in{'filename'}") { &error("重複したデータ送信です。"); } if (! $in{'name'}) { &error("お名前が未記入です。"); } if (! $in{'content'}) { &error("アンケート項目が未記入です。"); } if (! $in{'subject'}) { &error("アンケートテーマが未記入です。"); } if (length($in{'subject'})>200){&error("アンケートテーマは100文字までです。"); } if (length($in{'mail2'})<3){&error("カテゴリが未設定のままです。"); }
□ NXer [2006年12月31日16時16分] >カテゴリの設定を必須 >if (length($in{'mail2'})<3){&error("カテゴリが未設定のままです。"); }
if ($in{'mail2'} eq "--"){&error("カテゴリが未設定のままです。"); }
これでお試しください。NXerです。
条件式で 1 数値の等値は ($i == 1)ですが 2 文字列の等値は ($name eq "三太郎")です。 文字列数値にかかわらず代入(assign)は $i = 5; となります。不注意から = 代入と == 等値 さらに、eq との違いに気が付かないと永遠にデバグできない 代物(しろもの)です。今夜あたりはそれで失った時間を悔や むのも煩悩の一つでしょうか。
□ NXer [2006年12月31日22時08分] >アンケートを作成した顔アイコンのラジオボタンがチェックされているという事
をスクリプト化するには、幾つかの変更が必要です。当方で試した結果では 編集後リセットは発生していませんので、編集については詳しく触れます。NXerです。
その1)スクリプト全体に次の変更をしてください。 ------------ $name,$icon, ------------ とアイコン用変数を新設します。置換機能で$name, を $name,$icon, に置き換え ます。7箇所ありました。$name,$icon, で検索してそうなっているか確認してください。 unshift (@new2,"$subject\,$newnum\,$pass\,$limit\,$ent_mode\,$repost_mode\,$name\,$icon\,$mail\,$eval\,$url\,\n"); 582,626,686の行をコンマの前に\記号が入るようにして書き換えます。 $in{'name'}\,$in{'icon'}\,$in{'mail'}\, 589、858行の書換です。見落としがあるかもわかりませんので、検索機能で探してください。 編集などでリセットされるのは、保存の時 $icon の値がセットされていない時発生します。
その2) 新しいアンケートテーマの設定表に顔アイコン欄が設けてあります。 以下は2例だけ当方で組み込んだ例です。 790------------------------------------- print "<tr><td><b>設定者の名前</b>:</td><td><input name=name></td></tr>\n"; #---------------------------■ print "<tr><td>顔アイコン:</td><td>\n"; print "<input type=radio name=icon value='01'><img src='./img/01.gif'>\n"; print "<input type=radio name=icon value='02'><img src='./img/02.gif'>\n"; #----------------------------------------- 値は value=1 と数値ではなく value='01'と文字列です。
以下の内容で「新しいアンケートテーマを設定しました」時の表の変更です。 ------------------------------------------------------- 893 print "■以下の内容で新しいアンケートテーマを設定しました。<br>\n"; print "<table border>\n"; print "<tr><td>設定者の名前:</td><td>$in{'name'}</td></tr>\n"; #---------------------------■ $icong=$in{'icon'}.".gif"; print "<tr><td>顔アイコン:</td><td><img src='./img/$icong'></td></tr>\n"; #---------------------------■ アイコンの入力値は、’01’などの文字列です。gifにするには整形をします。 点や引用記号に注意してください。これでアイコンが確認できます。
その3)編集ルーチンの表でもアイコンを表示します。 454---------------------------------------- print "<tr><td>登録者名:</td><td><input name=name value='$name'></td></tr>\n"; #---------------------------■ $icong=$icon.".gif"; print "<tr><td>顔アイコン:</td><td>\n"; print "<input type=radio name=icon value='$icon' checked><img src='./img/$icong'>\n"; print "新しいアイコン番号→<input size=5 name=icon value='$icon'>\n"; #------------------------------- ご要望どおりラジオボタンにチェックが入った状態でアイコンが左に表示され ます。さらに「新しいアイコン番号→」として設定のアイコン番号を表示 した入力欄がでます。この数字は変更可能です。ただし、編集画面なので 他のアイコンは表示していません。必要なら入力画面のスクリプトを下に ペーストしてください。ただし、画面サイズや内容から表示する価値は低い 気がします。
編集ルーチンで次のように変数が読み込まれます。 ------------------------------------------ 396sub edit { open(READ,"$tmp$file") || &error("[ $tmp$file ]が開けませんでした。"); @lines = <READ>; close(READ); $subject = shift(@lines); ($subject,$lastmod,$pass,$limit,$ent_mode,$repost_mode,$name,$icon,$mail,$eval,$url,) = split(/\,/,$subject); (略) ---------------------------------------- 420 print "<tr><td>■最終投票日:</td><td>$lastmod</td></tr>\n"; print "</table><p>\n"; print "<table border>"; #■------------------------- 425 print "アイコン:$icon\n"; 426 print "評価:$eval\n"; ---------------------------------- このように試行版では、変数をモニタしてください。ここでアイコンや評価値 が表示されなければ、writeルーチンなどで正しく保存されていません。 ---------------- アイコン:02 評価:3 ---------------- の後の数字が出ない時はスクリプトのミスと考えられます。 <input type=radio name=icon value='$icon' checked> この文で icon='02' などのようにアイコンの番号がcgiでサーバに 送られます。それを $in{'icon'}に代入したり、保存したりします。
次の2行は、method=POST形式で値をウェブサーバに送ります。 この時内容は表示されません。次のGET形式では見ることができます。 ---------------------------------------------------------------- 433 print "<form action='$script' method=GET>\n"; 448 print "<form name=form action='$script' method=GET>\n"; ---------------------------------------------------------- これが、ブラウザのURL欄にでるその内容です。-------------- http://127.0.0.1/~nxer/anq/anqicon.cgi?data=20061231185242& mode=adreg&pass=pass&eval=1&name=%82%C4%82%B7%82%C6&icon=02 &icon=02&mail=%82%84&url=http%3A%2F%2F%82%84&subject=%82%C4 %82%B7%82%C61&content=&color=&ent_mode=0&repost_mode=0&nolim it=0&end_y=2006&end_m=12&end_d=31 --------------------------------- &icon=02&icon=02 と確かにアイコン番号が送信されています。しかし2度の理由は ご要望のラジオボタンの1ヶと入力欄の1ヶです。同一名の場合は 後が有効となります。従って、変更した場合は、新しい値が読み 取られます。ずれることはありません。
もし、全部アイコンを表示するのでしたらその下に print "新しいアイコン番号→<input size=5 name=icon value='$icon'>\n"; とすれば1ヶだけ送信されます。
確認後はmethodをPOSTに戻してください。押し詰まってきましたが以上です。 年越し蕎麦を食べながらお試しください。
|
|