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

ハロトレWebデザインの勉強03月14日開講クラス授業補足ブログ

ゲストブック

ゲストブック

《index.php

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

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

if(isset($_SESSION['m_name'])){
  $m_name = $_SESSION['m_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>
<div id="container">
<h1>ゲストブック</h1>
<form action="confirm.php" method="post">
<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 nl2br($m_message); ?></textarea>
</td>
</tr>
</table>
<input type="submit" value="確認する">
</form>
</div>
</body>
</html>



《confirm.php

<?php
//issetは変数の中に値があるか、もしくは変数自体が存在するか確認する関数
if (!isset( $_POST[ 'm_name' ] ) || !isset( $_POST[ 'm_mail' ] )||!isset( $_POST[ 'm_message' ] )){
  // 'Location:パス(path)でその場所に遷移する'
  header( 'Location:index.php' );
  exit;
}

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

// 入力値の取得
$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['m_name'] = $m_name;
$_SESSION['m_mail'] = $m_mail;
$_SESSION['m_message'] = $m_message;

?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>確認画面 - ゲストブック</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<div id="container">
<h1>追加確認画面</h1>
<form action="submit.php" method="post">
<table>
<tr>
<th>名前</th>
<td>
<?php
if (empty($_POST[ 'm_name' ])) {
  echo 'お名前を入力してください。';
  echo '<p><a href="index.php">入力画面へ戻る</a></p>';
}
  echo $m_name; ?>
</td>
</tr>
<tr>
<th>メールアドレス</th>
<td>
<?php
if (empty($_POST[ 'm_mail' ])) {
  echo 'メールアドレスを入力してください。';
  echo '<p><a href="index.php">入力画面へ戻る</a></p>';
}
 echo $m_mail; ?>
</td>
</tr>
<tr>
<th>メッセージ</th>
<td><?php
if (empty($_POST[ 'm_message' ])) {
  echo 'メッセージを入力してください。';
  echo '<p><a href="index.php">入力画面へ戻る</a></p>';
}
  echo nl2br($m_message); ?>
</td>
</tr>
<tr>
<?php
if (empty($_POST[ 'm_name' ]) || empty($_POST[ 'm_mail' ]) || empty($_POST[ 'm_message' ])) {
  exit;
}
?>
<td colspan="2">
<input type="submit" value="書き込む">
</td>
</tr>
</table>
</form>
</div>
</body>
</html>



《submit.php

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

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

  // データベースに接続
  $dsn = 'mysql:host=localhost;dbname=guestbook;charset=utf8';
  $conn = new PDO($dsn, $user, $pass);
  
  // 入力内容の取得($_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->bindParam(':m_name', $m_name);
  $stmt->bindParam(':m_mail', $m_mail);
  $stmt->bindParam(':m_message', $m_message);
  $stmt->execute();

// エラーチェック
  $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>
<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 nl2br($m_message); ?></td>
</tr>
</table>
<p><a href="index.php">トップページへ</a></p>
<p><a href="list.php">一覧表示へ</a></p>
</body>
</html>



《list.php

<?php
  try {
    $dsn = 'mysql:dbname=guestbook; host=localhost';
    $user = 'root';
    $pass = '';
    $dbh = new PDO( $dsn, $user, $pass );
    $dbh -> query( 'SET NAMES UTF8' );
    $sql = 'SELECT * FROM message WHERE 1';
    $stmt = $dbh -> prepare( $sql );
    $stmt -> execute();
    
     } catch(Exception $e ) {
    echo 'ただいま障害により大変ご迷惑をお掛けしております。';
    exit();
  }
?>
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>ゲストブック</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<h1>ゲストブック</h1>
<form action="index.php" method="post">
<table>
<tr>
<th></th><th>ID</th><th>名前</th><th>メールアドレス</th><th>メッセージ</th>
</tr>
<?php
    while( true ) {
    $rec = $stmt -> fetch( PDO::FETCH_ASSOC );
    if( $rec == false ) {
      break;
    }
    
    echo '<tr><td>';
    echo '<label><input type="radio" name="m_id" value="' .$rec[ 'm_id' ].'"></label>';
    echo '</td><td>';
    echo $rec[ 'm_id' ];
    echo '</td><td>';
    echo $rec[ 'm_name' ];
    echo '</td><td>';
    echo $rec[ 'm_mail' ];
    echo '</td><td>';
    echo $rec[ 'm_message' ];
    echo '</td></tr>';
   }
?>
</table>
<input type="submit" value="追加する">
</form>
</body>
</html>