読者です 読者をやめる 読者になる 読者になる

求職者支援訓練webサイト制作科授業資料

フェリカテクニカルアカデミー池袋の求職者支援訓練webサイト制作科7月クラスの授業解説ブログです。

データをフォームからデータベースに自動保存する

PHP

今回はブラウザー上のフォームで入力したデータをデータベースに自動保存出来るようにします。

まずはXAMPPに新しいデータベース「form」を作ります。
その次に以下の内容でテーブルを作成。

f:id:yachin29:20161219233236j:plain


データベースがちゃんと機能しているか、まずはSQLを使って手動で確認してみましょう。

INSERT INTO inquiry (name, email, message) VALUES ('山田', 'yamada@gmail.com', 'はじめまして。')


続いて、PHPファイルでフォームを作ります。

入力画面(input.php)
確認画面(confirm.php
登録画面(submit.php

session

セッションは、個々のユーザーのデータを格納する仕組みで、 個々のユーザーに対してセッション ID を用意します。 これを用いて、複数ページにまたがるリクエストの間で状態の情報を永続させることができます。 Cookie(クッキー)の仕組みととても似ていますが、Cookieはブラウザ側、セッションはサーバー側と、それぞれデータの保存場所が異なります。

// セッションの開始
session_start();


// 入力値をセッション変数に格納
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['message'] = $message;

PDOでデータベースに接続し、SQLを実行する

PDO PHP Data Object

データベースでの実行は、「データベースに接続」して「データベースを捜査する許可を得る」必要があります
そのために「PDO」という命令を使って、「ユーザー名」と「パスワード」を設定します
通常のオブジェクトと同様、このオブジェクトの中には「データベースへの接続」や「SQLの実行」「実行結果の取得」などデータベースを使ったアプリケーション開発に必要な命令がそろっています。

データベースに接続する為に必要な情報

データベースサーバー:MySQL
サーバーコンピューター:localhost(XAMPPの場合)
使用するデータベース名:mydb
ユーザー名:root
パスワード:root (MAMPの場合)

// 接続設定
  $user = 'root';
  $pass = '';

  // データベースに接続
 $dsn = 'mysql:host=localhost;dbname=mydb;charset=utf8';
 $conn = new PDO($dsn, $user, $pass); //「$conn」は、任意のオブジェクト名
  
  // データの追加
 $sql = 'INSERT INTO form(name, email, message) VALUES("'.$name.'","'.$email.'","'.$message.'")';
 $stmt = $conn -> prepare($sql);
 $stmt -> execute();


「入力画面」input.php

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ユーザー登録フォーム・入力画面</title>
</head>

<body>
<p>ユーザー登録フォーム・入力画面</p>
<form action="confirm.php" method="post">
<table>
<tr><th>お名前</th><td><input type="text" name="name" required></td></tr>
<tr><th>メールアドレス</th><td><input type="email" name="email" cols="50" required></td></tr>
<tr><th>お問い合わせ内容</th><td><textarea name="message"  cols="50" rows="4"></textarea></td></tr>
</table>
<input type="submit" value="確認画面へ">
</form>
</body>
</html>

「確認画面」confirm.php

<?php
// セッションの開始
session_start();

$name = htmlspecialchars( $_POST[ 'name' ], ENT_QUOTES, 'UTF-8' );
$email = htmlspecialchars( $_POST[ 'email' ], ENT_QUOTES, 'UTF-8' );
$message = htmlspecialchars( $_POST[ 'message' ], ENT_QUOTES, 'UTF-8' );

// 入力値をセッション変数に格納
$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['message'] = $message;
?>

<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ユーザー登録フォーム・確認画面</title>
</head>

<body>
<p>ユーザー登録フォーム・確認画面</p>
<form action="submit.php" method="post">
<table>
<tr><th>お名前</th><td><?php echo $name; ?></td></tr>
<tr><th>メールアドレス</th><td><?php echo $email; ?></td></tr>
<tr><th>お問い合わせ内容</th><td><?php echo $message; ?></td></tr>
</table>
<input type="submit" value="データベースに登録">
</form>
</body>
</html>

「登録画面」submit.php

<?php
// セッションの開始
session_start();

$name = htmlspecialchars( $_SESSION[ 'name' ], ENT_QUOTES, 'UTF-8' );
$email = htmlspecialchars( $_SESSION[ 'email' ], ENT_QUOTES, 'UTF-8' );
$message = htmlspecialchars( $_SESSION[ 'message' ], ENT_QUOTES, 'UTF-8' );

// 接続設定
  $user = 'root';
  $pass = '';

  // データベースに接続
 $dsn = 'mysql:host=localhost;dbname=mydb;charset=utf8';
 $conn = new PDO($dsn, $user, $pass); //「$conn」は、任意のオブジェクト名

  // データの追加
 $sql = 'INSERT INTO form(name, email, message) VALUES("'.$name.'","'.$email.'","'.$message.'")';
 $stmt = $conn -> prepare($sql);
 $stmt -> execute();


?>
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ユーザー登録フォーム・登録ページ</title>
</head>

<body>
<p>ご登録ありがとうございました。</p>
<p><a href="input.php">入力画面に戻る</a></p>
</body>
</html>