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

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

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

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

PHP

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

Q&A

1回答

492閲覧

DBへの接続はできているのに、データをDBに登録できない理由を教えて欲しいです。

t_sssaito

総合スコア0

phpMyAdmin

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

PHP

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

0グッド

0クリップ

投稿2022/05/25 05:10

編集2022/05/27 08:13

質問内容
check.phpにて、index.phpより受け取ったデータを確認し、データベースへ投稿しようとしています。

php

1<?php 2session_start(); 3 4if (!empty($_POST)) { 5 if ($_POST['name']=='') { 6 $error['name']='blank'; 7 } 8 if ($_POST['email']=='') { 9 $error['email']='blank'; 10 } 11 if ($_POST['password']=='') { 12 $error['password']='blank'; 13 } 14 15 if (empty($error)) { 16 $_SESSION['join']=$_POST; 17 header('Location: check.php'); 18 exit(); 19 } 20} 21 22if ($_REQUEST['action']=='rewrite') { 23 $_POST=$_SESSION['join']; 24 $error['rewrite'] = true; 25} 26?> 27 28<p>次のフォームを入力してください</p> 29<form action="index.php" method="post" enctype="multipart/form-data"> 30 <dl> 31 <dt>名前<span class="required">必須</span></dt> 32 <dd><input type="text" name="name" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['name'], ENT_QUOTES); ?>"/> 33 <?php if ($error['name']=='blank'): ?> 34 <p>名前を入力してください</p> 35 <?php endif; ?> 36 </dd> 37 38 <dt>メールアドレス<span class="required">必須</span></dt> 39 <dd><input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email'], ENT_QUOTES); ?>"> 40 <?php if ($error['email']=='blank'): ?> 41 <p>メールアドレスを入力してください</p> 42 <?php endif; ?> 43 </dd> 44 45 <dt>パスワード<span class="required">必須</span></dt> 46 <dd><input type="text" name="password" size="10" maxlength="20" value="<?php echo htmlspecialchars($_POST['password'], ENT_QUOTES); ?>"> 47 <?php if ($error['password']=='blank'): ?> 48 <p>パスワードを入力してください</p> 49 <?php endif; ?> 50 </dd> 51 </dl> 52 <input type="submit" value="入力内容を確認する"> 53</form>

↑index.php

php

1<?php 2session_start(); 3require('../dbconnect.php'); 4 5if (!isset($_SESSION['join'])) { 6 header('Location :index.php'); 7 exit(); 8} 9 10if (!empty($_POST)) { 11 $statement = $db->prepare('INSERT INTO members SET name=?, email=?, password=?, created=NOW()'); 12 echo $ret = $statement->execute(array( 13 $_SESSION['join']['name'], 14 $_SESSION['join']['email'], 15 $_SESSION['join']['password'] 16 )); 17 unset($_SESSION['join']); 18 19 header('Location: thanks.php'); 20 exit(); 21} 22?> 23 24<form action="" method="post"> 25 <input type="hidden" name="action" value="submit"/> 26 <dl> 27 <dt>名前</dt> 28 <dd> 29 <?php echo htmlspecialchars($_SESSION['join']['name'],ENT_QUOTES);?> 30 </dd> 31 <dt>メールアドレス</dt> 32 <dd> 33 <?php echo htmlspecialchars($_SESSION['join']['email'],ENT_QUOTES); ?> 34 </dd> 35 <dt>パスワード</dt> 36 <dd> 37 <?php echo htmlspecialchars($_SESSION['join']['password'],ENT_QUOTES); ?> 38 </dd> 39 </dl> 40 <div> 41 <a href="index.php?action=rewrite">書き直す</a>|<input type="submit" value="登録する"> 42 </div>

↑check.php

dbconnect.phpでデータベースへの接続を確認しました。

php

1<?php 2try { 3 $db =new PDO('mysql:dbname =mydb;host=localhost','root','root'); 4} catch (PDOException $e) { 5 echo 'DB接続エラー'.$e->getMessage(); 6} 7?>

check.phpの画面で登録ボタンを押しても、データベースへの接続エラーは出ませんでしたが、データ内容を登録できませんでした。
解決策があればご教示お願いいたします。

データベースのテーブル名、画像も添付いたします
イメージ説明

開発環境
使っているPC : Mac
開発言語   :PHP7
MAMP

もし何か質問に不備があれば、修正いたしますのでよろしくお願いします。

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

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

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

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

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

t_sssaito

2022/05/27 05:43

コメントを参考にして実行時でもエラー表示が出ないかを確認するため、以下のコードをdbconnect.phpに書きましたが、具体的な解決策は分かりませんでした。 ```php <?php try { $pdo = new PDO( 'mysql:dbname=mydb;host=localhost;charset=utf8', 'root', 'root', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); } catch (PDOException $e) { exit($e->getMessage()); } ?>
guest

回答1

0

DB側で何か起きていてもその問題を確認できる実装になっていないので、エラーハンドリングを導入して現象確認してください。
PHPマニュアル:エラーおよびエラー処理
参考記事:PHPでデータベースに接続するときのまとめ

投稿2022/05/25 05:46

m.ts10806

総合スコア80765

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

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

t_sssaito

2022/05/25 06:20

ご回答ありがとうございます。 ご教示いただいたURLをもとに確認いたしました。 以下確認した時のコードです。 <?php try { $db = new PDO('mysql:dbname=mydb;host=localhost;charset=utf8','root','root'); } catch (PDOException $e) { echo 'DB接続エラー:' .$e->getMessage(); } ?> <!DOCTYPE html> <html lang="ja" dir="ltr"> <head> <meta charset="utf-8"> <title></title> </head> <body> </body> </html> 画面には何も表示されなかったので、データベース側に問題はないということでよろしいでしょうか? <!DOCTYPE html>より上部は、最初の質問で送ったコード3行目のdbconnect.phpで実装しておりました。 そちらの方でもエラーメッセージは確認できませんでした。 説明不足で申し訳ございません。
t_sssaito

2022/05/25 11:59

ご連絡ありがとうございます。 前回のコメントで送ったコードを消し、以下のコードに変更しました。(URL先の基本コーディングより) 動作確認をしたところ、エラーメッセージは表示されていませんでした。 一点補足があるのですが、他のページで入力した文字はデータベースに登録できました。(データベースの情報、写真一枚目はそのページから登録しました。) 以下コードになります。 変更したコードに不備があれば、ご教示いただけると幸いです。 <?php try { $pdo = new PDO( 'mysql:dbname=mydb;host=localhost;charset=utf8', 'root', 'root', [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ] ); } catch (PDOException $e) { // エラーが発生した場合は「500 Internal Server Error」でテキストとして表示して終了する // - もし手抜きしたくない場合は普通にHTMLの表示を継続する // - ここではエラー内容を表示しているが, 実際の商用環境ではログファイルに記録して, Webブラウザには出さないほうが望ましい header('Content-Type: text/plain; charset=UTF-8', true, 500); exit($e->getMessage()); } // Webブラウザにこれから表示するものがUTF-8で書かれたHTMLであることを伝える // (これか <meta charset="utf-8"> の最低限どちらか1つがあればいい. 両方あっても良い.) header('Content-Type: text/html; charset=utf-8'); ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Example</title> </head> <body> <!-- ここではHTMLを書く以外のことは一切しない --> </body> </html>
Orlofsky

2022/05/26 05:34

質問者さん、 ここに追記するのではなく、質問を修正した方が読んでくれる人が多いですよ。
t_sssaito

2022/05/27 05:11

ご指摘ありがとうございます。
m.ts10806

2022/05/27 05:52

ん、反映されてないような。 execute()処理があるコードをtryに入れてくださいね。
t_sssaito

2022/05/27 06:45

ご連絡ありがとうございます! 新しくphpファイルを作成し、execute()処理があるコードをtryに入れてみたのですが、コードが間違っているようでした。execute()処理の解説をみながらやったのですが、このコードのどこが間違えているのか教えていただけると幸いです。ご迷惑おかけして申し訳ございません。 <?php try { $statement = new PDO('mysql:dbname =mydb;host=localhost','root','root'); $stmt = $statement->prepare('INSERT INTO members SET name="さいとう", email="saito", password=7758, created="2022-01-01"'); $statement->execute(); )); } catch (PDOException $e) { exit($e->getMessage()); } ?>
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問