- ベストアンサー
CGIのFormのValueが取得できない。
掲示板のCGIを改造して、定期的に収集した発言リストの一部をを昇順に並び替えたファイルを作りダウンロードしたいと計画しています。 並び替えるファイルの始点の発言番号を決める入力フォームを作りましたが、下記#の記述を活かして、取り出すことが出来ません。(当該valueを認識してないようです?) その上、未だ独立に並び替えて動作させている下記のサブルーチン&revsが認識されなくなります。 もとのCGIは、kentさんのweb-forumを他の人が改造を加えたツリー形式のものです。 いろいろ書いて有るものを調べたのですが、分りません。 どうかよろしくお願いします。 # メッセージ投稿フォ-ムを表示 &msg_form; # フォームを表示する #print "<div align='center' style='font-size:9pt'>\n"; print "<form name='form1' method='POST' >"; print "LogList開始No:<input type='text' name='sno' value='999' size=6>\n"; print "</form>"; print "</div>\n"; #print "<Script language='JavaScript'>"; #print "valueOf(document.form1.sno)"; #print "</Script>\n" # 昇順リスト表示 &revs;
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
ちょっとよく解らないのですが…、順に書いてみます。 ●valueOfはオブジェクトメソッドです。単に「999」を取り出したいなら、 print 'window.alert(document.form1.sno.value);'; とか print 'window.alert(document.getElementsByName("sno")[0].getAttribute("value"));'; で、どうでしょうか。 ●気になるのが、 > 「print」だけで表示されると勘違いしていました とおっしゃる部分です。 「表示」とは何のことを言っているのかによって、大きく異なるからです。 質問者さんは今、サーバーサイドのスクリプト(CGIスクリプト)と、クライアントサイド(ブラウザ)のスクリプトの両方を(間接的に)作っているわけですが、この点を十分に理解する必要があります。 「alert」は、クライアント(ブラウザ)が、ユーザーに対して出力します(document.writeも同じ) 「print」は、サーバー(CGIスクリプト)が、クライアントに対して出力します ようするに、 『「ブラウザに出力させる命令」をCGIスクリプトに出力させる命令』を、書いている ということです。 説明が解りにくいかもしれませんが…。 ●上記を踏まえて、「表示」とおっしゃる点は実現できたとしても、おそらく本来の目的にならないように思います。alertやdocument.writeはクライアント側で完結したもので、サーバーには何ら関係ないからです。 正直、失礼ではありますが「呼び出す」や「CGIへ使うには、単純に変数に代入」や「入力値を呼出し表示」などの表現が抽象的で解らないのですが…、今書いているスクリプトの中で値を扱いたいのではないですか?(ちがったらすみません) 言い換えると、 『ユーザーが画面上のテキストボックスに入力した値を、CGIスクリプト側で取得したい』 ということだと思います。 もしそうではなくて、単にブラウザ内だけで入力値を確認のために表示させたいだけ、というだけなら、前述のようにalertやdocument.writeで可能です(valueOfの部分は上のように変更して)。 もし意図を読み違えていたら、すみません。
その他の回答 (4)
- qtea
- ベストアンサー率77% (38/49)
ぱっと見たところ、submitボタンがないのですが… > # メッセージ投稿フォ-ムを表示 >&msg_form; たぶん↑このサブルーチン内でsubmitボタンを表示していると思いますが、このサブルーチン内のsubmitボタンをクリックしても、↓の「sno」の値はとれないと思います。 ># フォームを表示する >#print "<div align='center' style='font-size:9pt'>\n"; >print "<form name='form1' method='POST' >"; >print "LogList開始No:<input type='text' name='sno' value='999' size=6>\n"; >print "</form>"; >print "</div>\n"; >#print "<Script language='JavaScript'>"; >#print "valueOf(document.form1.sno)"; >#print "</Script>\n" HTML内に複数の<form ...>~</form>がある場合、それぞれ別のものとしてあつかわれます。 なので、それぞれの<form ...>~</form>の間にsubmitボタン表示させてみてください。 たとえば、以下のような感じ。 print "<form name='form1' method='POST' >"; print "LogList開始No:<input type='text' name='sno' value='999' size=6>\n"; print "<input type='submit' value='ダウンロード'>\n"; print "</form>";
- taseki
- ベストアンサー率66% (155/233)
> なお、最初の問題は未解決です。 ↑それは何ですか?
- taseki
- ベストアンサー率66% (155/233)
No1.さんに付け加えて、 > サブルーチン&revsが認識されなくなります #print "</Script>\n" ↑この行の末尾にセミコロンがないのが原因では?
お礼
tasekiさん 有難うございました。 お蔭様で次のサブルーチンへ進まないと言う問題は、解消しました。 なお、最初の問題は未解決です。
- nebel
- ベストアンサー率37% (117/308)
#部分ですよね? #print "<Script language='JavaScript'>"; #print "valueOf(document.form1.sno)"; #print "</Script>\n" javascriptでdocument.form1.snoを取得しているだけですよね? CGIとは無関係だし、javascriptとしても、valueOfで何がしたいのかわかりません。 表示させたいなら、document.write( valueOf(document.form1.sno) )になるはずだし。 #print "<Script language='JavaScript'>"; #print "valueOf(document.form1.sno)"; #print "</Script>\n" この部分はまったく意味のないjavascriptをはき出しているにすぎませんが。 また、valueOfはIEでは対応していないとおもいますが。 #print "<Script language='JavaScript'>"; #print "valueOf(document.form1.sno)"; #print "</Script>\n" この部分で一体どういう処理を行いたいのでしょうか?
補足
nebelさん 早速のレスを有難うございます。 「print」だけで表示されると勘違いしていました。 目的は、入力した数値を次に使うために、とりあえず 呼び出す方法と内容の確認をしたいのです。(defaultで999を入れてあります。) CGIへ使うには、単純に変数に代入と考えていますが、これも問題があるなら後でお願いします。 valueOfがIEで対応していないかどうかは疑問が有りますが、 print "document.write(valueOf(document.form1.sno)); に変えて見ました、何も表示されません。 そこで、 print "window.alert(\"valueOf(document.form1.sno)\")"; にかえたら、 alert窓に、valueOf(document.form1.sno)と表示されました。 print "window.alert(valueOf(document.form1.sno)); では窓が出てきません。 print "window.alert(document.form1.sno); と変えたら、 窓に、[object]と表示されます。 表示して確認する手段としては、alertが使えそうですが formの入力値を呼出し表示・確認する方法が分りませんので、よろしくお願いします。
補足
tasekiさん、nebelさん、 qteaさん、回答を有難うございました。 未熟なためformを一つ挿入するにも、文法エラーで難行したので、一ステップごとに確認しながら進めています。 お蔭様で、form1にデフォルトで入れた値の確認を次の記述で出来ました。 print 'window.alert(document.form1.sno.value)'; このままでは、単に確認だけでCGIにこの値を使うには、別の手段が必要なことも理解しました。 次のステップでCGIに送りこの値を取得させる手段ですが、submitで送信し、デコードするのは(このCGIは、POST方式に限定しているようです。)、遠回りのような気がしますが直接的・簡明な手段があれば教えて下さい。 このCGIで使っている入力メッセージのデコードの記述をこれから勉強します。(一般にいうlibralyの取り込みはなく、また、既存部分の活用にはmodeの指定が絡んでくるようです。) デフォルトで値を入れておくと、空回りが生じる恐れが有るので止めたいと考えています。 後日、また質問させて戴きたいと思いますので、宜しくお願いします。