ScriptBasic講座
[POSTを使おう]



1.POSTとは?
前項ではGETを説明しました。この項ではPOSTを説明します。
GETがURLに含めるタイプだったのに対し、POSTはURLに含めずにフォームを使って送信するタイプです。
掲示板やメールフォームなどはこのPOST方式が利用されています。







2.FORMとは?
これはHTMLタグについてです。
HTMLタグ・フォームについて理解している方は次の3番に進んでください。


▼テキスト入力


▼パスワード入力


▼ラジオボタン
男性 女性

▼チェックボックス
アイス ケーキ 果物

▼複数行テキスト入力

 
<FORM>▼テキスト入力<BR>
<INPUT type="text"><BR>
<BR>
▼パスワード入力<BR>
<INPUT size="43" type="password"><BR>
<BR>
▼ラジオボタン<BR>
<INPUT type="radio" name="1">男性 
<INPUT type="radio" name="1">女性<BR>
<BR>
▼チェックボックス<BR>
<INPUT type="checkbox">アイス
<INPUT type="checkbox">ケーキ
<INPUT type="checkbox">果物<BR>
<BR>
▼複数行テキスト入力<BR>
<TEXTAREA rows="8" cols="40"></TEXTAREA><BR>
<INPUT type="submit" value="送信"> 
<INPUT type="reset" value="リセット">
</FORM>
上記はフォームのサンプルです。左が表示サンプル、右がタグです。

フォームを使う場合はFORMタグで囲みます。
 <FORM action="URL" method="送信方式">〜この間に入力欄をつくります〜</FORM>
         URL:送信先プログラムの位置を示します
         送信方式:GETまたはPOSTを指定します。

 
 テキスト入力とPASSWORD入力
 <input type="TYPE" name="識別名" [size="横幅" maxlength="最大入力文字数" value="初期値"]>
          TYPE:text又はpasswordのどちらか・・・
          識別名:識別名です
          横幅:テキスト入力欄の横幅です(半角文字数)
          ▼以下任意です▼
          最大入力文字数:テキスト入力の最大入力文字数です
          初期値:ここに入力した文字が入力済みとなります

 
 ラジオボタン
 <input type="radio" name="識別名" value="送信内容" [CHECKED]>
         識別名:識別名です
         送信内容:送信するデーターです。チェックされたらこの値が送信されます

         CHECKEDを記入すると最初からチェックします。[任意]
 
 チェックボックス
 <input type="checkbox" name="識別名" value="送信内容" [CHECKED]>
         識別名:識別名です
         送信内容:送信するデーターです。チェックされたらこの値が送信されます

         CHECKEDを記入すると最初からチェックします。[任意]

 複数行テキスト入力
 <textarea name="識別名" [rows="行数" cols="横幅" wrap="改行方式"]>初期値</textarea>
         識別名:識別名です
         ▼以下任意です▼
         行数:行数です
         横幅:横幅です(単位は半角文字数)
      改行方式:off:改行コードは全て省かれる  soft:実際に改行されている部分のみ改行として送信
            hard:実際に改行されている部分と画面上で改行されている部分を改行として送信

 
 選択メニュー
 <SELECT NAME="識別名">
 <OPTION VALUE="送信内容" [SELECTED]>
 <OPTION VALUE="送信内容" [SELECTED]>
 </SELECT>
    SELECTEDを記入するとその部分を事前に選択します。[任意]

 送信ボタン
 <INPUT TYPE="submit" VALUE="ボタン上の文字">

 リセットボタン
 <INPUT TYPE="reset" VALUE="ボタン上の文字">

 隠し項目
 <INPUT TYPE="hidden" NAME="識別名" VALUE="送信内容">

ScriptBasic講座ではHTMLについては詳しくは説明しません
HTMLについてはHTML関連のサイト又は書籍を参考にして下さい。






3.POSTでの受け取り実験
POSTで文字を受け取ってみましょう。

まずはFORM部分です。FORM部分はHTMLとして分けてもいいですが、
今回は一つのCGIとして作りましょう。

-post1.bas-
#!/usr/bin/scriba
import cgi.bas

print "Content-Type: text/html; charset=euc-jp\n\n"

print """
<html><body>
<form action="./post1.bas" method="POST">
▼適当に入力<br>
<input type="text" name="a"><br>
<input type="submit" value="送信">
</form><br><br>
"""
print "aの値:",cgi::POSTParam("a")

print "</body></html>"

実行上の注意:<form>タグのactionで指定する送信先にはご注意下さい。必ずCGIと同じ名前を入力

▼実行結果
aに何もデータがない場合は以下の通りです。
▼適当に入力



aの値:undef



最初このCGI[post1.bas]にアクセスすると、フォームの下はaの値:undefとなっている筈です。
適当に何かを入力し、[送信]を選択てみてください。
<form action="./post1.bas" method="POST">で./post1.basにPOST方式でデータを送信します。
./post1.basはこのファイルです。print""" 〜 """の間のフォーム部を表示します。
print """〜"""は長文を書くための命令でしたね。この中では"(ダブルクウォテーション)の前に\を付ける必要はありません。

print "aの値:",cgi::POSTParam("a")で識別名aの値を表示します。一番初めに表示したときは何も送信されていなかったので
undefを表示していましたが、今度はテキスト入力欄に入力したデータが表示されましたね。
cgi::POSTParam()関数はcgi::GETParam()関数と同じように利用可能です。




4.POSTでの受け取り実験その2
先ほどのプログラムを少し改良して、二回目はFORMが表示されないようにしてみましょう。
-post2.bas-
#!/usr/bin/scriba
import cgi.bas

print "Content-Type: text/html; charset=euc-jp\n\n"
print "<html><body>"

IF cgi::POSTParam("a")=undef Then

        print """
        <form action="./post2.bas" method="POST">
        ▼適当に入力<br>
        <input type="text" name="a"><br>
        <input type="submit" value="送信">
        </form>
        """

ELSE
        print "aの値:",cgi::POSTParam("a")
END IF

print "</body></html>"

実行上の注意:<form>タグのactionで指定する送信先にはご注意下さい。必ずCGIと同じ名前を入力

▼実行結果
aに何もデータがない場合は以下の通りです。
▼適当に入力




実行してみましょう。
フォームが表示されましたね。

IF命令を使ってcgi::POSTParam("a")=undefの時にフォームを表示し、それ以外のときにaの値を表示するようにしています。
undefは文字列ではありませんので、cgi::POSTParam("a")="undef"と書くと、偽になりフォームが表示されないことに注意して下さい





5.POSTもGETも使い方は同じ
POSTもGETも使い方は基本的に同じです。
但し、GETはURLに直接データを埋め込む点にご注意下さい。

POST命令で送信される内容はブラウザでは見れませんが、暗号化されて送信されるわけではありません。
HTMLのソースファイルを確認したり、ネットワーク上の通信をモニタするソフトなどで簡単に何が送信されたかわかります。
基本的なデータのやりとりは問題ありませんが、クレジットカードの番号など第三者に漏れてはいけないものを送信する場合
は必ずSSL通信(暗号化通信)などと併用して下さい。

戻る

ウメ研究所