前提・実現したいこと
phpでカレンダー予約システムを作成しいるのですがpdoでデータベース接続しようとしてもデータベースのテーブルに値が
入らない状態です。
また、テキスト未入力時のエラーメッセージも表示がされません。
上記を解決する方法ご教授お願いします。
発生している問題・エラーメッセージ
特にエラーメッセージが表示されるわけではなく、下記二点解決できずにいます。 1、pdoでデータベース接続しようとしてもデータベースのテーブルに値が入らない 2、テキスト未入力時のエラーメッセージが表示されない
該当のソースコード
php
1<?php 2 3require_once('config.php'); 4require_once('functions.php'); 5 6session_start(); 7 8$content = null; 9$date = null; 10$name = null; 11$phone = null; 12$email = null; 13$question = null; 14 15 16 if (!empty($_POST['submit'])) { 17 18 $error[] = array(); 19 20 if (empty($_POST['content'])) { 21 $error['content'] = "選択して下さい"; 22 } else { 23 $content = $_POST['content']; 24 } 25 if (empty($_POST['date'])) { 26 $error['date'] = "入力して下さい"; 27 } else { 28 $date = $_POST['date']; 29 } 30 if (empty($_POST['name'])) { 31 $error['name'] = "名前を入力して下さい"; 32 } else { 33 $name = $_POST['name']; 34 } 35 if (empty($_POST['phone'])) { 36 $error['phone'] = "電話番号を入力して下さい"; 37 } else { 38 $phone = $_POST['phone']; 39 } 40 if (empty($_POST['email'])) { 41 $error['email'] = "メールアドレスを入力して下さい"; 42 } else { 43 $email = $_POST['email']; 44 } 45 // if ($email == '') { 46 // $error['email'] = "メールアドレスを入力して下さい"; 47 // } 48 49if ($_SERVER["REQUEST_METHOD"] !== "POST") { 50 setToken(); 51} else { 52 checkToken(); 53 54 if (empty($error)) { 55 56 $dbh = connectDb(); 57 58 $sql = "insert into reservations 59 (content, date, name, phone, email, question, created) 60 values 61 (:content, :date, :name, :phone, :email, :question, now())"; 62 $stmt = $dbh->prepare($sql); 63 $params = array( 64 ':content' => $content, 65 ':date' => $date, 66 ':name' => $name, 67 ':phone' => $phone, 68 ':email' => $email, 69 ':question' => $question 70 ); 71 $stmt->execute($params); 72 73 $dbh = null; 74 } 75} 76 header('Location: ./'); 77 exit; 78} 79 80?> 81<!DOCTYPE html> 82<html lang="ja"> 83<head> 84 <meta charset="utf-8"> 85 <title>schedule calendar</title> 86 <link rel="stylesheet" href="styles.css"> 87</head> 88<body> 89<h2>予約内容</h2> 90<form action="complete.php" method="POST"> 91 <table border="3" frame="box"> 92 <tr> 93 <th> 94 <label>予約の種類</label> 95 </th> 96 <td> 97 <select name="content"> 98 <option disabled selected>選択して下さい</option> 99 <option value="<?php echo h($content); ?>">見学</option> 100 <option value="<?php echo h($content); ?>">打ち合わせ</option> 101 <option value="<?php echo h($content); ?>">その他</option> 102 </select> 103 </td><br> 104 </tr> 105 <tr> 106 <th> 107 <label>日時</label> 108 </th> 109 <td> 110 <input type="time" name="date" value="<?php echo h($date); ?>"><br> 111 </td> 112 </tr> 113 <tr> 114 <td colspan="2"> 115 <p>*回答必須</p> 116 <label><span>*</span>名前</label> 117 <input type="text" name="name" value="<?php echo h($name); ?>"><br> 118 <?php if (!empty($error['name'])) { echo h($error['name']); } ?> 119 120 <label><span>*</span>電話番号</label> 121 <input type="text" pattern="[0-9]{3}-[0-9]{4}-[0-9]{4}" name="phone" value="<?php echo h($phone); ?>"> 122 <?php if (!empty($error['phone'])) { echo h($error['phone']); } ?> 123 <br> 124 125 <label><span>*</span>メールアドレス</label> 126 <input type="email" name="email" value="<?php echo h($email); ?>"> 127 <?php if (!empty($error['email'])) { echo h($error['email']); } ?> 128 129 </td> 130 </tr> 131 <tr> 132 <td colspan="2"> 133 <label>ご質問・ご要望は下記にご入力ください</label><br> 134 <textarea name="question" value="<?php echo h($question); ?>" rows="5" cols="50"></textarea><br> 135 </td> 136 </tr> 137 <tr> 138 <td colspan="2"> 139 <input type="submit" class="btn" value="予約する"> 140 <input type="hidden" name="token" value="<?php echo h($_SESSION['token']); ?>"> 141 <input type="submit" class="cancel_btn" value="戻る"> 142 </td> 143 </tr> 144 </table> 145</form> 146 147</body> 148</html> 149
<?php ini_set('display_error', 1); define('DB_DATABASE', 'schedule_php'); define('DB_USERNAME', 'dbuser'); define('DB_PASSWORD', '*****'); define('PDO_DSN', 'mysql:host=localhost;dbname=' .DB_DATABASE); date_default_timezone_set('Asia/Tokyo'); error_reporting(E_ALL & ~E_NOTICE); require_once('functions.php');
<?php require_once('config.php'); function h($s) { return htmlspecialchars($s, ENT_QUOTES, 'UTF-8'); } function connectDb() { try { $dbh = new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // return new PDO(PDO_DSN, DB_USERNAME, DB_PASSWORD); } catch (PDOException $e) { echo $e->getMessage(); exit; } } function setToken() { if (!isset($_SESSION['token'])) { $_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(16)); } } function checkToken() { if (empty($_POST['token']) || $_POST['token'] !== $_SESSION['token']) { echo 'エラー処理です。'; exit; } }
試したこと
マニュアル参照し、コードの確認。
補足情報(FW/ツールのバージョンなど)
バージョン PHP 7.1.33
ぶつ切りのコード?はそれぞれ単体の動作をするのでしょうか、第三者に評価してもらいたいのであれば、ファイル名とかもう少し丁寧に説明がほしいです。
回答3件
あなたの回答
tips
プレビュー