質問: ### 前提・実現したいこと PHPでデータ入力プログラムを作りましたが,その文字列が入リません。 ### 発生している問題・エラーメッセージ 入力したデータが表示されない ### 該当のソースコード index.php ``` 大問のタイトル 問題の文章 小問 以上でよろしければ,送信ボタンを押下してください。 ``` sharedu.php ``` 試験画面 query("INSERT INTO tb ('no','dai','tx','s1') VALUES (NULL,'$dai','$t01','$s1')"); print "書き込みました。"; print "一覧表示"; ?> ``` ### 試したこと VALUESの値を指定した→データは入った(はず) ### 補足情報 使用環境 MacBook Pro2015(Retina)・MAMP(無償版) DBの状態(PHP MyAdmin) https://imgur.com/a/8PHknNf
回答: phpのデバッグ方法の再確認をしましょう。 PHPのエラー表示設定について - Qiita phpコード冒頭に ``` ini_set('display_errors', "On"); ini_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()を駆使して変数の値を安全にクエリーに紐づけます。 こんな感じ? ``` $stmt = $db->prepare("INSERT INTO tb ('no','dai','tx','s1') VALUES (NULL,:dai,:tx,:s1)"); $stmt->bindParam(':dai', $dai, PDO::PARAM_STR); $stmt->bindParam(':tx', $t01, PDO::PARAM_STR); $stmt->bindParam(':s1', $s1, PDO::PARAM_STR); $stmt->execute(); ``` その他、大前提として、 データベース接続はtry~catchブロックを駆使しつつ、 接続時から例外発生を捉えられるよう接続方法を工夫します。 理想的な形は 基本コーディング にあるので真似してください。 データベースへの保存が成功しているかどうか、 しっかりデバッグしてください。 phpMyAdminほかデータベースを直接覗ける仕組みも一緒に組み込んでおくと楽です。 (PostgreSQLだとpgAdmin4とか。Windows上ならA5:SQL mk-IIとか。macosは詳しくないので調べて。) 組み込まれていない場合は、 index.phpとかなにかのphpでデータベースから読み出して表示する処理を設ければよいかと。 (直接の回答としては、iwamotさんの言う、データベースから読み出して表示する処理が設けられていない、となります。)