フォームの作成(POST)

POSTリクエストのフォームを作成して、ログイン画面を作成してみましょう。

ファイル構成

login.html

ファイル作成

レイアウト作成

mainタグを追加して、レイアウトします。

login.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css">
</head>
<body>
    <main class="w-50 m-auto mt-5">
        <h2>会員ログイン</h2>
    </main>
</body>
</html>

POSTリクエスト

formの追加

formタグのmethodプロパティをpostにすると、POSTメソッドでリクエストできます。

POSTメソッドのformタグが入力されました。

<form action="" method="post">

</form>

フォームタグの追加

「Emaiアドレス」「パスワード」のテキストフィールドとログインボタンを追加します。

login.html
    <form action="" method="post">

      <div>
        <input type="text" name="email" placeholder="[email protected]">
        <label for="">Emailアドレス</label>
      </div>

      <div>
        <input type="password" name="password" placeholder="パスワード">
        <label for="">パスワード</label>
      </div>

      <div>
        <button>ログイン</button>
      </div>

    </form>

プレースホルダー

プレースホルダーは、入力欄にサンプルを表示し、文字を入力すると消えるプロパティです。

placeholderプロパティ

プレースホルダーは、inputタグの「placeholder」プロパティで設定します。

<input type="text" name="email" placeholder="プレースホルダーの文字">

Bootstrapに対応

ログインフォームをBootstrapで作成してみましょう。

login.html
    <form action="" method="post">

      <div class="form-floating">
        <input type="text" name="email" 
				class="form-control border-0 border-bottom rounded-0" 
				id="floatingInput" placeholder="[email protected]">
        <label for="floatingInput">Emailアドレス</label>
      </div>

      <div class="form-floating">
        <input type="password" name="password" 
				class="form-control border-0 border-bottom rounded-0" 
				id="floatingPassword" placeholder="パスワード">
        <label for="floatingPassword">パスワード</label>
      </div>

      <div class="d-grid m-2">
        <button class="btn btn-danger">ログイン</button>
      </div>

    </form>
ブラウザ

データ取得

サーバサイドプログラミングでデータ取得

フォーム送信したデータを取得するには、サーバサイドプログラミングが必要で、HTMLでは処理できません。

Webシステムの基本

クライアントからリクエストがあると、Webサーバがプログラムを実行し、最終的にHTMLをレスポンスします。これを動的コンテンツといいます。

  • サーバーサイドでプログラム実行
  • 処理した結果をHTML表示

Webフレームワーク

サーバーサイドで利用するプログラム言語はいろいろあります。Webシステム開発は非常に複雑で、1からプログラムすることはなく、Webフレームワークで開発するのが一般的です。以下が代表的なプログラミング言語とWebフレームワークです。

プログラミング言語とWebフレームワーク

プログラム言語 フレームワーク
PHP Laravel、Symfony
Java Spring Framework、Apache Struts
Ruby Ruby on Rails
JavaScript NodeJS
PHP(フレームワークなし)
$email = $_POST["email"];
$password = $_POST["password"];

if (!empty($email) && !empty($password)) {
    ....
}
PHP(Laravel)
    public function auth(Request $request)
    {
         $user = User::where("email", $request->email)->first();
        ...
    }
Java(フレームワークなし)
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

		String email = request.getParameter("email");
		String password = request.getParameter("password");

		if (!email.isEmpty() && !password.isEmpty()) {
			...
		}

	}
Java(Spring)
    @RequestMapping(value = "/auth", method = RequestMethod.POST)
    public String auth(@ModelAttribute("user") User user) {
        ...
    }

POSTとGETの違い

GETリクエストは、サーバからデータ取得・表示するときに利用します。 URLパラメータに応じてページやコンテンツを切り替えることができます。

  • ページの切り替え
  • データの検索
  • API からデータを取得

GET リクエストの注意

GETリクエストは、URLにパラメータつきで送信するため以下のことに注意しなければいけません。

  • 重要なデータを送信しない(パスワード、クレジットカードなど)
  • データ更新処理で利用しない(リロードや誤動作によるセキュリティホール)
  • 大量のデータを送信しない

重要データはGETしない

GETリクエストをすると、パラメータつきのURLで送信するので、パスワードやクレジットカードのような重要で機密なデータを送信しないよう注意しましょう。

http://example.com/auth?email=xxxxxx&&password=xxxxxx

POSTリクエストの特徴

データ更新処理で利用

POSTリクエストは、サーバのデータ更新・アップロードなどの処理で利用します。

  • データ更新・削除するような処理
  • 重要なデータを送信
  • 大量のデータやバイナリデータ送信

URLにパラメータがつかない

POSTリクエストはブラウザからサーバに対して、データを隠蔽して送信するので、URLパラメータがつきません。

http://example.com/auth

演習

問題1

POSTリクエストするフォームタグはどれですか?

<from action="" method="post"></form>
<from action="post" method=""></form>
<input type="post" name="text">
<input type="text" placeholder="post">

問題2

サーバーサイドプログラムで正しいのはどれですか?

  1. HTMLでプログラムを実行する
  2. HTMLでJavaScriptを読み込んでプログラムを実行する
  3. HTMLでPHPを読み込んでプログラムを実行する
  4. WebサーバでPHPプログラムを実行する

問題3

GETリクエストで「間違っている」のはどれですか?

  1. フォーム送信するとURLパラメータがつく
  2. データを取得・検索するのに向いている
  3. 重要なデータを送信するのに向いている
  4. ブラウザのURL欄から直接アクセスできる

問題4

POSTリクエストで「間違っている」のはどれですか?

  1. 送信するデータはユーザーから見えない
  2. 大量のデータやバイナリデータを送信するのに向いている
  3. 重要なデータを送信するのに向いている
  4. メールからURLリンクして処理できる