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

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

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

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

PHP

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

Q&A

1回答

915閲覧

会員登録フォームでデータベースに書き込む処理を実装したいです。

tomoko100

総合スコア4

MySQL

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

PHP

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

0グッド

1クリップ

投稿2021/05/16 05:04

現在、会員登録機能を実装しようとしています。
登録完了を意味する<send>を押すと同時にデータベースに書き込める仕組みにしたいのですが、
上手く行きません。改善点をお教えいただければと思います。
ぜひ皆様のお知恵をお貸し頂きたく存じます。

HTML

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset ="utf-8"> 5 <title>お問い合わせフォーム</title> 6 <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-giJF6kkoqNQ00vy+HMDP7azOuL0xtbfIcaT9wjKHr8RbDVddVHyTfAAsrekwKmP1" crossorigin="anonymous"> 7 <link rel="stylesheet" href="TomoTomo.css"> 8 9</head> 10<body > 11<?php if($mode == "input"){ ?> 12 **<!--フォーム入力画面-->** 13 <form action ="form.php" method="post" class="CenterFrame"> 14 15 <dt><label for="username">お名前(必須)</label></dt> 16 <dd><input type="text" name="username" id="username" value="<?php echo $_SESSION['username'] ?>" class="form-control"> 17 </dd> 18 19 <dt>年齢</dt> 20 <select name="age" class="form-select"> 21<option value="">年齢を選択してください</option> 22<option value="1">1</option> 23</select>歳 24 25 <dt><label for="job">職業(必須)</label></dt> 26 <dd><input type="text" name="job" id="job" value="<?php echo $_SESSION['job'] ?>" class="form-control"> 27 </dd> 28 29 30 <dt><label for="email">メールアドレス</label></dt> 31 <dd><input type="email" name="email" id="email" value="<?php echo $_SESSION['email'] ?>" class="form-control"></dd> 32 33 <dt><label for="password">パスワード(設定)</label></dt> 34 <input type="password"name="password" size="10" minlength="8" maxlength="12" value="<?php echo $_SESSION['password'] ?>" class="form-control"> 35<p>(本サービスの規約を読んでください)</p> 36<div class="kousin"> 37<p><input type="submit" name="confirm" value="確認" class="btn btn-primary btn-lg"></p> 38</form> 39 40<!--確認画面--> 41<?php }elseif ($mode == "confirm"){ ?> 42<form action ="form.php" method="post"> 43<input type="hidden" name="token" value="<?php echo $_SESSION['token']; ?>"> 44 名前 <?php echo $_SESSION["username"] ?><br> 45 年齢<?php echo $_SESSION["age"]?><br> 46 職業<?php echo $_SESSION["job"]?><br> 47 メールアドレス<?php echo $_SESSION["email"]?><br> 48 パスワード<?php echo $_SESSION["password"]?><br> 49 50<input type="submit" name="back" value="戻る" class="btn btn-primary btn-lg" /> 51<input type="submit" name="send" value="送信" class="btn btn-primary btn-lg"/> 52</form> 53

PHP

1<?php 2session_start(); 3if(isset($_POST["send"])){ 4 5 6$dbs ="mysql:host=mysql.sakura.ne.jp;dbname=***;charset=utf8"; 7$user="****"; 8$pass="****"; 9 10try{ 11 $db= new PDO($dbs,$user,$pass); 12 $sql ="insert into tomoko(user_email,user_password) values(?,?)"; 13 $stmt = $db->prepare($sql); 14 $stmt->execute(array($_SESSION["email"],$_SESSION["password"])); 15 $stmt=null; 16 $db=null; 17 18 header('location:index.html'); 19 exit; 20 21 }catch(PDOException $e){ 22 echo $e->getMessage(); 23 exit; 24 } 25 } 26 27?>

フォーム入力の記述とそれを受け取り最終的に入力内容を確定させる確認画面の記述PDOの記述を掲載させて頂きました。

ぜひご教示頂ければ幸いです。
よろしくお願いいたします。

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

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

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

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

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

tomoko100

2021/05/16 06:39

失礼致しました。 確認画面で送信ボタンを押したときにデータベースにEmailとパスワードを書き込めるように記述したつもりなのですが、データベースに書き込まれません。 改善点をご教示頂きたいです。 宜しくお願い致します。
AbeTakashi

2021/05/16 11:34

上手くいいかないときはまずはログを見るのが鉄則です。とりいそぎWEBサーバのエラーログを確認してください(おそらくそこにわりと具体的な原因が書いてあるはずです。そしてこれがm.ts10806さんが書いてくれている「具体的に起きている現象」の一つです)。ログを見ても意味が分からなければまずは、ログの内容でググって調べてみてください。それでも分からなければ、そのログの情報も質問文に追加してください。現状の質問文だけの情報で第三者がこの原因をつかむにはエスパー能力が必要ですので、このままでは残念ですが回答が出てくるのは期待薄です。
guest

回答1

0

断片的なコードしか提示されてないので、足りない部分をテキトーに補って動かしてみましたが、ちゃんとDBへデータを登録できました。 なので、コード自体には、(大筋では)問題ないみたいです。

確認画面を表示するところまでは期待通りに動いているとのことなので、
まずは、PDOnewする部分を以下のように変えてみてください。

php

1$db= new PDO($dbs, $user, $pass, 2 array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION));

これにより、何かDB関連のエラーが起きたときは例外がthrowされるようになるので、問題を分析しやすくなります。

あと、以下の点にも注意してください。

  • $_SESSIONに期待通りの値が入ってるか? (確認画面でsession_start()を呼び忘れてないか?)
  • DB接続情報(ホスト名、DB名、ユーザ名、パスワード)は間違ってないか?
  • テーブルは作成済みか?
  • テーブルのカラム名は間違ってないか?

それと、正常系の処理の最後でindex.htmlへリダイレクトしてしまうので、もしブラウザに警告メッセージとかが出てたとしても気づけない危険があります。うまく動くようになるまでは、一時的にheader()の行をコメントアウトしておいた方が良いかもしれません。

投稿2021/05/17 02:40

gpsoft

総合スコア1323

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

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

tomoko100

2021/05/17 14:01

丁寧なご説明ありがとうございます。 教えて頂いたコードを入れたことにより、DBに接続することはできました。 しかし、どうしてかカラムにはNULLが入ってしまいます。 これは$_SESSION()に期待通りの値が入っていないからなのでしょうか。
gpsoft

2021/05/17 14:56

その可能性は、ありますね。 execute()する前に、var_export($_SESSION); exit; を実行してみてください。画面に、$_SESSIONの内容が表示されると思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問