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

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

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

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

PHP

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

Q&A

6回答

32654閲覧

phpからmysqlのテーブルにINSERTできないのですが原因が分かりません。

hirotto57

総合スコア57

MySQL

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

PHP

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

0グッド

0クリップ

投稿2015/07/05 16:36

phpの初心者です。
phpからmysqlのテーブルにデータ登録されないのですが、原因がさっぱりわかりません。
下記記述のphpファイルから、mysqlにデータを登録させようとしていますが、エラーメッセージは出ませんが、データはMYSQLに登録できません。
INSERT文の記述が間違っているのでしょうか?
ご教示の程、何卒宜しくお願い致します。

テーブルの構造
テーブル名
dat_member

フィールド名
code(AI、int)、date(timestamp)、email(varchar)、password(varchar)、name(varchar)、
nickname(varchar)

shop_form.html

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>会員登録</title> </head> <body>

会員情報を登録してください。<br />

<form method="post" action="shop_form_check.php"> お名前<br /> <input type="text" name="onamae" style="width:200px"><br /> ニックネーム<br /> <input type="text" name="nickname" style="width:200px"><br /> メールアドレス<br /> <input type="text" name="email" style="width:200px"><br /> パスワードを入力してください。<br /> <input type="password" name="pass" style="width:100px"><br /> パスワードをもう1度入力してください。<br /> <input type="password" name="pass2" style="width:100px"><br /> <br /> <input type="button" onclick="history.back()" value="戻る"> <input type="submit" value="OK"><br /> </form> </body> </html>

shop_form_check.php

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>会員情報登録・確認画面</title> </head> <body> <?php require_once('common.php'); //関数でサニタイズ $post=sanitize($_POST); //チェックしてOKなら、各データをshop_form_done.phpにhiddenで渡す。 $onamae=$post['onamae']; $nickname=$post['nickname']; $email=$post['email']; $pass=$post['pass']; $pass2=$post['pass2']; $okflg=true; if($onamae=='') { print 'お名前が入力されていません。<br /><br />'; $okflg=false; } else { print 'お名前<br />'; print $onamae; print '<br /><br />'; } if($nickname=='') { print 'ニックネームが入力されていません。<br /><br />'; $okflg=false; } else { print 'ニックネーム<br />'; print $nickname; print '<br /><br />'; } if(preg_match('/^[\w\-.]+\@[\w\-.]+.([a-z]+)$/',$email)==0) { print 'メールアドレスを正確に入力してください。<br /><br />'; $okflg=false; } else { print 'メールアドレス<br />'; print $email; print '<br /><br />'; } if($pass=='') { print 'パスワードが入力されていません。<br /><br />'; $okflg=false; } if($pass!=$pass2) { print 'パスワードが一致しません。<br /><br />'; $okflg=false; } if($okflg==true) { print '<form method="post" action="shop_form_done.php">'; print '<input type="hidden" name="onamae" value="'.$onamae.'">'; print '<input type="hidden" name="nickname" value="'.$nickname.'">'; print '<input type="hidden" name="email" value="'.$email.'">'; print '<input type="hidden" name="pass" value="'.$pass.'">'; print '<input type="button" onclick="history.back()" value="戻る">'; print '<input type="submit" value="OK"><br />'; print '</form>'; } else { print '<form>'; print '<input type="button" onclick="history.back()" value="戻る">'; print '</form>'; } ?> </body> </html>

shop_form_done.php

<?php session_start(); session_regenerate_id(true); ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>会員登録完了画面</title> </head> <body> <?php try { require_once('common.php'); $post=sanitize($_POST); $onamae=$post['onamae']; $nickname=$post['nickname']; $email=$post['email']; $pass=$post['pass']; print $onamae.'様<br />'; print 'このたびは会員登録頂きありがとうございました。<br />'; print $email.'にメールを送りましたのでご確認ください。<br />'; //データベースに接続 $dsn='mysql:dbname=dat_member;host=localhost;charset=utf8'; $user='root'; $password=''; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); //SQL文を使ってレコードを追加 $sql='INSERT INTO dat_member (email,password,name,nickname) VALUES (?,?,?,?)'; $stmt=$dbh->prepare($sql); //$data=array(); $data[]=$email; $data[]=md5($pass); $data[]=$onamae; $data[]=$nickname; $stmt->execute($data); //データベースから切断 $dbh=null; $title='ご登録ありがとうございます。'; $header='From:abc@mail.com'; $honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8'); mb_language('Japanese'); mb_internal_encoding('UTF-8'); mb_send_mail($email,$title,$honbun,$header); $title='ユーザー様からご登録がありました。'; $header='From:'.$email; $honbun=html_entity_decode($honbun,ENT_QUOTES,'UTF-8'); mb_language('Japanese'); mb_internal_encoding('UTF-8'); mb_send_mail('abc@mail.com',$title,$honbun,$header); } catch (Exception $e){ print 'ただいま障害により大変ご迷惑をお掛けしております。'; exit(); } ?> </body> </html>

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

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

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

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

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

guest

回答6

0

mysqlのクエリログを確認してみたら如何でしょうか?
もしかするとSQLで何がエラーが発生している可能性が考えられるかと思います。

投稿2015/07/05 21:48

takayukiinaba

総合スコア1158

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

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

0

コードは枠で囲んでくれませんか?

投稿2019/06/12 07:56

zansetsuber

総合スコア33

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

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

0

テーブルのフィールド名と挿入しようとしている変数名が不一致じゃないですか?
フィールド名:name!==$onamaeのように、、

投稿2018/07/18 09:47

gosuke

総合スコア16

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

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

0

カラム名(name)と挿入しようとしているtext(onamae)が違うように思うのですが、、

投稿2018/06/05 22:18

gosuke

総合スコア16

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

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

0

先ず、手っ取り早いのは、

$stmt->execute($data);
の前に、

print $sql."<br />\n";
var_dump($data);

を入れて、画面に表示されるsqlと配列の値を代入して直接SQLをDBに入力して、ちゃんとデータが登録されるかどうか確認してください。
その際、?を値に置き換えるときはちゃんと' 'でくくるのを忘れないようにしてください。
一見してSQLに問題はなさそうですが、カラム名が正しいかどうか、値がちゃんと入っているかどうかは、コードを追ってもわかりません。

SQLに問題なければあとはDBに正しく接続されているか疑がわなければですね。

try { $dsn='mysql:dbname=dat_member;host=localhost;charset=utf8'; $user='root'; $password=''; $dbh=new PDO($dsn,$user,$password); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { print "DBに接続できませんでした。" . $e->getMessage(); exit; }

こんな感じで接続エラーの確認してみてください。

投稿2015/07/09 09:39

編集2015/07/09 09:41
hintrarou

総合スコア162

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

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

0

MYSQLのID、パスワードをわざと間違えて、エラーが必ず発生する状態でテストされたときにエラーが表示されるかどうか確認し、エラーが表示されないようであれば、MYSQL接続パラメータに何かしら間違いがあると推測されます。

$dbhの値がnull になっていないか確認されてはいかがでしょう。

また、省略しているだけかもしれませんが、dat_memberテーブルに、MYSQLの主キー設定はしてあるでしょうか? auto_incrementの設定がされていない場合、エラーになり追加されないと思われます。

投稿2015/07/06 06:06

KenjiObata

総合スコア440

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問