PHPのPOSTのやり方を解説!|POSTについて理解を深めてPHPを使いこなそう

- SE
- PHPのPOSTのやり方を教えてください。
- PM
- PHPのPOSTのやり方や問題点などを紹介します。
この記事でわかること
PHPのPOSTとは?
この記事ではPHPによるPOSTの送受信について解説します。ただしその前に、POSTとは何なのかについて知っておくべきでしょう。
POSTとはHTTP(Hypertext Transfer Protocol)の送信メソッドの1つです。インターネットの通信にはHTTPというプロトコル(通信の決まり事)が利用されていますが、POSTとはそのプロトコルの中の、データを送受信するための仕様の1つになります。
まずGETメソッドから学ぼう
HTTPではPOSTメソッドと対になる送信方法として、GETメソッドがあります。比較的わかりやすいGETから学ぶと、POSTの方の理解も早いでしょう。
GETやPOSTによる送信はHTMLのフォームを使うと簡単にできます。サーバ上のtest.phpというファイルのbodyタグ内に、以下のタグがあるとします。
1
2
3
4
5
6
|
<form action ="test.php" method="get">
<input type="text" name="message"><br/>
<input type="radio" name="sei" value="male" checked>男性<br/>
<input type="radio" name="sei" value="female">女性<br/>
<input type ="submit" value="送信">
|
GETメソッドでフォームからパラメータを送信
上のフォームタグを実行すると、テキストボックスと2つのラジオボタン、送信ボタンが表示されます。これでテキストと性別の情報をGETメソッドでサーバに送信できます。それではテキストボックスに「abcde」入力して送信ボタンを押してみましょう。
するとURLが以下のように変化します。これがGETメソッドでパラメータが送信された状態になります。
1
2
|
http://〇〇〇〇/test.php?message=abcde&sei=male
|
GETメソッドによるパラメータの送信
インターネットをしていると今回のように、URLの終りに?や&がついた状態を見かけることがよくあります。これがGETメソッドでパラメータが送信された状態なのです。URLにパラメータが付加されているのでわかりやすいでしょう。
1
2
|
URL?属性1=値1&属性2=値2&属性3=値3・・・
|
それでは次にPHPで、GETメソッドで送信されたパラメータを受信するコードを記述しましょう。
PHPでGETメソッドの値を受信
以下のPHPのコードを同じtest.phpに記述してください。GETメソッドの値は、$_GET[“属性名”]で取得できます。以下のサンプルはそれをechoで表示しています。
1
2
3
4
5
6
7
|
<?php
$message = $_GET["message"];
echo $message . "<br>";
$sei = $_GET["sei"];
echo $sei;
?>
|
これでGETで送信したパラメータを受信できることが確認できました。
パラメータがある時だけ表示するようにする
上のPHPサンプルは、GETでパラメータが送信されてない時でもPHPで取得して表示しようとします。その結果、BRタグの改行が表示されてしまいます。そこで以下のように直すと、パラメータを受信していない時は表示しないようにできます。
1
2
3
4
5
6
7
8
9
|
<?php
if(isset($_GET["message"])) {
$message = $_GET["message"];
echo $message . "<br>";
$sei = $_GET["sei"];
echo $sei;
}
?>
|
isset(変数)は変数の中身があればtrue、なければfalseになるので、if文で判定すればパラメータがある時だけ表示できるということです。
GETメソッドの問題点
GETについての基本的な使い方は以上です。GETはパラメータがURLに付加されているのでわかりやすいですが、それがデメリットでもあります。パスワードのように表に出てはならないパラメータも、URLに付加されるので分かってしまいます。
またパラメータが多いとURLがやたらと長くなってしまいます。そういった理由から、パラメータを表に出さずに送信できる方法が必要になります。そこで役立つのが、URLにパラメータを付加しないPOSTメソッドなのです。
POSTによるパラメータの受信
POSTを使う方法は、ここまでを理解していれば簡単です。ここまでのサンプルのGETをPOSTにするだけで、POSTで送受信できます。
PHP
1
2
3
4
5
6
7
8
9
|
<?php
if(isset($_POST["message"])) {
$message = $_POST["message"];
echo $message . "<br>";
$sei = $_POST["sei"];
echo $sei;
}
?>
|
HTML
1
2
|
<form action ="test.php" method="post">
|
これでURLにパラメータを付加せずに、送受信できます。
POSTを使うだけでは安全ではない
なおPOSTメソッドを使えば安全になるからパスワードを送信しても大丈夫、と思うのは間違いです。「http://~」でアクセスする場合、パラメータはそのままのデータで送信されます。これが傍受された場合、中身を読み取られてしまいます。
それを解消するのがHTTPSです。「https://~」でアクセスするとデータが暗号化されるので、傍受されても解析が困難になるため安全になります。そういった理由から、今はHTTPを避けてHTTPSを利用するのが一般的になっています。
なおGoogleは検索順位でHTTPよりもHTTPSでアクセスするサイトを優遇すると表明しています。
POSTで配列を送信する
POSTメソッドで配列を送信して、PHPで受信することも可能です。
PHP
1
2
3
4
5
6
7
|
<?php
if(isset($_POST["flower"])) {
print_r($_POST["flower"]);
echo "<br>";
}
?>
|
HTML
1
2
3
4
5
|
<form action ="test.php" method="post">
<input type="checkbox" name="flower[]" value="sakura">サクラ<br>
<input type="checkbox" name="flower[]" value="ume">梅<br>
<input type="checkbox" name="flower[]" value="chulip">チューリップ<br>
<input type ="submit" value="送信">
|
実行すると以下のように、チェックを入れた個所が配列として渡されて表示されます。
1
|
Array ( [0] => sakura [1] => ume )
|
PHPの最大送信サイズを確認する
PHPで送受信できるサイズは以下で確認できます。
1
2
3
|
$post_max_size = ini_get('post_max_size');
echo $post_max_size;
|
初期設定では8Mとなっていることが多いでしょう。なおこれを変更する場合はini_setで設定するのではなく、サーバにあるphp.iniを修正する必要があります。動作しているPHPのプログラム内で動的に変えることはできないということです。
- SE
- PHPのPOSTのやり方がわかりました。
- PM
- PHPのPOSTの理解を深めて、実際にコードを書いてみましょう。
PHPのPOSTを使いこなそう
PHPのPOSTについて解説しましたが、ご理解頂けましたでしょうか。PHPではGETと共に基本となる機能なので、まずはしっかりとマスターしましょう。
Search キーワード検索
Popular 人気の記事
-
【VB.NET入門】DataGridViewの使い方まとめ
公開: 更新:
reccomended おすすめ記事
-
【.NETが統合】.NET 5の概要と今後のリリース予定
公開: 更新:
Categories 連載一覧
Tags タグ一覧
Jobs 新着案件
-
ECサイトの開発/HTML/東京都千代田区/【WEB面談可】/在宅勤務
月給26万~26万円東京都千代田区(秋葉原駅) -
採用管理システム運用保守/Apache/東京都渋谷区/【WEB面談可】
月給50万~60万円東京都渋谷区(代々木駅) -
採用管理システム開発のテスター/Apache/東京都渋谷区/【WEB面談可】
月給25万~35万円東京都渋谷区(代々木駅) -
社内システムの開発/PHP/神奈川県相模原市/【WEB面談可】/在宅勤務
月給45万~60万円神奈川県相模原市(相模大野駅) -
販売管理システム開発支援SE/PHP/東京都渋谷区/【WEB面談可】/テレワーク
月給45万~60万円東京都渋谷区(新宿駅) -
採用管理システムリプレース、追加開発/Apache/東京都渋谷区/【WEB面談可】
月給42万~48万円東京都渋谷区(代々木駅)