• ベストアンサー

もっとも初歩的なデータの渡し方を

もっとも初歩的なデータの渡し方を教えていただけませんか。 <FORM ACTION="next.cgi" METHOD="POST"> <INPUT TYPE="TEXT" NAME="内容" SIZE="12"> <INPUT TYPE="SUBMIT" NAME="Submit" VALUE="送信"></form> next.cgiでどう書けば「内容」が表示されますか? まったく初心者の質問ですみません。

  • Perl
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
noname#25358
noname#25358
回答No.1

 その場合、パラメータの内容は標準入力から、しかも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 にその値がはいるんですけど……こういう書き方で分かります?

s-holmes
質問者

補足

回答ありがとうございます。むずかしいですね。フリーCGIの一部だけ修正して値を別ページに持っていきたいだけなので、できれば、「内容」というテキストボックスの値のシンプルなひっぱって行き方を御教授いただけると助かります。 (^^;

その他の回答 (2)

noname#25358
noname#25358
回答No.3

 補足みました。  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/
s-holmes
質問者

お礼

皆様助言ありがとうございました。意味は全然わかっていませんが、とりあえずread(STDIN, $in, 255); 以下の方法でなんとか必要な部分だけ取得できました。お手数をおかけしました。 そのうち、use CGI cgi-lib.pl についても使ってみたいと思います。(ちょっと自信なし。)

  • cocky
  • ベストアンサー率57% (232/402)
回答No.2

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"で渡される という違いがあります。

関連するQ&A

  • javascriptでCGIを実行するには

    htmlタグ <form method="post" action="・・・/cgi-bin/gogo.cgi"> <input type="text" name="name" size="20" value=""> <input type="submit" value="送信"> 上記で送信ボタンを押すとcgi側でnameを受け取れますが、 以下の場合はcgiは動作するのですが、nameを受け取れません、 受け取れる方法を教えてください。 <script type="text/javascript" language="javascript"> <!-- function gogo(){ document.write('<img src="・・・/cgi-bin/gogo.cgi">'); } // --> </script> </head> <body> <form method="post" action="javascript:gogo()"> <input type="text" name="name" size="20" value=""> <input type="submit" value="送信"> </form>

  • form 内 onChange

    恐れいります。 <form>内で、もう一つ<form>を作成し、送信したいのですが、 なかなかうまくいきません。form内のformは、selectボックスで、選択時に自ページにsubmitさせるようにしたいのですが。。 <form action="./xxx.cgi" method="POST"> <input type="text" name="xxx"> <form action="./" method="POST"> <select name="YYY" onChange="this.form.submit()"> <option value="ddd">ddd <option value="eee">eee </select></form> <input type="text" name="xxx"> <input type="submit" value="送信"> </form> よろしくお願いします。

    • ベストアンサー
    • HTML
  • POSTデータのNAME属性をVALUEによって取得する方法

    HTML→PHPのPOSTデータのやりとりについて、 【HTML】 <form name="form1" method="post" action="xxx.php"> <input name="01" type="text" value="1"> <input name="02" type="text" value="0"> <input name="03" type="text" value="0"> <input name="04" type="text" value="1"> <input type="submit" name="Submit" value="送信"> </form> 【xxx.php】 フォームから送信されたデータを使って、「value」が"1"の「name」を拾うのにはどのように書けばいいでしょう? ↓このように取得したいです。 $data[0]="01"; $data[1]="04"; よろしくお願いします。

    • ベストアンサー
    • PHP
  • submitではなくbuttonで送信

    事情があり、submitではなくbuttonでフォームのデータを送信したいのですが、以下のように書くとbuttonでは4567が送信されません。 <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="submit" name="bbb" value="4567"> </form> ↓ <form action="test.cgi" method="post"> <INPUT type="hidden" name="aaa" value="1234"> <INPUT type="button" name="bbb" value="4567" onclick="submit();" > </form> submitと同じように、bbbのデータ4567も送信するにはどのように書けばよいのでしょうか? 宜しくお願いします。

  • 同一ページの複数のフォーム通信

    お世話になります。 <form method='POST' action='#1'> <input name='text1'> <input name='text2'> <form method='POST' action='#2'> <input name='text3'> <input method='submit' value='B'> </form> <input method='submit' value='A'> </form> Aにて text1,2,3を#1へ送信 Bにて text3を#2へ送信 したいのですが、上手くできません。 <form></form>で囲まれている中に 更に<form></form>する事はできないのでしょうか? 代替案はありますか?? よろしくお願いします。

  • open.window(javascript) を使わないで、新規windowを3つ開く方法

    JavaScpript の open.window を使うと、値がGET で渡ってしまいます。 POST でデータを渡したいので、FORM で window を 3つ開く方法って ないでしょうか? <FORM method=POST name=form1 target="window1" ACTION="/cgi-bin/search1.pl"> <input type="text" name="searchword1"> </form> <FORM method=POST name=form1 target="window2" ACTION="/cgi-bin/search2.pl"> <input type="text" name="searchword2"> </form> <FORM method=POST name=form1 target="window3" ACTION="/cgi-bin/search3.pl"> <input type="text" name="searchword3"> </form> の 3 つのフォームを 1 つの <input type="submit" name="Search" value=" 検索 "> で起動させるってことです。 (または、open.windows で値を渡すとき、POST で渡したい) よろしくお願いします。

    • ベストアンサー
    • CGI
  • 複数のフォームから送信

    複数のフォームからtextの値を送信したいのですができますか?〒番号を入力して検索ボタンをおすと住所がでてきて最後に登録をしたいです。検索だけのプログラムはできてますがフォームを二つにすると両方のsubmitが登録になります・・・ 一応自分でいろいろためしましたがだめでした。。。 html,php,javascriptです。 二つともだめでした。。。。 rei1.php ------------------------- <html> <body <form method="POST" action="1.php"> お名前:<input type="text" name="name"> <br> <br> <form method="POST" action="yubin.php"> 〒:<input type="text" name="yubin"> <input type="submit" value="検索"> <br> 住所:<input type="text" name="zyu"> <br> </form> メールアドレス:<input type="text" name="email"> <br> <input type="submit" value="登録する"> </form> </body> </html> -------------------------------------- rei2.php -------------------------------------- <html> <head> <script language="javascript"><!-- function send() { document.nform.submit(); document.nform2.submit(); document.nform3.submit(); } //--></script> </head> <body> <form name="nform" method="POST" action="1.php"> お名前:<input type="text" name="name"> <br> </form> <form name="nform2" method="POST" action="yubin.php"> 〒:<input type="text" name="yubin"> <input type="submit" value="検索"> <br> 住所:<input type="text" name="zyu"> <br> </form> <form name="nform3" method="POST" action="1.php"> メールアドレス:<input type="text" name="email"> <br> <input type="submit" value="登録する"> </form> </body> </html> ------------------------------------

  • 複数FORMの一括実行について

    通常であれば同一サイト内に下記のソース(フォーム)が入るのですが、 これを改良しサイト上で希望の送信先をチェックボックスで選択し一回の操作で複数のcgiを実行したく思います。 良いcgiがあれば教えてください。 又は改造ができるcgi、修正方法を分かりましたらお教え願います。 サイトA <form action="https://aaa.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form> サイトB <form action="https://bbb.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form> サイトC <form action="https://ccc.cgi" method="post"> <input type="hidden" name="名前" value="name"> <input type="hidden" name="メール" value="mail"> <input name="Submit" type="submit" value="送信"> </form>

    • 締切済み
    • CGI
  • onclickで複数のボタンで対応したCGIにデータを送りたいのですが。

    下記のような感じで、 1.画像追加ボタンを押すと別ページ(b.cgi)に飛んで登録が終わったらまたこちらに戻ってきて、登録が押されるとそのまま登録処理(a.cgi)になる。 2.画像追加がされていなくても登録が押されるとそのまま登録処理をする。 (1.2.ともform内の情報はhiddenですべて送ります。) こんな動きをさせたいのですが、参考サイトなどをみてもこういう動作をしているところがなくて丸3日悩んでいます。 onclick=submit の記述とJavascriptの書き方が問題だとは思うのですが煮詰まってしまいました。 皆様には初歩的な質問かもしれませんがどうぞよろしくお願いします。 <form method="post" enctype="multipart/form-data"> <input type="text" name="Title" value="" size="140"> <input type="text" name="Body1" value="" size="140" style="ime-mode: active;"> <input type="button" value="画像追加" onclick="submit(document.gazouform)"> <input type="button" value="登録" onclick="submit(document.tourokuform)"> <form action="a.cgi" method="post" enctype="multipart/form-data" id="tourokuform"> </form> <form action="b.cgi" method="post" enctype="multipart/form-data" id="gazouform"> </form>

  • 1つのフォームで2つのcgiにデータを送るには

    どうぞよろしくお願いします。 テキストエリアにデータ入力して送信ボタンを押すと、 入力した内容が2つのcgiに送られるというようにしたいのですが、こういったことは可能でしょうか? イメージとしては下記のような感じです。 <form action="CGI名1" action="CGI名2" method="POST"> <inpu type="text" name="text1" size="32"> <input type="submit" value="送信"> </form> 両方の送信結果を別々のウインドウで表示します。 もしformタグでは不可能な場合、何か代換法がありましたらよろしくお願いいたします。

    • 締切済み
    • CGI

専門家に質問してみよう