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

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

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

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

PHP

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

Q&A

1回答

1387閲覧

phpでmysqlを使用し「登録」ボタンを押してデータの反映をさせたい

chocon

総合スコア14

MySQL

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

PHP

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

0グッド

1クリップ

投稿2021/09/10 23:06

phpで会員登録ボタンを押すとPOSTでデータが送られmysqlにデータが入る様にしたいのですが、何度実行してもmysqlのテーブル(テーブル名:table)に入力データが反映されません。

mysqlには接続確認済です。

ボタンを押しても登録しました、エラーが発生しましたなどの表示も出ません。

アドバイス頂けると幸いです。
宜しくお願い致します

php

1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous"> 8 <link rel="stylesheet" href="style.css"> 9 10 <title>Document</title> 11</head> 12<body> 13<!-- <div class="col-xs-6 col-xs-offset-3"> --> 14<div class="container"> 15<form method="post"> 16 <h1>会員登録フォーム</h1> 17 <div class="form-group"> 18 <input type="text" class="form-control" name="name" placeholder="ユーザー名" required /> 19 </div> 20 <div class="form-group"> 21 <input type="email" class="form-control" name="email" placeholder="メールアドレス" required /> 22 </div> 23 <div class="form-group"> 24 <input type="password" class="form-control" name="pass" placeholder="パスワード" required /> 25 </div> 26 <!-- <button type="submit" class="btn btn-default" name="signup">会員登録する</button> --> 27 <button type="submit" class="btn btn-primary" name="signup">会員登録する</button> 28 <a href="login.php">ログインはこちら</a> 29</form> 30 31</div> 32 33<pre> 34 <?php 35 try{ 36 37 38 $db = new PDO('mysql:dbname=test;host=localhost;charset=utf8','root','root'); 39 40 41 } catch(PDOException $e) { 42 echo 'DB接続エラー:' .$e->getMessage(); 43 } 44 45 46 if(isset($_POST['signup'])) { 47 48 $username = $mysqli->real_escape_string($_POST['name']); 49 $email = $mysqli->real_escape_string($_POST['email']); 50 $password = $mysqli->real_escape_string($_POST['pass']); 51 $password = password_hash($password, PASSWORD_DEFAULT); 52 53 // POSTされた情報をDBに格納する 54 $query = "INSERT INTO table(name,email,pass) VALUES('$username','$email','$password')"; 55 56 if($mysqli->query($query)) { ?> 57 <div class="alert alert-success" role="alert">登録しました</div> 58 <?php } else { ?> 59 <div class="alert alert-danger" role="alert">エラーが発生しました。</div> 60 <?php 61 } 62 } 63 64 65?> 66</pre> 67 68 <!-- Optional JavaScript --> 69 <!-- jQuery first, then Popper.js, then Bootstrap JS --> 70 <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> 71 <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> 72 <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script> 73 </body> 74</html> 75</body> 76</html>

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

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

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

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

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

guest

回答1

0

PDOで接続しておきながらどこにも定義されてない変数$mysqliを使ってるのでエラーが出ないはずがない実装です。エラー表示はonにしてますか?
機能として別のものなのでどちらかに統一したほうが良いです(私は後述の通りPDOのほうです) 

別の問題として、tableMySQLの予約語です。

テーブル作る時にクォーテーション囲ったりしたのでは?
いずれにしても予約語は利用しないのが吉です。
役割に則したテーブル名で作り直してください。

ただ予約語を利用した際は本来はsyntaxエラーが出るはずですが、現在の実装ではそのエラーを感知するようにはなっていません。
mysqli_sql_exception を捕捉するように実装してください。
個人的にはreal_escape_stringを利用するより、bind_paramのほうが良いと思います。

もっと個人的にはPDO利用をおすすめします。
PHPでデータベースに接続するときのまとめ

いずれにしても接続時のみエラーハンドリングはあまり意味がありません。
外部からの入力を受け付けるSQL実行時こそエラーが起きやすいです。

投稿2021/09/10 23:20

編集2021/09/11 02:22
m.ts10806

総合スコア80875

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

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

javahack

2021/09/11 00:51

DB接続はPDO使っていて、SQL発行はmysqliだったりとチグハグなので、あちこちのサンプルコードを適当に拾って無理矢理つなぎ合わせたようですね。
m.ts10806

2021/09/11 01:14

むしろ、そこですね。 ソース内では$mysqliが定義されずに使われてるのでエラーが出ないはずがない。 後ほどその旨も追記しておきます。
chocon

2021/09/11 06:59

ありがとうございます。 m.ts10806様 詳しくURLも添付頂きありがとうございます。 しっかり読んで勉強させて頂きます! javahack様 ありがとうございます。 初心者すぎていろいろググりながらしていますが、ご指摘頂いたことをもとにもう一度自分で復習してみます。 DB接続をPDOを使用した場合sqlの発行はどの様に書くのが良いのかも現時点でわからないくらいなので・・・ ご指摘ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問