- ベストアンサー
もっとも初歩的なデータの渡し方を
もっとも初歩的なデータの渡し方を教えていただけませんか。 <FORM ACTION="next.cgi" METHOD="POST"> <INPUT TYPE="TEXT" NAME="内容" SIZE="12"> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="送信"></form> next.cgiでどう書けば「内容」が表示されますか? まったく初心者の質問ですみません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
その場合、パラメータの内容は標準入力から、しかもURL形式に変換されて渡されてきます。 メソッドが「POST」の場合は、 read(STDIN, $in, 255); とやると引数が全部まとめて $in に入ってきます。 ただし 255 は引数の長さなので、臨機応変に色々やる必要があります。 で、これをエンコードとかなんとか色々やるわけです。 $in =~ s/\+/ /g; ($key, $val) = split(/=/,$in[$i],2); $key =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; $val =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; こうやると $key に '内容' が、$val にその値がはいるんですけど……こういう書き方で分かります?
その他の回答 (2)
補足みました。 use CGI を使わないのであれば、さっきの方法が一番シンプルなんですけど……(^_^; これ以上シンプルとなると、フリーで cgi-lib.pl というモジュールが出ています。これを require すると、&ReadParse; という関数を呼び出すだけで、%in という変数に値が入ってくれます。(←はよ言えや) このとき、キーが NAME の値、$in{...} の中身が VALUE の値になります。 このモジュールは下記から取得できます。 require './cgi-lib.pl'; &ReadParse; print "$in{'内容'}\n"; ↑こんな感じで使います。
- 参考URL:
- http://cgi-lib.berkeley.edu/
お礼
皆様助言ありがとうございました。意味は全然わかっていませんが、とりあえずread(STDIN, $in, 255); 以下の方法でなんとか必要な部分だけ取得できました。お手数をおかけしました。 そのうち、use CGI cgi-lib.pl についても使ってみたいと思います。(ちょっと自信なし。)
- cocky
- ベストアンサー率57% (232/402)
PerlのVer.5以降がインストールされているのであれば、プログラムの頭に use CGI; my $query = new CGI; の2行を付けておけば、あとは「$query->param('パラメータの名前')」で渡されたデータにアクセスできるようになります。 なおPerlのバージョンについては、telnetでshellが使える環境なら「perl -v」で確認できますが、おそらく管理者に問い合わせるのが一番でしょう。 ちなみに<input>タグのname属性のところに漢字を使うのはあまり好ましくありません。 別に出来ないというわけではないんですが、CGIの場合ブラウザから漢字コードが何で渡されてくるかがわからないので、きちんとそのへんを変換処理できるだけの腕がないと、扱うのは危険です。 もちろんCGIに渡されたvalueについても、一般的には漢字コードを変換してやる必要があります。そのへんは、Perlの漢字変換用ライブラリとして使われているjcode.plの使い方を勉強した方がいいです。そんなに難しいことはありませんし。 あと参考までに、FORMでsubmitされたデータは、 ○METHOD="GET"の場合:環境変数"QUERY_STRING"に入る ○METHOD="POST"の場合:標準入力に入り、データの長さは環境変数"CONTENT_LENGTH"で渡される という違いがあります。
補足
回答ありがとうございます。むずかしいですね。フリーCGIの一部だけ修正して値を別ページに持っていきたいだけなので、できれば、「内容」というテキストボックスの値のシンプルなひっぱって行き方を御教授いただけると助かります。 (^^;