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

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

ただいまの
回答率

88.58%

登録フォームに内容を記述してもDBに反映されない

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,286

rura

score 62

前提・実現したいこと

こんちわ。システム開発の勉強を独学でしてます。
現在、登録内容を記述してボタンを押すとDBに反映されるように練習してます。
しかし、下記内容で困ってます。
この状況を打破するにはどうしたらよいでしょうか。
お詳しい方よろしくお願いします。

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

内容をすべて記述してもDBに登録内容が反映されない。

該当のソースコード

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST'){
  $fname =$_POST['fname'];
  $lname =$_POST['lname'];
  $email =$_POST['email'];
  $gender =$_POST['gender'];
  $age =$_POST['age'];
  $coments =$_POST['coments'];
  $password =$_POST['password'];
  if (!empty($fname) && !empty($lname) &&!empty($email) && !empty($gender) && !empty($age) && !empty($coments) &&!empty($password)){

    include ('connection.php');

    mysqli_query($dbc,"INSERT INTO users(id, first_name, last_name, email, gender, age, comments, registration_data, password)
     VALUES ('$fname','$lname','$email','$gender','$age','$coments','$password')");
    $registered = mysqli_affected_rows($dbc);

  echo "<caption>".$registered."件登録されました</caption>";

  }else {
    echo "<p style='color:red';>ERROR:フォームがすべて入力されてません</p>";
  }
}else {
  echo "<h3>下記内容をご記入とご確認の上で会員登録を押してください。</h3>";
}
 ?>

     <form class="" action="userform.php" method="post">
      <p>Name;<input type="text" name="fname" size="20" maxlength="40" value=""></p>
      <p>Name;<input type="text" name="lname" size="20" maxlength="40" value=""></p>
      <p>Email;<input type="text" name="email" size="20" maxlength="60" value=""></p>
      <p>Gender;<input type="radio" name="gender" value="M">Male
      <input type="radio" name="gender" value="F">FeMale</p>
      <p>Age;<select name="age">
              <option value="0-29">Under 30</option>
              <option value="30-60">Bitween 30 and 60</option>
              <option value="60">Over 60</option>
      </select></p>
      <p>Coments;<textarea name="coments" rows="3" cols="40"></textarea></p>
      <p>password;<input type="password" name="password" size="20" maxlength="60" value=""></p>
      <p><input type="submit" name="submit" value="submit"></p>
     </form>

試したこと

課題に対してアプローチしたことを記載してください

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

php,ATOM,phpmyAdmin

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+1

mysqli_query()の実行結果を受け取る変数を記述してない、
そもそもDB周りのエラー発生時の対策をしていない、
非常に危なっかしいプログラムだと言わざるを得ません。
PDO接続なら例外スローでエラートラップしやすい気もしますが、
mysqliを使うのであれば一つ一つ実行のたびに結果を変数に取得するように義務付け、
エラーの種類を特定しやすいようにするべきでしょう。

PHP: mysqli::query - Manual
http://php.net/manual/ja/mysqli.query.php

失敗していればFALSEを返してくるので、必ずチェックする。

また、INSERT INTO文で、idに該当する箇所に'$fname'を突っ込んでいたりするので、
たぶん間違いですよね。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

+1

以前の質問と同様の原因と思われます。

INSERT文で指定しているカラムと値の数が一致していません。

カラムとして「id」、「registration_data」を指定していますので、
この項目に対応する値を設定する必要があります。

後、掲示されたコードでは、
SQL実行時エラー(INSERT文自体に問題がある)場合でもそのまま処理を継続してしまっているので、
mysqli_query関数からクエリ実行結果を取得し、
エラー時にすぐに分かるようにコーディングする方が良いかと思われます。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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