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

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

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

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

Q&A

解決済

3回答

572閲覧

PHP+MySQLでデータ入力プログラムを作ったが,その文字列が入らない。

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

0グッド

1クリップ

投稿2019/04/21 13:08

前提・実現したいこと

PHPでデータ入力プログラムを作りましたが,その文字列が入リません。

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

入力したデータが表示されない

該当のソースコード

index.php

php

1<!doctype HTML> 2<html> 3 <head> 4 <title="SEP:Sharedu Examination Programme"> 5 </head> 6 <body> 7 <form action="sharedu.php" method="post"> 8 大問のタイトル 9 <div><input type="text" name="dai"></div> 10 問題の文章 11 <div><textarea name="tx"></textarea></div> 12 小問 13 <div><textarea name="s1"></textarea></div> 14 以上でよろしければ,送信ボタンを押下してください。 15 <br> 16 <input type="submit" value="送信"> 17 </form> 18 </body> 19</html>

sharedu.php

php

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="uft-8"> 5 <title>試験画面</title> 6</head> 7<body> 8 <?php 9 $dai=htmlspecialchars($_post["dai"], ENT_QUOTES); 10 $t01=htmlspecialchars($_post["tx"], ENT_QUOTES); 11 $s1=htmlspecialchars($_post["s1"], ENT_QUOTES); 12 $db=new PDO("localhost;dbname=db","root","root"); 13 $db->query("INSERT INTO tb ('no','dai','tx','s1') VALUES (NULL,'$dai','$t01','$s1')"); 14 print "書き込みました。"; 15 print "<p><a href='index.php'>一覧表示</a></p>"; 16 ?> 17 </body> 18</html> 19

試したこと

VALUESの値を指定した→データは入った(はず)

補足情報

使用環境 MacBook Pro2015(Retina)・MAMP(無償版)
DBの状態(PHP MyAdmin)
https://imgur.com/a/8PHknNf

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

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

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

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

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

javahack

2019/04/21 17:20 編集

こちらの質問と同じ方でしょうか? https://teratail.com/questions/183102 SQLが修正前のものなのでそのままではINSERTに失敗すると思います。 もしSQL修正して動作確認されているようでしたら質問を編集して正しいSQLに修正した方が良いと思います。
guest

回答3

0

ベストアンサー

$_post → $_POST

変数は大文字小文字大別します。始めのうちはPHPマニュアルからコピペするくらいが良いと思います。

あとエラー表示はONに設定しておいてください。

投稿2019/04/21 13:29

m.ts10806

総合スコア80765

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

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

0

一覧表示ロジックが実装されていないからだと思います。

余談ですが、htmlspecialchars はSQL文のエスケープに使うための関数ではありませんよ。

投稿2019/04/21 13:28

iwamot

総合スコア1154

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

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

0

phpのデバッグ方法の再確認をしましょう。
PHPのエラー表示設定について - Qiita
phpコード冒頭に

php

1ini_set('display_errors', "On"); 2ini_set('error_reporting', E_ALL);

などと挿入して、何らかのエラーが発生したときにwebブラウザに表示できるようにします。

mts10806さんの回答にもありますが、
PHP: $_POST - Manual
$_POST['dai']などとPOSTは大文字で書きます。

iwamotさんの回答にもありますが、
PHP: htmlspecialchars - Manual
htmlspecialchars()はHTML出力するさいに文字化けしないように加工するもので、
データベース保存用に加工するのは間違いです。

$db=new PDO("localhost;dbname=db","root","root");はいろいろ間違ってます。
mysqlに接続するなら
PHP: PDO_MYSQL DSN - Manual
1つ目の引数の冒頭に"mysql:"を付ける必要があります。
他に、host、dbname、port、charsetなどいろいろ指定が必要かもしれません。
$dsn = 'mysql:dbname=test;host=localhost;charset=utf8mb4';とか。
参考:PHPでデータベースに接続するときのまとめ - Qiita

$db->query("INSERT INTO tb ('no','dai','tx','s1') VALUES (NULL,'$dai','$t01','$s1')");
こんな、$_POSTから受信したデータを直接SQL文に文字列連結するのは大変危険なので、
PHP: PDOStatement::bindParam - Manual
bindParam()を駆使して変数の値を安全にクエリーに紐づけます。
こんな感じ?

php

1$stmt = $db->prepare("INSERT INTO tb ('no','dai','tx','s1') VALUES (NULL,:dai,:tx,:s1)"); 2$stmt->bindParam(':dai', $dai, PDO::PARAM_STR); 3$stmt->bindParam(':tx', $t01, PDO::PARAM_STR); 4$stmt->bindParam(':s1', $s1, PDO::PARAM_STR); 5$stmt->execute();

その他、大前提として、
データベース接続はtry~catchブロックを駆使しつつ、
接続時から例外発生を捉えられるよう接続方法を工夫します。
理想的な形は
基本コーディング
にあるので真似してください。

データベースへの保存が成功しているかどうか、
しっかりデバッグしてください。
phpMyAdminほかデータベースを直接覗ける仕組みも一緒に組み込んでおくと楽です。
(PostgreSQLだとpgAdmin4とか。Windows上ならA5:SQL mk-IIとか。macosは詳しくないので調べて。)
組み込まれていない場合は、
index.phpとかなにかのphpでデータベースから読み出して表示する処理を設ければよいかと。
(直接の回答としては、iwamotさんの言う、データベースから読み出して表示する処理が設けられていない、となります。)

投稿2019/04/22 02:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問