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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

解決済

1回答

2100閲覧

MySQLへの登録ができない

hiziki

総合スコア54

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PDO

PDO(PHP Data Objects)はPHPのデータベース抽象化レイヤーです。

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

0クリップ

投稿2017/04/23 15:50

編集2017/04/23 15:57

フォームに入力したデータをデーバベースに登録したいのですが、「登録が完了しました」というメッセージが表示されているのですが、なぜかデータベースには登録されていません。もしかしたら、PHPでエラーが出てるのかもしれないと思い、

PHP

1error_reporting(E_ALL ^ E_NOTICE);

を挿入してみましたが、エラーが出ている気配はありません。
###該当のソースコード
※ DB接続のユーザー・パスワードは載せていません。
add.php

php

1<?php 2session_start(); 3error_reporting(E_ALL ^ E_NOTICE); 4 5$db['host'] = 'localhost'; 6$db['user'] = '(ユーザー)'; 7$db['pass'] = '(パスワード)'; 8$db['dbname'] = '(DBネーム)'; 9 10// エラーメッセージ、登録完了メッセージの初期化 11$errorMessage = ""; 12$signUpMessage = ""; 13 14// ログインボタンが押された場合 15if (isset($_POST["signUp"])) { 16 // 1. ユーザIDの入力チェック 17 if (empty($_POST["kanriclass"])) { // 値が空のとき 18 $errorMessage = '管理クラスが未入力です。'; 19 } else if (empty($_POST["kanrino"])) { // 値が空のとき 20 $errorMessage = '管理番号が未入力です。'; 21 } else if (empty($_POST["songnamekana"])) { // 値が空のとき 22 $errorMessage = '曲名(カナ)が未入力です。'; 23 } else if (empty($_POST["songname"])) { // 値が空のとき 24 $errorMessage = '曲名が未入力です。'; 25 } 26 27 if (!empty($_POST["kanriclass"]) && !empty($_POST["kanrino"]) && !empty($_POST["songnamekana"]) && !empty($_POST["songname"])) { 28 // 入力したユーザIDとパスワードを格納 29 $kanriclass = $_POST["kanriclass"]; 30 $kanrino = $_POST["kanrino"]; 31 $songnamekana = $_POST["songnamekana"]; 32 $songname = $_POST["songname"]; 33 $memo = $_POST["memo"]; 34 35 // 2. ユーザIDとパスワードが入力されていたら認証する 36 $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8',$db['host'],$db['dbname']); 37 38 // 3. エラー処理 39 try { 40 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); 41 42 $stmt = $pdo->prepare("INSERT INTO test(kanriclass, kanrino, songnamekana, songname, memo VALUES (?, ?, ?, ?, ?)"); 43 44 $signUpMessage = '登録が完了しました。管理クラス・番号は '. $kanriclass. '-'. $kanrino. ' です。曲名:「'. $songname. '('. $songnamekana. ')」、また、メモとして「'. $memo. '」を追加しました。'; 45 } catch (PDOException $e) { 46 $errorMessage = 'データベースエラー'; 47 // $e->getMessage() でエラー内容を参照可能(デバック時のみ表示) 48 echo $e->getMessage(); 49 } 50 } 51} 52?> 53 54<!doctype html> 55<html> 56 <head> 57 <meta charset="UTF-8"> 58 <title>新規登録</title> 59 </head> 60 <body> 61 <h1>新規登録画面</h1> 62 <form id="loginForm" name="loginForm" action="" method="POST"> 63 <fieldset> 64 <legend>新規登録フォーム</legend> 65 <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div> 66 <div><font color="#0000ff"><?php echo htmlspecialchars($signUpMessage, ENT_QUOTES); ?></font></div> 67 68 <label for="kanriclass">※必須※ 登録クラス</label><input type="text" required id="kanriclass" name="kanriclass" value="<?php if (!empty($_POST["kanriclass"])) {echo htmlspecialchars($_POST["kanriclass"], ENT_QUOTES);} ?>" placeholder="クラスを入力"> 69 <br> 70 <label for="kanrino">※必須※ 管理番号</label><input type="text" required id="kanrino" name="kanrino" value="<?php if (!empty($_POST["kanrino"])) {echo htmlspecialchars($_POST["kanrino"], ENT_QUOTES);} ?>" placeholder="管理番号を入力"> 71 <br> 72 <label for="songnamekana">※必須※ 曲名(カナ)</label><input type="text" required id="songnamekana" name="songnamekana" value="<?php if (!empty($_POST["songnamekana"])) {echo htmlspecialchars($_POST["songnamekana"], ENT_QUOTES);} ?>" placeholder="曲名のカナを入力"> 73 <br> 74 <label for="songname">※必須※ 曲名</label><input type="text" required id="songname" name="songname" value="<?php if (!empty($_POST["songname"])) {echo htmlspecialchars($_POST["songname"], ENT_QUOTES);} ?>" placeholder="曲名を入力"> 75 <br> 76 <label for="memo">メモ(任意)</label><textarea type="text" id="memo" name="memo" cols="50" rows="10" placeholder="メモを入力"></textarea> 77 <br> 78 <input type="submit" id="signUp" name="signUp" value="新規登録"> 79 </fieldset> 80 </form> 81 </body> 82</html>

PHPMyAdmin(testテーブル)

SQL

1CREATE TABLE IF NOT EXISTS `test` ( 2 `id` int(5) NOT NULL AUTO_INCREMENT, 3 `kanriclass` varchar(30) NOT NULL, 4 `kanrino` int(30) NOT NULL, 5 `songnamekana` char(100) NOT NULL, 6 `songname` char(100) NOT NULL, 7 `memo` text, 8 PRIMARY KEY (`id`) 9) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;

###試したこと
・「日本語」だから登録できないのかと思い、日本語をすべて英語に変えてみましたが、だめでした

###補足情報(言語/FW/ツール等のバージョンなど)
サーバー:「XREA(s1001)」
PHPバージョン:5.5.38
phpMyAdmin:4.0.10.15

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

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

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

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

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

izkn

2017/04/23 16:22

$stmt->execute(); はどこ行ったん?
hiziki

2017/04/23 23:39

すいません、もともといれてなかったみたいです。
guest

回答1

0

ベストアンサー

以下のようにするとどうでしょうか?

PHP

1<?php 2session_start(); 3error_reporting(E_ALL ^ E_NOTICE); 4 5$db['host'] = 'localhost'; 6$db['user'] = 'root'; 7$db['pass'] = 'password'; 8$db['dbname'] = 'database'; 9 10// エラーメッセージ、登録完了メッセージの初期化 11$errorMessage = ""; 12$signUpMessage = ""; 13 14// ログインボタンが押された場合 15if (isset($_POST["signUp"])) { 16 // 1. ユーザIDの入力チェック 17 if (empty($_POST["kanriclass"])) { // 値が空のとき 18 $errorMessage = '管理クラスが未入力です。'; 19 } else { 20 if (empty($_POST["kanrino"])) { // 値が空のとき 21 $errorMessage = '管理番号が未入力です。'; 22 } else { 23 if (empty($_POST["songnamekana"])) { // 値が空のとき 24 $errorMessage = '曲名(カナ)が未入力です。'; 25 } else { 26 if (empty($_POST["songname"])) { // 値が空のとき 27 $errorMessage = '曲名が未入力です。'; 28 } 29 } 30 } 31 } 32 33 if (!empty($_POST["kanriclass"]) && !empty($_POST["kanrino"]) && !empty($_POST["songnamekana"]) && !empty($_POST["songname"])) { 34 // 入力したユーザIDとパスワードを格納 35 $kanriclass = $_POST["kanriclass"]; 36 $kanrino = $_POST["kanrino"]; 37 $songnamekana = $_POST["songnamekana"]; 38 $songname = $_POST["songname"]; 39 $memo = $_POST["memo"]; 40 41 // 2. ユーザIDとパスワードが入力されていたら認証する 42 $dsn = sprintf('mysql:host=%s;dbname=%s;charset=utf8', $db['host'], $db['dbname']); 43 44 // 3. エラー処理 45 try { 46 $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)); 47 48 $stmt = $pdo->prepare("INSERT INTO `test`(`kanriclass`, `kanrino`, `songnamekana`, `songname`, `memo`) VALUES (?, ?, ?, ?, ?)"); 49 $stmt->bindParam(1, $kanriclass, PDO::PARAM_STR); 50 $stmt->bindParam(2, $kanrino, PDO::PARAM_INT); 51 $stmt->bindParam(3, $songnamekana, PDO::PARAM_STR); 52 $stmt->bindParam(4, $songname, PDO::PARAM_STR); 53 $stmt->bindParam(5, $memo, PDO::PARAM_STR); 54 55 $stmt->execute(); 56 57 58 $signUpMessage = '登録が完了しました。管理クラス・番号は ' . $kanriclass . '-' . $kanrino . ' です。曲名:「' . $songname . '(' . $songnamekana . ')」、また、メモとして「' . $memo . '」を追加しました。'; 59 } catch (PDOException $e) { 60 $errorMessage = 'データベースエラー'; 61 // $e->getMessage() でエラー内容を参照可能(デバック時のみ表示) 62 echo $e->getMessage(); 63 } 64 } 65} 66?> 67 68<!doctype html> 69<html> 70<head> 71 <meta charset="UTF-8"> 72 <title>新規登録</title> 73</head> 74<body> 75<h1>新規登録画面</h1> 76<form id="loginForm" name="loginForm" action="" method="POST"> 77 <fieldset> 78 <legend>新規登録フォーム</legend> 79 <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div> 80 <div><font color="#0000ff"><?php echo htmlspecialchars($signUpMessage, ENT_QUOTES); ?></font></div> 81 82 <label for="kanriclass">※必須※ 登録クラス</label><input type="text" required id="kanriclass" name="kanriclass" 83 value="<?php if (!empty($_POST["kanriclass"])) { 84 echo htmlspecialchars($_POST["kanriclass"], ENT_QUOTES); 85 } ?>" placeholder="クラスを入力"> 86 <br> 87 <label for="kanrino">※必須※ 管理番号</label><input type="text" required id="kanrino" name="kanrino" 88 value="<?php if (!empty($_POST["kanrino"])) { 89 echo htmlspecialchars($_POST["kanrino"], ENT_QUOTES); 90 } ?>" placeholder="管理番号を入力"> 91 <br> 92 <label for="songnamekana">※必須※ 曲名(カナ)</label><input type="text" required id="songnamekana" name="songnamekana" 93 value="<?php if (!empty($_POST["songnamekana"])) { 94 echo htmlspecialchars($_POST["songnamekana"], 95 ENT_QUOTES); 96 } ?>" placeholder="曲名のカナを入力"> 97 <br> 98 <label for="songname">※必須※ 曲名</label><input type="text" required id="songname" name="songname" 99 value="<?php if (!empty($_POST["songname"])) { 100 echo htmlspecialchars($_POST["songname"], ENT_QUOTES); 101 } ?>" placeholder="曲名を入力"> 102 <br> 103 <label for="memo">メモ(任意)</label><textarea type="text" id="memo" name="memo" cols="50" rows="10" 104 placeholder="メモを入力"></textarea> 105 <br> 106 <input type="submit" id="signUp" name="signUp" value="新規登録"> 107 </fieldset> 108</form> 109</body> 110</html>

投稿2017/04/23 16:28

s8_chu

総合スコア14731

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

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

hiziki

2017/04/24 00:48

ご回答ありがとうございます。帰宅後試して見ます
hiziki

2017/04/24 10:23

ありがとうございます!無事できました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問