お問い合わせ:データベース(1)

入力されたデータを保存するためのデータベース

  • サーバー上にデータベースを構築する
  • SQL文を記述する
  • お問い合わせ内容を格納するデータベースを作る
データベース作成
  • 有料サーバーの場合、契約内容によってデータベースの作成数が決まっているので注意する
テーブルを作成
  • テーブル名「inquiry」、フィールド数「4」

\***フィールドの設計

カラム 種別 長さ/値 デフォルト値 NULL インデックス A_I
id INT   なし × PRIMARY チェックを入れる
name VARCHAR   なし ×    
email VARCHAR   なし ×    
message VARCHAR   なし ×    


id

  • ユニークコード(通し番号)
  • 1件1件の問い合わせを識別する為
データ種別 意味 文字数 範囲
INT 整数 文字ではないので指定しない -2147483648〜2147483647
VARCHAR 文字列 最大文字数を指定する 0〜65,535文字


インデックス:PRIMARY

  • インデックスは「索引」の意味
  • これを設定するとデータの検索が早くなる
  • PRIMARYは1つのテーブルの中で1つのフィールドにしか設定できないインデックス
  • そのテーブルを代表するフィールド
  • 「主キー」とも呼ばれる


A_I(AUTO INCREMENT)

  • 自動的に通し番号をセットしてくれる
  • テーブルの最終レコードのコードを取得する
  • その値に1をプラスする
  • 新しいレコードのコードフィールドにその値をセットする

SQL文を記述

INSERT INTO inquiry (name, email, message) VALUES ('山田', 'yamada@gamil.com', 'はじめまして。');
  • SQLタブをクリック
  • 「INSERT INTO」がレコード追加命令
  • VALUESの左のフィールドに右の値をセットする
  • 実行する
表示で確認
  • 表示タブをクリック

お問い合わせデータをデータベースに自動保存

  1. データベースに「接続」する
  2. データベースエンジンにSQL文で命令を出す
  3. データベースから「切断」する
データベースに「接続」
$dsn = 'mysql:dsname=データベース名;host=データベースホスト名';
$user = 'ユーザー名';
$password = 'パスワード';
$dbh = new PDO($dsn, $user, $password);
$dbh -> query('SET NAMES UTF8');
  • XAMPP内では
$dsn = 'mysql:dbname=contactus;host=localhost';
$user = 'root';
$password = 'root';
$dbh = new PDO($dsn, $user, $password);
$dbh -> query('SET NAMES UTF8');
データベースエンジンにSQL文で命令を出す
$sql = 'ここにSQL文を書く';
$stmt = $dbh -> prepare($sql);
$stmt -> execute();
データベースから「切断」
$dbh = null;

入力画面の作成

《input.php

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>お問い合わせフォーム</title>
</head>
<body>
<div id="confirmation">
  <form action="check.php" method="post" id="inquiry">
    <table>
      <tr>
        <th><label for="name">お名前</label></th>
        <td><input type="text" name="name" size="20" id="name" class="text1"></td>
      </tr>
      <tr>
        <th><label for="email">メールアドレス</label></th>
        <td><input type="text" name="email" size="50" id="email" class="text2"></td>
      </tr>
      <tr>
        <th><label for="message">ご意見</label></th>
        <td><textarea name="message" cols="50" rows="5" class="text3" id="message"></textarea></td>
      </tr>
    </table>
    <input type="submit" value="確認画面へ">
  </form>
</div>
</body>
</html>

入力されたデータの確認

《check.php

<?php
//フォームデータが空の場合は処理終了
if(empty($_POST)) {
  echo '処理終了';
  exit;
}
require_once 'Encode.php';

//セッションの開始
session_start();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>確認画面</title>
<style>
section {
  width: 500px;
  margin: auto;
  text-align: center;
}
table {
  text-align: left;
  border: none;
}
td {
  width: 300px;
  padding: 3px;
}
td.subButtom {
  column-span: 2;
  text-align: right;
}
</style>
</head>
<body>
<section>
<h1>確認画面</h1>
<p>内容を確認してください。</p>
<?php
//入力値のチェック
if(empty($_POST['name'])) {
  echo 'お名前を入力してください。';
  exit;
}
if(empty($_POST['email'])) {
  echo 'メールアドレスを入力して下さい。';
  exit;
}
if(empty($_POST['message'])) {
  echo 'メッセージを入力してください。';
  exit;
}

//入力値の取得・加工
$name = e($_POST['name']);
$email = e($_POST['email']);
$message = e($_POST['message']);

$_SESSION['name'] = $name;
$_SESSION['email'] = $email;
$_SESSION['message'] = $message;
?>
<form method="post" action="thanks.php">
<table>
<tr>
<td>お名前</td>
<td><?php echo $name; ?></td>
</tr>
<tr>
<td>メールアドレス</td>
<td><?php echo $email; ?></td>
</tr>
<tr>
<td>メッセージ</td>
<td><?php echo nl2br($message); ?></td>
</tr>
<tr>
<td class="subButtom">
<input type="submit" name="sub1" value="送信する">
</td>
</tr>
</table>
</form>
</section>
</body>
</html>

thanksページに自動保存機能を追加

《thanks.php