こんにちは。スマホを大きいものに買い替えてよく落としてしまうひろです。
phpでウェブ開発を行っている際に、
入力フォームのデータを受け取りたいけど、どうやってつかえばいいのかわからない……
phpでinputタグってどうやって使うんだろう?
と考えたことはありませんか?
今回は、入力フォームのデータの受け取り方で、基本的な2種類の方法について解説します。
目次
phpでinputタグから受け取る場合は2種類の方法がある
inputタグに入力されたデータは、
POSTによる取得方法
の2つがあります。それぞれ特徴がありますので、見ていきましょう。
情報を受け取る方法はmethod属性で指定できる
まずはこちらを見てください。
このような入力フォームを作っていきます。(CSSは省略します)以下はこのような入力フォームを作る際の一例です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> <title>test</title> </head> <body> <form action="receive.php" method="get"> <label for=""><span>名前</span> <input type="text" name="name" id=""><br> </label> <label for=""><span>メールアドレス</span> <input type="text" name="email" id=""><br> </label> <label for=""><span>パスワード</span> <input type="text" name="password" id=""><br> </label> <input type="submit" value="送信"> </form> </body> </html> |
まず、入力フォームを作る際は、formタグで「ここが入力フォームですよ」とhtmlに示してあげる必要があります。ここで注目してほしいのが、
1 |
<form action="" method="get"> |
のaction属性とmethod属性です。
action属性は、この入力フォームのデータをどのページに送信するか、ということを指定できる属性です。今回はreceive.phpに指定されているので、receive.phpに送信します。method属性は、「どの方法で送るか」を指定できる属性で、この属性でGETかPOSTかを選択できます。ぜひ、上のコードで入力と送信をしてみてください。
GETの特徴
URLにパラメータを付与する
先程のサンプルコードではGETでデータを扱いましたが、送信ボタンを押した際にURLに
1 |
?name=***&email=***&password=*** |
という文字列が末尾に追加されたと思います。(***は入力したデータ)
これはGETでのデータの取扱い上の大きな特徴の一つで、URLの末尾にname属性で指定したinputタグのデータが入ります。
大きなデータの送信には向かない
このURL以下の文字列の長さには限度があり、あまりにも長いとエラーを吐いてしまうので、ページ数などの数値などを扱う場合にGETを使うのが一般的です。
他人に見られたくない情報は載せないほうが良い
URLに表示されてしまう関係上、パスワードなど他人に見せられない情報はGETではなくPOSTで扱うようにしましょう。
テキストデータのみ扱うことができる
URLにデータを乗せるので、画像などのファイルを送信することはできません。画像や動画、音声などのファイルを扱う場合は次に紹介するPOSTを使いましょう。
POSTの特徴
URLからは見えないデータを送信する
POSTでデータを扱う場合、URLは変化しません。先程のサンプルコードのmethod属性をpostにするとPOSTになるので、是非自分でも動かしてみてください。
大きなデータの送信ができる
こちらはGETと違い、長大な文字列なども扱うことができます。
他人に見られたくない情報(パスワードなど)を扱う場合に向いている
URLにデータが表示されないので、他人に見られたくない情報はGETではなくPOSTで扱うのが一般的です。
テキストデータ以外も送信できる
ファイル形式のデータも扱うことができます。画像を扱う場合などはPOSTを使うようにしましょう。
データの受け取り方法は連想配列形式で受け取る
受け取り方はどちらの方法でもあまり変わりません。
1 2 3 4 5 6 7 8 9 10 11 |
//GETでの送信の場合 //$_GETというあらかじめPHP側で用意された変数内に //連想配列形式で情報が格納されている //keyはinputタグのname属性で指定した文字列 $name = $_GET['name']; //POSTでの送信の場合 //GETと同じ用に$_POSTという変数が用意されており、 //こちらも連想配列形式で情報が格納されている //keyはこちらもGETと同様にname属性で指定した文字列となる $password = $_POST['password'] |
このように、$_GETや$_POSTというPHP側であらかじめ用意されている変数に自動的に情報が格納されており、ここからデータを取り出すことができます。扱いやすいように、別の変数に入れ直すのが一般的な扱い方になります。
phpのinputタグでデータを扱う場合、どちらを使うべきか?
まだ現場に入ったことがなかったり、まだ開発経験がなく、これから作っていく場合はどちらを使うべきなのかすごく迷いますよね……。実はこれは、現場によって変わってきますが「こういう場合はこっちを使うのが一般的だよね」という考え方があります。それらを見ていきましょう。
検索やページ数などはGET
このURLに入力データが表示されるという特性を生かして、「ブックマークされたとき」に便利なものがGETになることが多いです。例えば、検索結果などを表示する場合、そのページをブックマークしておくと、次回からブックマークでページに飛んだ際に便利な使い方になります。
Googleなどに代表される、検索エンジンの検索結果もGETを使用しており、例えば「ウェブカツ」と検索した際のURLが以下のURLになります。
?以下に入力した文字が含まれています。この場合は別の文字に置き換えているので、ぱっと見た際に何が検索されているのかわからないようになっています。
このように、ブックマークした際に入力データを保持できる場合、よくGETが使われます。
パスワードなど個人情報などはPOST
特徴でも紹介したとおり、GETはURLに表示され、POSTはURLに表示されないという特徴があります。この特徴により、ログイン画面などはPOSTを使うのが一般的です。
実は、基本的にはPOSTを使い、「GETを使うほうが良い」と判断された場合はGETを使う、という現場が今は多いので、もしもGETとPOSTでどちらを使うべきかわからない場合、POSTを使っておくほうが良いです。
まとめ
いかがでしたか?今回は、
について解説しました。phpでログイン機能などを作る際には必ず必要となってきますので、ぜひ参考にしてみてくださいね。