質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

3回答

1023閲覧

データベースにのテーブルに値が入らない

fk0617

総合スコア10

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/05/05 04:37

編集2020/05/05 04:42

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/05 08:53

ぶつ切りのコード?はそれぞれ単体の動作をするのでしょうか、第三者に評価してもらいたいのであれば、ファイル名とかもう少し丁寧に説明がほしいです。
guest

回答3

0

既に回答にありますが、今、こんな状態です。

php

1<?php 2function a(){ 3 $test = "hogehoge"; 4} 5 6$b = a(); 7var_dump($b);//NULL

関数内で定義された変数を利用したいのでしたらその変数をreturnしましょう。

エラー出ると思いますよ。
nullからprepareは呼べませんから。

投稿2020/05/05 06:45

編集2020/05/05 06:46
m.ts10806

総合スコア80859

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

とりあえず関数connectDbが何も返していません。

投稿2020/05/05 04:42

kei344

総合スコア69458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/05 09:57

connectDB()内ローカル変数 $dbh はconnectDB()を抜けると揮発して誰も使えなくなりますよね。
guest

0

自己解決

DBのカラム名のスペルが誤っておりました。
アドバイス頂いた皆様ご迷惑おかけしました。また、ご回答ありがとうございます。

投稿2020/07/07 07:18

fk0617

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/07/07 07:28

質問内容が変わっており、既存回答が意味なくなった上にそれらの回答になんら反応なく自己解決とされたようなので低評価しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問