6月14日 授業内容(データベース(データのデータベースへの送信の一連の流れ))

ゲストブック作成
web-design-exercise.hatenablog.jp

確認画面作成
web-design-exercise.hatenablog.jp


データベースに値を挿入
web-design-exercise.hatenablog.jp

index.php

<?php
//初期化
$m_name = '';
$m_mail = '';
$m_message = '';


//セッションの開始
session_start();
//入力値の取得
if(isset($_SESSION['m_name'])){
  $m_name = $_SESSION['m_name'];//セッションに記憶した値をname='your_nameに戻す'
}
if(isset($_SESSION['m_mail'])){
  $m_mail = $_SESSION['m_mail'];
}
if(isset($_SESSION['m_message'])){
  $m_message = $_SESSION['m_message'];
}
?>



<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ゲストブック</title>
<link rel="stylesheet" href="css/style.css">

</head>
<body>
<h1>ゲストブック</h1>
<form method="post" action="confirm.php">
<table>
<tr>
<th>名前</th>
<td><input type="text" name="m_name" class="msg" value="<?php echo $m_name ?>"></td>
</tr>
<tr>
<th>メールアドレス</th>
<td><input type="text" name="m_mail" class="msg" value="<?php echo $m_mail ?>"></td>
</tr>
<tr>
<th>メッセージ</th>
<td>
<textarea rows="5"name="m_message" class="msg" ><?php echo $m_message ?></textarea>
</td>
</tr>
</table>
<input type="submit" value="確認する">
</form>


</body>
</html>



confirm.php

<?php
if(!isset($_POST['m_name']) || !isset($_POST['m_mail']) || !isset($_POST['m_message'])){//issetは空文字('や")でも値として認識してしまうので、
header('Location:index.php');//値の有無を判断するには向かないので別でemptyを設定する
	exit;//
	}

//入力値チェック
if(empty($_POST['m_name'])){//emptyだともし空文字に該当すると次の画面に進めない
	echo 'お名前を入力してください。';
	echo '<p><a href="index.php">入力画面へ戻る</a></p>';
	exit;}
	
	if(empty($_POST['m_mail'])){
	echo '正しくメールアドレスを入力してください。';
	echo '<p><a href="index.php">入力画面へ戻る</a></p>';
	exit;}
	
	if(empty($_POST['m_message'])){
	echo 'メッセージを入力してください。';
	echo '<p><a href="index.php">入力画面へ戻る</a></p>';
	exit;}

$m_name=htmlspecialchars($_POST['m_name'],ENT_QUOTES,'UTF-8');
$m_mail=htmlspecialchars($_POST['m_mail'],ENT_QUOTES,'UTF-8');
$m_message=htmlspecialchars($_POST['m_message'],ENT_QUOTES,'UTF-8');

session_start();//セッションファイルができて値が入力される。データは前後のページに持っていける
$_SESSION['m_name']=$m_name;//元の入力データをセッションページに入力する。$_POST['your_name'];で元データに戻すことも可能
$_SESSION['m_mail']=$m_mail;//※htmlspecialcharsを入れると修正されてしまうので入れないこと
$_SESSION['m_message']=$m_message;

?>


<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>確認画面 - ゲストブック</title>
<style>
table{border: 1px solid #AAA;
  border-collapse: collapse;
  margin-bottom: 10px;
	width:300px;}
	th, td {
  border: 1px solid #AAA;
  padding: 10px;
}
th {
  text-align: left;
  background: #EDEDED;
}
input {
  font-size: 16px;
}
.msg {
  width: 400px;
}
</style>
</head>

<body>
<p>入力内容確認画面</p>
<form method="post" action="submit.php">
<table>
<tr>
<th>名前</th>
<td><?php echo $m_name;  ?></td>
</tr>
<tr>
<th>メールアドレス</th>
<td><?php echo $m_mail;  ?></td>
</tr>
<tr>
<th>メッセージ</th>
<td>
<?php echo $m_message;  ?></textarea>
</td>
</tr>
</table>
<input type="submit" value="送信する">
</form>


</body>
<p><a href="index.php">戻る</a></p>
</html>


submit.php

<?php
  // セッションの開始
  session_start();
  if (empty($_SESSION)) {exit;}

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

  // データベースに接続
  $dsn = 'mysql:host=localhost;dbname=guestbook;charset=utf8';/*dsnはdata base name*/
  $conn = new PDO($dsn, $user, $pass);//PDOでPHP とデータベースサーバーの間の接続を表します。
  
  // 入力内容の取得($_SESSIONから)
  $m_name = htmlspecialchars($_SESSION['m_name'], ENT_QUOTES, 'UTF-8');
  $m_mail = htmlspecialchars($_SESSION['m_mail'], ENT_QUOTES, 'UTF-8');
  $m_message = htmlspecialchars($_SESSION['m_message'], ENT_QUOTES, 'UTF-8');

  // データの追加
  $sql = 'INSERT INTO message(m_name, m_mail, m_message, m_dt)
              VALUES(:m_name, :m_mail, :m_message, NOW())';
  $stmt = $conn->prepare($sql);//stmtはstatementの略,connは今回はカウンター変数
  $stmt->bindParam(':m_name', $m_name);//bindParamでsql文のパラメーターにバインドする
  $stmt->bindParam(':m_mail', $m_mail);
  $stmt->bindParam(':m_message', $m_message);
  $stmt->execute();//INSERT INTO messageの中身がbind

// エラーチェック
  $error = $stmt->errorInfo();
  if ($error[0] != '00000') {
    $message = 'データの追加に失敗しました。' . $error[2];
  } else {
    $message = 'データを追加しました。データ番号:' . $conn->lastInsertId();
  }

// セッションデータの破棄
  $_SESSION = array();
  session_destroy();
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ゲストブック</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<p>追加完了画面</p>
<table>
<tr>
<td>名前</td>
<td><?php echo $m_name; ?></td>
</tr>
<tr>
<td>メールアドレス</td>
<td><?php echo $m_mail; ?></td>
</tr>
<tr>
<td>メッセージ</td>
<td><?php echo nl2br($m_message); ?></td>
</tr>
</table>
<p><a href="index.php">トップページへ</a></p>
</body>
</html>

データベースへの送信結果
f:id:paris1204:20160614205519p:plain