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

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

ただいまの
回答率

89.10%

PHPのフォーマットからデータベースに保存されません

受付中

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 113

wa_d_a

score 0

前提・実現したいこと

PHPで入力したメールアドレス、ニックネーム、パスワードを保存したいのですが何度やっても保存されていません
MACを使用しており、開発環境はMAMPです。
phpadminを使っていてデータベース名はstudyです。

発生している問題・エラーメッセージ

エラーメッセージは出てこないが、データベースには保存されてい無い

該当のソースコード

<?php

try {
    $db = new PDO('mysql:dbname=study;host=localhost;charset=utf8','root','root');
}catch(PDOException $e) {
    print('DB接続エラー:' . $e->getMessage());
}
?>
<?php
session_start();                          
require('../dbconnect.php');    上のソースコードは違うフォルダに書いています。
?>                  ←のソースコードはフォーマットがあるフォルダです

試したこと

ネットで調べ出てきたことはほとんどやりました

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。。

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

質問への追記・修正、ベストアンサー選択の依頼

  • hayato7

    2020/06/29 21:00

    DB接続の記述しかないようですが、ソースコードは、これだけでしょうか?

    キャンセル

  • wa_d_a

    2020/06/30 20:31

    <?php
    session_start();

    require('../dbconnect.php');

    if(!empty($_POST)){
    if($_POST['name'] === ''){
    $error['name'] = 'blank';
    }
    if($_POST['email'] === ''){
    $error['email'] = 'blank';
    }

    if(strlen($_POST['password']) < 4){
    $error['password'] = 'length';
    }
    if($_POST['password'] === ''){
    $error['password'] = 'blank';
    }
    if(empty($error)){
    $members = $db->prepare('SELECT COUNT(*) AS cnt FROM members WHERE email=?');
    $members->execute(array($_POST['email']));
    if($record['cnt'] > 0){
    $error['email'] = 'duplicate';
    }

    }

    if(empty($error)){
    $_SESSION['join'] = $_POST;
    header('Location: check.php');
    exit();
    }
    }


    if($_REQUEST['action'] == 'rewrite' && isset($_SESSION['join'])){
    $_POST = $_SESSION['join'];
    }


    ?>

    <!DOCTYPE html>
    <html lang="ja">
    <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>会員登録</title>

    <link rel="stylesheet" href="../style.css" />
    </head>
    <body>
    <div id="wrap">
    <div id="head">
    <h1>会員登録</h1>
    </div>

    <div id="content">
    <p>次のフォームに必要事項をご記入ください。</p>
    <form action="" method="post" enctype="multipart/form-data">
    <dl>
    <dt>ニックネーム<span class="required">必須</span></dt>
    <dd>
    <input type="text" name="name" size="35" maxlength="255" value="<?php print(htmlspecialchars
    ($_POST['name'],ENT_QUOTES));?>" />
    <?php if($error['name']=== 'blank'):?>
    <p class="error">*ニックネームを入力してください</p>
    <?php endif;?>
    </dd>
    <dt>メールアドレス<span class="required">必須</span></dt>
    <dd>
    <input type="text" name="email" size="35" maxlength="255" value="<?php print(htmlspecialchars
    ($_POST['email'],ENT_QUOTES));?>" />
    <?php if($error['email']=== 'blank'):?>
    <p class="error">*メールアドレスを入力してください</p>
    <?php endif;?>
    <?php if($error['email'] === 'duplicate'):?>
    <p class="error">*指定されたメールアドレスはすでに使われています</p>
    <?php endif;?>
    <dt>パスワード<span class="required">必須</span></dt>
    <dd>
    <input type="password" name="password" size="10" maxlength="20" value="<?php print(htmlspecialchars
    ($_POST['password'],ENT_QUOTES));?>" />
    <?php if($error['password'] === 'length'):?>
    <p class="error">*パスワードは4文字以上で入力してください</p>
    <?php endif;?>
    <?php if($error['password'] === 'blank'):?>
    <p class="error">*パスワードを入力してください</p>
    <?php endif;?>

    </dd>
    </dl>
    <div><input type="submit" value="入力内容を確認する" /></div>
    </form>
    </div>
    </body>
    </html>

    <?php
    require('dbconnect.php');

    if(!empty($_POST)){
    if($_POST['email'] !== '' && $_POST['password'] !== ''){
    $login = $db->prepare('SELECT * FROM members WHERE email=? AND password=?');
    $login->execute(array(
    $_POST['email'],
    sha1($_POST['password'])
    ));
    $member = $login->fetch();

    if($member){
    $_SESSION['id'] = $member['id'];
    $_SESSION['time'] = time();
    header('Location:index.php');
    exit();
    }else{
    $error['login'] = 'failed';
    }
    }else{
    $error['login'] = 'blank';
    }
    }


    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" type="text/css" href="style.css" />
    <title>ログインする</title>
    </head>

    <body>
    <div id="wrap">
    <div id="head">
    <h1>ログインする</h1>
    </div>
    <div id="content">
    <div id="lead">
    <p>メールアドレスとパスワードを記入してログインしてください。</p>
    <p>入会手続きがまだの方はこちらからどうぞ。</p>
    <p>&raquo;<a href="join/">入会手続きをする</a></p>
    </div>
    <form action="" method="post">
    <dl>
    <dt>メールアドレス</dt>
    <dd>
    <input type="text" name="email" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['email'],
    ENT_QUOTES)); ?>" />
    <?php if($error['login'] === 'blank'):?>
    <p class="error">*メールアドレスとパスワードを入力してください</p>
    <?php endif;?>
    <?php if($error['login'] === 'failed'):?>
      <p class="error">*ログインに失敗しました。正しくご記入ください</p>
    <?php endif;?>
    </dd>
    <dt>パスワード</dt>
    <dd>
    <input type="password" name="password" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['password'],
    ENT_QUOTES)); ?>" />
    </dd>
    <dt>ログイン情報の記録</dt>
    <dd>
    <input id="save" type="checkbox" name="save" value="on">
    <label for="save">次回からは自動的にログインする</label>
    </dd>
    </dl>
    <div>
    <input type="submit" value="ログインする" />
    </div>
    </form>
    </div>
    <div id="foot">
    <p><img src="images/txt_copyright.png" width="136" height="15" alt="(C) H2O Space. MYCOM" /></p>
    </div>
    </div>
    </body>
    </html>

    <?php
    require('dbconnect.php');

    if(!empty($_POST)){
    if($_POST['email'] !== '' && $_POST['password'] !== ''){
    $login = $db->prepare('SELECT * FROM members WHERE email=? AND password=?');
    $login->execute(array(
    $_POST['email'],
    sha1($_POST['password'])
    ));
    $member = $login->fetch();

    if($member){
    $_SESSION['id'] = $member['id'];
    $_SESSION['time'] = time();
    header('Location:index.php');
    exit();
    }else{
    $error['login'] = 'failed';
    }
    }else{
    $error['login'] = 'blank';
    }
    }


    ?>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <link rel="stylesheet" type="text/css" href="style.css" />
    <title>ログインする</title>
    </head>

    <body>
    <div id="wrap">
    <div id="head">
    <h1>ログインする</h1>
    </div>
    <div id="content">
    <div id="lead">
    <p>メールアドレスとパスワードを記入してログインしてください。</p>
    <p>入会手続きがまだの方はこちらからどうぞ。</p>
    <p>&raquo;<a href="join/">入会手続きをする</a></p>
    </div>
    <form action="" method="post">
    <dl>
    <dt>メールアドレス</dt>
    <dd>
    <input type="text" name="email" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['email'],
    ENT_QUOTES)); ?>" />
    <?php if($error['login'] === 'blank'):?>
    <p class="error">*メールアドレスとパスワードを入力してください</p>
    <?php endif;?>
    <?php if($error['login'] === 'failed'):?>
      <p class="error">*ログインに失敗しました。正しくご記入ください</p>
    <?php endif;?>
    </dd>
    <dt>パスワード</dt>
    <dd>
    <input type="password" name="password" size="35" maxlength="255" value="<?php print(htmlspecialchars($_POST['password'],
    ENT_QUOTES)); ?>" />
    </dd>
    <dt>ログイン情報の記録</dt>
    <dd>
    <input id="save" type="checkbox" name="save" value="on">
    <label for="save">次回からは自動的にログインする</label>
    </dd>
    </dl>
    <div>
    <input type="submit" value="ログインする" />
    </div>
    </form>
    </div>
    <div id="foot">
    <p><img src="images/txt_copyright.png" width="136" height="15" alt="(C) H2O Space. MYCOM" /></p>
    </div>
    </div>
    </body>
    </html>

    キャンセル

回答 1

0

エラーモードの設定がされていないのでエラーが表示されていないだけでは?

try {
 $db = new PDO('mysql:dbname=study;host=localhost;charset=utf8','root','root');
 $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}catch(PDOException $e) {
 die($e->getMessage());
}

insert処理自体try中に記載してください

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

  • ただいまの回答率 89.10%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる