前期第09回 - oddmutou/jugyo-2026kyototech GitHub Wiki

やること

  • テキストを投げる簡単なフォームを作る
  • フォームから送信されたデータをDBに保存する

フォームを作る

form要素を設置し,フォームを作ることができます。

https://developer.mozilla.org/ja/docs/Web/HTML/Element/form

form要素のaction属性にはフォームの内容の送信先のURIを設定しましょう。

form要素のmethod属性にはフォーム送信時のHTTP リクエストメソッドを設定しましょう。検索したりするようなフォームではGETを,掲示板で投稿したりするようなフォーム(フォームの内容がサーバー側で保存されたりするようなもの)ではPOSTを使います。

HTTP リクエストメソッドについて詳しくは

https://developer.mozilla.org/ja/docs/Web/HTTP/Methods

フォームのなかには以下のような要素を設置することができます。 いくつか例をあげてみます。

フォームで送られてきたデータは,もちろんPHPでうけとることができます。

フォームのHTTP リクエストメソッドがGETの場合は $_GET,POSTの場合は $_POST といった定数に入っています。添字付き配列(連想配列)です。キーは,それぞれの入力欄の要素の name 属性です。

以上を踏まえて,HTMLで単純なテキストを入力し送信するフォームを書き,PHPで送られてきた内容を表示するページを作ってみましょう。

vim public/formtest.php

内容はこんなかんじで https://github.com/oddmutou/jugyo-2026kyototech/blob/d1204b296460e59c2c78ffc5a2967f6a91a73751/zenki_09/public/formtest.php

フォームで送られたデータをDBに保存する

フォームから受け取った内容をDBに保存してみましょう。

前回の授業で作成した hogehoge テーブルを使いまわします。

vim public/formtodbtest.php

内容はこんなかんじ https://github.com/oddmutou/jugyo-2026kyototech/blob/1b6b1777be46a3ba2f3d98e12162d7b647ce05cb/zenki_09/public/formtodbtest.php

$_POST から取れた投稿内容をもとにINSERTしていますね。

mysqlクライアントを使ってDBの中身を直接覗いて,ただしくINSERTされているか確認してみましょう。

環境によってはmysqlクライアントで文字化けしてしまうかもしれません。その場合はASCII文字(アルファベットと数字と一部の記号)だけの内容を投稿すると確認しやすいとおもいます。

演習

演習1

hogehogeテーブルに過去に記入された内容を一覧にして表示しましょう。

created_atカラムの降順(新しいものが上にでてくる)で並び替えて表示してください。

XSSの脆弱性がないように作りましょう。

動作例: http://52.205.0.35/enshu1.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/commit/d473212d30922b75eb6aadf20d21c177ba040a4e

演習2

投稿内容を10件毎にページングして表示してみましょう。(第08回授業の演習3と同様)

動作例: http://52.205.0.35/enshu2.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/commit/74f59602e80fb056e12883b9bc013eea53b9fc8d

演習3

投稿時に投稿者の名前を記入できるように、また投稿者の名前を表示できるようにしましょう。名前欄に入れた内容は、クッキー(HTTP cookie)に保存し、次回以降自動で名前欄に入力されているようにしましょう。

hogehogeテーブルに、名前欄に入れた内容を保存するカラムを追加して、実装してください。

動作例: http://52.205.0.35/enshu3.php

実装例: https://github.com/oddmutou/jugyo-2026kyototech/commit/b5a0edbf9d804d2ece0b32d88c24642617fb394f