php と html による入力フォームの作成:
php による入力情報の処理

UB3/informatics/php/input

このページの最終更新日: 2023/06/10


このページは、php による入力フォームの作成 の続きである。フォームに入力された情報を php で受け取って処理する場合と、MySQL に記録する場合について記載する。

  1. php で入力を受け取り処理する
  2. 入力を MySQL に記載する
    • X サーバーで MySQL を作成
    • 入力を MySQL に格納する (1)
    • 入力を MySQL に格納する (2)
    • 入力を MySQL に格納する (3)

広告

php で入力を受け取り処理する

echo コマンドを使って、入力をそのまま表示するという単純な処理方法を例に説明する。form タグの action で receive.php という php ファイルを指定し、そこに以下の内容を記載しておく (セキュリティのため、実際は別の名前で保存している)。


<?php
print_r($_POST);
?>


すると、送信ボタンをクリック後に

Array ([input_name] ⇒ 入力内容)

が表示されるはずである。これは入力内容が php に受け渡され、Array として処理されたということを意味する。

以下の入力欄では、これにちょっとセキュリティを強めた形の echo htmlspecialchars を使い、入力内容がそのまま出力されるようになっている。何か入力して試してみてほしい。



receive.php の内容は以下のようになっている。

<?php
echo htmlspecialchars($_POST['input_name'],ENT_QUOTES,'UTF-8')
?>

意味するところは以下の通り (1)。

  • 入力内容が _POST という配列 array として入力欄から送られてくる。入力内容には、input_name というタグがついている。
  • echo ($_POST['input_name']) でそれを出力できるが、このままだと 何らかのスクリプトが入力された場合、それが実行されてしまう可能性がある。
  • htmlspecialchars は、プログラムを実行しうる特殊文字を単なる文字列として読み込めという命令である。UTF-8 は文字コードを指定し、その前の ENT_QUOTES は UTF-8 の ' ' を許可する指令である。

この php ファイルに様々なコマンドを記入していくことで、入力された情報を処理するわけである。

入力を MySQL に記載する

X サーバーで MySQL を作成

MySQL とは、html や php と相性の良いデータベースである。多くのユーザー参加型ウェブサイトでは、入力内容が MySQL に格納され、それを読み出すという形をとっている。X サーバー で使用可能。

  • X server で ultrabem_comments という MySQL を作成し、あるユーザー (user A とする) にアクセス権を与える。
  • phpMyAdmin にログインする。ultrabem_comments、user A のパスワードは MySQL ユーザー一覧から設定。
  • ログインすると、information_schema というデータベースがすでに存在しており、これが何かよくわからないが、その他に作った ultrabem_comments という空のデータベースがある。
  • とりあえず以下のようなテーブルを phpMyAdmin で作成した。Varcher の値は MySQL のページ にまとめたように 255 などとした。

入力を MySQL に格納する (1)

次に、入力された内容を MySQL に書き込むように php ファイルを編集する。receive2.php と別ファイルにしておこう。やりたいことは以下の通り。

  1. 送信された順に 1, 2, 3... と自動で通し番号を振り、ID の欄にデータを入れる。
  2. 送信された日付を自動で Date に保存する。
  3. 以下の欄で、Name, Comment をそれぞれ保存する。
  4. 送信されたページの URL を Page の欄に保存する。

1 番は、receive2.php ではなく MySQL のデータベース側で設定する。ID のカラムを key (X サーバーでは Primary) にして、A_I という項目にチェックを入れる。A_I は auto increment で、これをチェックしておくと自動で 1 から順番に数字が割り振られる (1)。

2 番も MySQL のデータベース側で設定する。どう設定したのか詳細を忘れてしまったが、Date のカラムを TIMESTAMP にし、Default の値を現在のタイムスタンプにする。

1 と 2 を設定した結果、データベースは以下のようになる。


ここからは複雑なので、いったん教科書 (Ref. 1) から離れ、PHPからMySQLに接続する方法を簡単に解説 のページを参考に進めた。使用するのは、php の mysqli_connect() 関数である。

まずは connect.php というファイルをこのページに従って作り、サーバーにアップロードする。ホスト名、ユーザー名、パスワード、データベース名などは X サーバーの phpmyadmin などから入手できる。

サーバー上の connect.php にブラウザからアクセスすると、設定が全て正しければ「データベースの接続に成功しました。」と表示される。パスワードをそのまま php に書いてアップロードするのが最初は怖かったのだが、これは表示されないので大丈夫。

次に select.php を試す。スクリーンショットを一つだけ載せておこう。


ホスト名などを全て正しく入力、サーバーにアップロード、ブラウザからアクセスすると、array に引き続いてデータがブラウザ上に表示された。つまり、MySQL からデータを正しく引き出せたということになる。

最後に、insert.php というファイルを作り、入力を MySQL に格納するテスト。内容は PHPからMySQLに接続する方法を簡単に解説 を参照のこと。

  • ID 欄は auto increment を設定しているので、ここでは何も記入しないでよい。
  • Date 欄も自動なので、何も記入しない。
  • その他の欄は $query = "INSERT INTO Comments (Name, Comment, Page) VALUES ('UB', 'test2', 'NA');"; のように ' ' が必要。最初、これを忘れていて成功しなかった。


入力を MySQL に格納する (2)

地道に進めてみよう。次は「PHPからMySQLに接続する方法を簡単に解説」から一歩進めて、insert.php を実行するボタンをこのページに設置してみる。

これは、単に insert.php を form コマンドで指定すればよい。

<form method="post" action="insert.php">
<input type="submit" value="insert.php を実行">
</form>

である。以下のボタンができる。

クリックすると「成功しました」の画面が表示されるはずである。一見、それ以外に何も起こらないが、私の X サーバーのデータベースには、クリックされた日時がひたすら記録されていくことになる。



入力を MySQL に格納する (3)

では次に、Name 欄および Comment 欄の内容を MySQL に送る設定をしてみよう。まず、form、input、textarea タグで以下のような入力フォームを作る。いずれも入力必須の required オプションを加えており、action で php ファイルを設定する。


Name:

Comment:



php ファイルは、insert.php を改変していくのが良いと思ったが、結局は この php 公式ページ の形に従った。SQL インジェクションを防ぐため、PDO を使っている。

array として送られてくる Name と Comment は、$input_name ではなく$_POST['input_name'] としないとダメ。最初はこれがわからず、何度も Null のデータを送ってしまった。


最後に URL である。phpで現在のURLを取得する方法! などもあるが、このスクリプトを php ファイルに入れておくと、php ファイルの URL になってしまう。

ここでは、各ページに <input type="hidden" name="input_url" value="/informatics/php/input_receive.html"> という hidden 属性の input 項目を作り、URL を入れておくことにした。これによって、コメントを入力したページの URL がデータベースに格納されることになる。

URL はフルでなく、上記の形のものを使う。これは、次の MySQL から特定のコメントを表示する で参照するためである。


広告

コメント欄

サーバー移転のため、コメント欄は一時閉鎖中です。サイドバーから「管理人への質問」へどうぞ。

References

  1. 柏岡、池田. 2017. いちばんやさしい PHP の教本.

タイトルで「いちばんやさしい」と言っているだけあって php の独習に最適 な本だと思う。2015 年の比較的新しい本で、最新のアップデートまではカバーしていないものの、基本的なことは全て載っている。

テキストエディタのインストール、html 文法についても基本の解説があるのが助かる。これを読めば html と php を使ったウェブサイトが作れるようになり、さらに入力フォームの作り方、データベース MySQL との連携まで一通りできるようになるだろう。

実例は、ブラウザを利用した料理レシピアプリ。データの入力、表示、変更などの基本性能が全てあるので、他のプログラムを組むときにも応用しやすい。


  1. formタグのaction,method属性の使い方と特性〜html,slimでの記述方法〜 Link: Last access 2018/12/20.