サーバーフォルダ検索フォームを作成する方法について

このQ&Aのポイント
  • クラインと用のサーバーフォルダ検索フォームを作成したいです。サーバーのデータ領域内のフォルダをそのままセレクトメニューの項目値にしたいのですが、何かいい方法はありますでしょうか?
  • クライアント側で頻繁にフォルダの登録・削除が行われるため、リアルタイムでフォルダ情報を取得したいと考えています。CGIを使用してフォルダ情報を取得する方法を考えていますが、セレクトメニューの項目値として紐付けたいフォルダの情報が複数ある場合にはどのようにすれば良いでしょうか?
  • クラインと用のサーバーフォルダ検索フォームを作成する際に、セレクトメニューの項目値を紐付けたいフォルダ情報が複数ある場合にはどうすれば良いでしょうか?情報を提供いただける方がいらっしゃいましたら、ご教授願いたいです。
回答を見る
  • ベストアンサー

サーバーのフォルダ名をセレクトの値とする

こんにちは、よろしくお願いします。 クラインと用のサーバーフォルダ検索フォームを作成したいです。 サーバーのデータ領域内のフォルダをそのままセレクトメニューの項目値にしたいのですが、何かいい方法はありますでしょうか? 【理由】 クラインと側でフォルダの登録・削除が頻繁に行われる(別処理)ため、リアルタイムで取得したい。 一応、フォルダ情報を取得する方法はCGIで考えているのですが、 -------------------- print <<"EOF"; <TR><TD>エリア名:</TD><TD><select name="AREA"> EOF ### エリア名表示処理 ### opendir(DIR, "$AREA"); while($file = readdir(DIR)){ print <<"EOF"; <option value ="$file">$file</option> EOF } closedir(DIR); print <<"EOF"; </select></TD> </TR> EOF -------------------- 同じようなものをあと3つ用意して、 セレクト(1)エリア(フォルダ)   ↓ 選択 セレクト(2)モデル(フォルダ)-セレクト(1)のモデル   ↓ 選択 セレクト(3)タイプ(フォルダ)-セレクト(2)のタイプ   ↓ 選択 セレクト(4)バージョン(フォルダ)-セレクト(3)のバージョン と紐付かせたいのですが、その方法がわかりません。 情報お持ちの方いらっしゃいましたら ご教授願えないでしょうか。 webサーバー・・・HP-UX web・・・IE CGI開発言語・・・Perl 開発端末・・・windows2000(Tera Term 使用) 以上、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • taseki
  • ベストアンサー率66% (155/233)
回答No.3

サンプルです。 先頭行の「#!/~」と「$start_dir = ~」は適宜変更してください。 リストから選択するまで、次のリストは表示されないようになっています。 セキュリティ対策、たとえばユーザーから送信されたデータをそのまま使わない、などしてください。 ================================ #!/usr/bin/perl $start_dir = '/home/public_html'; # 受信データ デコード read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); @pairs = split(/&/, $buffer); foreach (@pairs) { ($name, $value) = split(/=/); if (!$name) { next; } $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2', $1)/eg; $FORM{$name} = $value; } $dir_level = 0; $cur_dir = $start_dir; while (1) { $dir_level++; opendir(DIR, $cur_dir) or die; @entries = sort readdir DIR; closedir DIR; $next_dir = ''; foreach (@entries) { if (!(-d "$cur_dir/$_") || /^\.\.?$/) { next; } $selected = ''; if ($_ eq $FORM{"list_$dir_level"}) { $selected = ' SELECTED'; $next_dir = $_; } $options{"list_$dir_level"} .= qq|<OPTION VALUE="$_"$selected>$_\n|; } if (!$options{"list_$dir_level"}) { $dir_level--; last; } if (!$next_dir) { last; } $cur_dir .= "/$next_dir"; } #----------------------------------------- print <<"EOM"; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML LANG="ja"> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=EUC-JP"> <META HTTP-EQUIV="Content-Script-Type" CONTENT="text/javascript"> <TITLE>DIR Test</TITLE> </HEAD> <BODY> $start_dir <FORM METHOD="post" ACTION="$ENV{'REQUEST_URI'}" ID="Form1"> EOM #----------------------------------------- foreach (1 .. $dir_level) { print '-' x $_ . qq|<SELECT NAME="list_$_" onChange="Form1.submit()">\n<OPTION VALUE="">---\n$options{"list_$_"}</SELECT><BR>|; } #----------------------------------------- print <<'EOM'; <INPUT TYPE="submit" VALUE="SELECT"> </FORM> </BODY> </HTML> EOM #-----------------------------------------

kal1119
質問者

お礼

サンプルありがとうございます。 少し難しいので解析に時間がかかりそう・・・ わからないところは質問させていただきますので、 その時はよろしくお願いいたします。 ということで、早速ですが、 フォルダ選択を途中で止めるにはどうしたらよいのでしょうか? セレクトメニュー4つ分でそれ以降はもう良いのですが。 以上、よろしくお願いいたします。

その他の回答 (3)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.4

> フォルダ選択を途中で止めるにはどうしたらよいのでしょうか? > セレクトメニュー4つ分でそれ以降はもう良いのですが。 while (1) { という行がありますよね。 これはご存知かもしれませんが無限ループです。 で、下のディレクトリが存在する限り続け、ディレクトリが存在しなかったらループを抜けます。それをやっているのが、 if (!$options{"list_$dir_level"}) { $dir_level--; last; } という行です。 なので、その対象ディレクトリ自体、4階層しか作っておかなければ、そこで止まります。 ディレクトリの存在に関わらず、上限4つと決めてしまうなら、「無限ループ」を「4回繰り返すループ」に変えるだけです。 foreach (1 .. 4) { とか。 何かの条件、たとえば決められた何かを選択した時点でストップ、などというときは、上記if文あたりを変更して、条件によってループを抜けるようにすればいいと思います。 ところで、書き忘れましたが、このサンプルでは選択と同時に切り替わりますが、それはJavaScriptを使っているので、JavaScriptをオフにしている人のために、あえてボタンも付けてあります。このボタンがなければ、その人たちは何もすることができなくなってしまうので、付けておくことをおすすめします。

kal1119
質問者

お礼

ありがとうございます。 早速試してみたいと思います。

  • taseki
  • ベストアンサー率66% (155/233)
回答No.2

ようするに、リストから選択するだけで自動的に次のリストの内容が変化していく、ということですね? 一般的によくあるのが、 1.初期画面は、リスト1のみ値が入っていてリスト2以降は空 2.リスト1をユーザーが変更すると、onchangeイベントでその内容を自動的にサーバーに送信 3.サーバー側で、受信した内容に応じてリスト2に値を入れた画面を生成、ブラウザに送る。この時点でリスト1とリスト2のみ値が入っていて、リスト1は選択済みの状態になっている(optionタグにselect属性が付いている)。 4.リスト2をユーザーが変更すると、onchangeイベントでその内容を自動的にサーバーに送信。リスト1をユーザーが変更した場合は2に戻る 5.サーバー側で、受信した内容に応じてリスト3に値を入れた画面を生成、ブラウザに送る。この時点でリスト1とリスト2とリスト3のみ値が入っていて、リスト1とリスト2は選択済みの状態になっている(optionタグにselect属性が付いている)。 以下同じ… というパターンです。 同じ1つのCGIスクリプトで可能です。 ようは、上記は遷移の流れであって、プログラムの処理の流れは単純です。 常にすべてのリストの選択状態が送られてくるので、 1.リスト1から順に… 2.選択されていれば、次のリスト内容を生成、選択されていなければ4へ 3.2で生成したリストに対して、2に戻る 4.残りのリストがあれば、空のリストを生成 というプログラムを1つ用意し、ユーザーがリストを変更するたびに、このプログラムに送信すればいいと思います。

  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

まずは、ご質問の内容は、カテゴリはココ(JavaScript)ではなくCGIなどですね。 で、セレクト1→セレクト2への遷移がわからない、と解釈していいでしょうか。 単純に、受け取った値(ディレクトリ)を$AREAに割り当てて、そしてまた繰り返していけばいいだけと思います。 それと、readdir(DIR)では全てのエントリを読み込んでしまうので、ディレクトリなのかファイルなのか区別する必要があるでしょう。「-f」、「-d」というファイルテスト演算子が使えます。 また余計なことかもしれませんが、「print <<"EOF";」という書き方(ヒアドキュメント)は一般的に長い内容の場合に便利なものですので、1行ぐらいだと逆に読みにくいかと。 素直に print "<option value ="$file">$file</option>"; と書いた方がスッキリすると思いますよ。

kal1119
質問者

補足

ご回答ありがとございます。 補足させていただくと、 やりたいことはセレクトメニューの紐付けかつ、セレクト項目が頻繁に変動されることからフォルダをセレクト項目として取得する、ということです。 セレクト2の内容は、セレクト1で選択したフォルダの下にあるフォルダを表示させるようにしたいです。 セレクト3・セレクト4も同じで階層的に処理したいです。 セレクト1/セレクト2/セレクト3/セレクト4 ですので、 セレクト3の内容が決まるまではセレクト4は選択できず、 セレクト2の内容が決まるまではセレクト3は選択できず、 セレクト1の内容が決まるまではセレクト2は選択できず、 というような具合です。 セレクト1を選択した時点でもう一度同じCGIを実行するか、もしくはセレクト2選択用のCGIを実行するか、という感じになるかと思うのですが・・・ 可能でしょうか? 以上、よろしくお願いいたします。

関連するQ&A

  • 複数のselectで値で1つも選択されていないとき

    POST-MAIL(http://www.kent-web.com/data/postmail.html)で注文フォームを作成中で、 複数の商品の個数(デフォルトでは0に設定)をselectで選択させようとしています。 例: <tr><td class="center">NO.01</td><td>あんまん</td> <td><select name="あんまん"><option selected value="">0</option> <option value="1">1</option> (~略~) <option value="9">9</option></select></td></tr> <tr> <td class="center">NO.02</td><td>にくまん</td> <td><select name="にくまん"><option selected value="">0</option> <option value="1">1</option> (~略~) <option value="9">9</option></select></td></tr> POSTMAILの機能では、formのinput valueに入力必須項目を記入できますが、 これに加え、すべての商品のselect値が「0」に設定されている場合も cgiのエラー画面でエラーメッセージを出したいのですが、可能でしょうか? お知恵を貸していただけるようお願いいたします。

    • ベストアンサー
    • CGI
  • JavaScriptのSELECTの値について

    JavaScriptについて、質問させてください。 html1からhtml2にSELECTで選択した値を渡すプログラムを作成しています。 下はそのソースです。 <html> <head></head> <body> <form method="POST" action="html2" onSubmit="入力チェック"> <table> <tr> <td>項目A-1</td> <td>項目A-2</td> <td> <select name="selname1"> <option value="0">0</option> <option value="1,11,111">1</option> <option value="2,22,222">2</option> </select> </td> </tr> <tr> <td>項目B-1</td> <td>項目B-2</td> <td> <select name="selname2"> <option value="0">0</option> <option value="3,33,333">3</option> <option value="4,44,444">4</option> </select> </td> </tr> </table> </form> </body> </html> 項目は全部で10ほどあるので、途中省略しています。 SELECTで0以外が選ばれていた場合に、それに関連する項目情報と optionのvalueをhtml2に送信させて、一覧表のように表示させたいと思います。 JavaScriptのDOMやループ文を使うようですが、 私は専門外なので、どのような処理を組めばよいかわかりません。 どなたか、わかる方ご教示願います。

  • 複数のselect値で1つも選択されていないとき、エラーを出したいのですが

    初めて投稿いたします。 宜しくお願いいたします。 postmailで注文フォームを制作中なのですが、複数の商品の個数(デフォルトでは0に設定)をselectで選択させようとしています。 例: <tr><td class="center">NO.01</td><td>あんまん</td> <td><select name="あんまん"><option selected value="">0</option> <option value="1">1</option> (~略~) <option value="9">9</option></select></td></tr> <tr> <td class="center">NO.02</td><td>にくまん</td> <td><select name="にくまん"><option selected value="">0</option> <option value="1">1</option> (~略~) <option value="9">9</option></select></td></tr> もし、すべての商品の個数が「0」に設定されている場合はエラーを出して、cgiでの送信を中止させたいのですが、どのようなjavascriptをソースに書けば良いでしょうか?  宜しくお願いいたします。

  • HTMLのテーブルの値と同じ値をセレクトボックスで選択したい

    テーブルには1月~12月までの値があり、セレクトボックスにも1月~12月の項目があります。 この様な場合で、テーブルの4月をクリックした場合、セレクトボックスの4月を選択状態にしたいです。 テーブルの値を取得し、テキストボックスに表示する事は出来ましたが、セレクトボックスの場合はさっぱり分かりません。宜しければご教授下さい。 下記は別のサイト様を参考にテスト中の物ですが、テキストボックスには可能ですが、セレクトボックスでは表示されません。 <SCRIPT TYPE="text/javascript"> <!-- function getCell(obj){ document.getElementById("text1").value = document.getElementById("td"+obj + "a").textContent; } // --> </SCRIPT> </head> <body> <table border="1" cellpadding="0" cellspacing="0"> <tr id="tr0" onclick="getCell('1')"> <td id="td1a">1月</td> </tr> <tr id="tr0" onclick="getCell('2')"> <td id="td2a">2月</td> </tr>   <tr id="tr0" onclick="getCell('3')"> <td id="td3a">2月</td> </tr>   省略 </table>  <select id="text1"> <option>1月</option> <option>2月</option> <option>3月</optio>     省略 </select> 初心者丸出しで申し訳有りませんが宜しくお願いします。

  • フォーム内の値のチェックについて

    このようなフォーム(aspでセレクトボックスの数は可変になります。)にてSubmit時に 同じ値が選ばれていたらalertを出すJavaScriptを作りたいのですが、 どのようなものを作ればよろしいでしょうか? <FORM name="TestForm" action="" method="POST" target=""> <TABLE border="1" cellspacing="0" cellpadding="0" width="100%"> <TR> <td>1位</td> <TD> <select name="Select1"> <OPTION value="449">[選択なし]</OPTION> <OPTION value="465">あ</OPTION> <OPTION value="466">い</OPTION> <OPTION value="467">う</OPTION> </select> <td>2位</td> <TD > <select name="Select1"> <OPTION value="449">[選択なし]</OPTION> <OPTION value="465">あ</OPTION> <OPTION value="466">い</OPTION> <OPTION value="467">う</OPTION> </select> <td>3位</td> <TD> <select name="Select1"> <OPTION value="449">[選択なし]</OPTION> <OPTION value="465">あ</OPTION> <OPTION value="466">い</OPTION> <OPTION value="467">う</OPTION> </select> </TR> </TABLE> <TR><TD> <INPUT type="submit" value=登録 name=B1 onClick=""> </TD></TR> </FORM>

  • select表示について

    先程selectにて計算表示をご相談させて頂きました。 その方法を回避した方が良かったので回避した方法で進めています 改めてご相談させて頂きます。 HTML側のセレクトで PHPにある「4つの計算の配列の答えを1つだけ選んで表示する」 方法を考えています HTML側の状況です <HTML> <HEAD> </HEAD> <BODY> <form action="http://localhost/test/**/**.php" method="post"> <select name="e" size=1> <option value = "{$stock["a"]}">1</option> <option value = "{$stock["b"]}">2</option> <option value = "{$stock["c"]}">3</option> <option value = "{$stock["d"]}">4</option> </select> <input type = "submit" value = "送信"> <input type = "reset" value = "クリア"> </BODY> </HTML> PHP側の状況です <?php //計算データー $num1 = 2; $num2 = 3; $num3 = 4; $num4 = $num1*$num2; $num5 = $num2+$num3; $num6 = $num3+$num2-$num1; //ストックデーター $stock["a"] = $num3; $stock["b"] = $num4; $stock["c"] = $num5; $stock["d"] = $num6; //上のストックデータをhtml側からセレクトで行うのが下の$eです $e = $_POST["e"]; ?> <table border="2"> <tr bgcolor="#AAAAAA"> <th>在庫状況</th> </tr> <?php print "<tr><td>結果は{$stock["a"]}です。</td></tr>\n"; print "<tr><td>結果は{$stock["b"]}です。</td></tr>\n"; print "<tr><td>結果は{$stock["c"]}です。</td></tr>\n"; print "<tr><td>結果は{$stock["d"]}です。</td></tr>\n"; //上記は計算表示OK 下記のセレクトの結果が文字のみ表示で選択表示はされず print "<tr><td>セレクトの結果 {$_POST["e"]}です。</td></tr><br/>\n"; ?> 計算表示は出て来るのですが、肝心なpost"e"のselectの指示と表示方法の根本が分かっていない為、selectだけが全く反映されてません。 ストックデーターの上下に何かの指示が絶対に必要だと思いますが これ以上は答えが出せない状況です 超初心者で分からない者で大変申し訳ございませんがどなたか再びご教示願います。

    • 締切済み
    • PHP
  • PHPでのセレクトボックスの値の取得について

    入力画面(HTML)で都道府県をセレクトボックス で入力したいんですが、入力画面のHTMLに北海道から沖縄まで書くのは大変だし、 もしかしたらエリアを限定するかもしれないので 外部ファイル(例:area_data)にカンマ区切りで北海道から沖縄まで書いたものを optionの部分に入れたいと思います。 Perlでやるとこんな感じで出来たんですがこれをPHPでやるにはどうすればいいのか教えてください。 ただ単にPerl(の関数)をPHPに直すだけでできるものなのでしょうか? ----------------Perl(sample.cgi) mode:new--------------------------- ##===================== ## 都道府県の設定 = ##===================== if(!open(DATA,$area_data)){ &error('システムエラー','エリアデータファイルをオープンできません。'); } @area_data = <DATA>; close(DATA); @area = split(/,/,$area_data[0]); foreach(@area){ $option_val .= qq|<option value="$_">$_</option>\n|; } ##=============================== ## マクロリファレンス置き換え = ##=============================== foreach(@html){ s/_%option_val%_/$option_val/g; } ##========================= ## 入力画面HTML 出力 = ##========================= print <<"EOF"; Content-type: text/html @html EOF exit; } ---------------入力画面html------------------------------------------ <form name="form1" method="post" action="sample.cgi"> <input type="hidden" name="mode" value="new1"> <select name="address_a"> _%option_val%_ </select> </form> ---------------Perl(sample.cgi) mode:new1---------------------------- 入力確認画面のHTMLを開く ##=============================== ## マクロリファレンス置き換え = ##=============================== foreach(@html){ s/_%address_a%_/$param{'address_a'}/g; } ##========================= ## 入力確認画面HTML 出力 = ##========================= print <<"EOF"; Content-type: text/html @html EOF exit; } ---------------入力確認画面html---------------------------------------- <form name="form1" method="post" action="sample.cgi"> <input type="hidden" name="mode" value="new2"> <input type="hidden" name="address_a" value="_%address_a%_"> _%address_a%_ </form>

    • ベストアンサー
    • PHP
  • select ループ

    セレクトBOXの中をループさせて表示したいのですが? 上手く表示されません。 エラーメッセージ ・webサイトがメンテナンス中 ・webサイトにプログラム上の問題が  あると出ます。 下記ソースでおかしいところあれば お教え願えませんでしょうか? <html> <head><title>session.html</title></head> <body> <?php print"<table border="1"><tr>"; print"<td>"; print"<select name=kosu>\n"; for ($i=0; $i<5; $i++){ print"<option value=$i>$i\n"; } print"</select>"; print"</td>"; print"<td><input type=submit value="登録"></td>"; print"</tr>"; print"</table>"; ?> </body> </html>

    • 締切済み
    • PHP
  • HTMLにてセレクトボックスを作る

    よろしくお願いします。 <tr><td class="td_head">あいう<br /></td> <td class="td_odd"><select name="select /" > <option value="#">選択して下さい <option value="【a01】">【あああ】</option> <option value="【a02】">【いいい】</option> <option value="【a03】">【ううう】</option> <option value="【a04】">【えええ】</option></select></td> </tr> とすると、エディターにて◆ 102行: 要素optionはこの位置には置けません。と出てしまいます。何か文法ミスがありますか? おヒマな時にでもご回答願えればと思います。

  • セレクトボックスで現在選択されている値

    下記のセレクトボックスがあります。  print "<select name='atai'>";  print "<option value='abc'>abc</option>";  print "<option value='123'>123</option>";  print "<option value='xyz'>xyz</option>";  print "</select>"; 現在、選択されている値を $int の変数に入力 したいのですが、どうしたらいいのでしょうか。 例えば、$int=・・・・・・; というふうに代入 文でできることなのでしょうか。   この場合、現在表示されているCGIで、 $int が、abc か 123 か xyz か知りたい のです。

    • ベストアンサー
    • Perl

専門家に質問してみよう