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

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

ただいまの
回答率

90.50%

  • PHP

    24082questions

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

  • MySQL

    7005questions

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

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

受付中

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 15K+

hirotto57

score 50

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>
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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;
        }
こんな感じで接続エラーの確認してみてください。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • PHP

    24082questions

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

  • MySQL

    7005questions

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