• ベストアンサー

php と JavaScript(HTML??)

どうかお願いします。 まず私がやりたい事は、 phpプログラムによってファイル名を入所し、HTMLのコンボボックスとして表示。 それを二つ作る。 その際、一つ目のコンボボックスで選ばれたディレクトリの中に入っているファイルを2つ目のコンボボックスで表示するようにする。 つまり (1)利用者はディレクトリを一つ目のコンボボックスで選択 (2)そのディレクトリに入っているファイル名(TEXTファイル)などを2つ目のコンボボックスで選択 このような事をしたいと考えています。 一つ目のコンボボックスはできました。 しかし、二つ目ができません。 まず私は$dir = opendir("./");としてディレクトリを開いています。 一つ目は上でいいのですが、2つ目が$dir = opendir("./???"); ??の部分に一つ目で選ばれた物を入れなくてはなりません。 しかし、HTMLやJavaScriptからPHPに変数を渡す方法がわからないのでできないんです・・・。。 どのようにしたらよいでしょうか。 長くなりましたがお願いします。

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

  • ベストアンサー
回答No.2

ajax.html --------------------------------------------------- <html> <head> <title>ディレクトリ</title> <script type="text/javascript"> var Obj = false; var loadFlag = 0; var list_len = 1; function changeList() { if (loadFlag) {writeDiv('現在読み込み中です');return false;} loadFlag = 1; var dir = getDirName(); if(!Obj){Obj = getObj();} Obj.open("GET","ajax.php?dir=" + dir,true); Obj.onreadystatechange = getDir; Obj.send(null); } function getDir() { if (Obj.readyState == 4 && Obj.status == 200) { var files = Obj.responseText; if (files) {makeOption(files); } else {alert('ディレクトリがないかファイルが存在しません');return;} loadFlag = 0; } } function getDirName() { return document.dirList.dir[document.dirList.dir.options.selectedIndex].value; } function makeOption(files) { var fileList = files.split("/"); var max = (fileList.length > list_len) ? fileList.length : list_len; for (i = 0; i < max; i++) { if ( i < list_len) { getFormObj().options[i].value = fileList[i]; getFormObj().options[i].text = fileList[i]; } else if (i > fileList.length){ getFormObj().options = null; } else { getFormObj().options[i] = new Option(fileList[i],fileList[i]); } } } function getObj() { var Obj = false; if( window.XMLHttpRequest) { Obj = new XMLHttpRequest(); } else if(window.ActiveXObject) { try { Obj = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { Obj = new ActiveXObject("Microsoft.XMLHTTP"); } } return Obj; } function getFormObj() { return document.dirList.fileSelect; } </script> </head> <body> <form name="dirList"> <select name="dir" onchange="changeList()"> <option>ディレクトリを選択してください <option value="php4">php4 <option value="flash">flash <option value="cgi-bin">cgi-bin </select> <select name="fileSelect"> <option>ディレクトリを選択してください </select> </form> </body> </html> --------------------------------------------------- ajax.php --------------------------------------------------- <?php $dir = './' . preg_replace("~[\./]~",'',$_GET['dir']); $return = array(); if (is_dir($dir)) { $od = opendir($dir); while ($d = readdir($od)) { if (is_file("{$dir}/$d")) { $return[] = $d; } } } echo (is_array($return)) ? join("/",$return) : $return; ?> --------------------------------------------------- こんなのでどうでしょうか。 長くてすいません。

n187
質問者

補足

わざわざプログラム組んでいただいてありがとうです>< さっそく試してみましたが、できません・・・。 コンボボックスが二つ表示されて、表示された内容は ・ディレクトリを選択してください。 ・php4 ・cgi-bin ・flash そんなディレクトリはないのに表示されます。 ちなみにコンボボックスの下にはプログラムが入っているファイル名がすべて書かれます。 また二つ目のコンボには何もリストが表示されません。 ディレクトリを選択してくださいだけです・・・ どうなっているのでしょうか

その他の回答 (3)

  • hisappy
  • ベストアンサー率46% (184/392)
回答No.4

#2の方へ対しての補足に関して一言。 ちゃんとソースを読んでから使いましょう。 どういう動きをするものなのか分からずに使っていては、 質問意図と返答内容がかみ合いません。 回答されたものはあくまでもサンプルなので、 自分が意図されるものに合うよう修正が必要です。

  • koooosuke
  • ベストアンサー率24% (19/78)
回答No.3

自分もPHPとJAVASCRIPTを混ぜて使おうとしている人です。 挫折しそうですが…(笑 JavaScriptでの別フレームや別ウィンドウ操作は 参考URLみてみるとわかりやすかったです。

参考URL:
http://homepage2.nifty.com/BASH/WWW/JavaScript/anotherpage.html
回答No.1

>しかし、HTMLやJavaScriptからPHPに変数を渡す方法がわからないのでできないんです・・・。。 HTMLやJavaScriptからPHPに変数を渡すには再度ページを呼び出さなければいけません。 一番簡単なのは一つ目のコンボボックスが選択された時点で一回JavaScriptのsubmit()で内容を送信してしまい、二つ目のコンボボックスに値が入力されているページを開く方法ですね。 ただし欠点としてコンボボックスを変えるたびに再読み込みすることになります。 これを応用しましてJavaScriptで幅と高さを0に設定した隠れたインラインフレームの内部を呼び出すかすぐ閉じるポップアップを開いてそのインラインフレームの内部やポップアップから二つ目のコンボボックスの内容を変更する方法もあります。 また選択するフォルダの数が少ない場合は、最初に全てのフォルダの内容を読み込んでしまっておいて後はJavaScriptで解決する方法もあります。

n187
質問者

補足

>これを応用しましてJavaScriptで幅と高さを0に設定した隠れたイ>ンラインフレームの内部を呼び出すかすぐ閉じるポップアップを>開いてそのインラインフレームの内部やポップアップから二つ目>のコンボボックスの内容を変更する方法もあります。 この方法がまったくわからないのですが、どのようにしたらよいのでしょうか。 フレームに関する知識がないので勉強してみます。

関連するQ&A