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

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

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

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

1554閲覧

ブラウザで入力した内容をデータベースに登録したい

kotouharuto

総合スコア38

MySQL

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

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/04/01 00:54

編集2020/04/01 02:15
コード ```現在PHPでアンケートの入力フォームを作っているのですが、フォームで入力した内容をPHPadminで受け取って、リストに追加していきたいのですが、ブラウザでphpファイルが表示されません。(HTTP ERROR 500) ■状況  - phpmyadminでphpkisoというディレクトリの中にanketoというファイルを作った - リスト技術書通りにphpファイルに入力したところ500のERRORが出てしまった(技術書で書いてあった内容は、   $dsn = 'mysql:dbname=phpkiso;host=localhost'; 〜 $dbh->query('SET NAMES utf8'); この間と、$sql = 'INSERT INTO anketo (nickname, email, message) VALUES ("'.$nickname.' "," '.$email.' "," '.$message.' ")'; 〜 $dbh = null;です) ■試したこと - phpファイルでのport 変更 =>効果なし - 文法チェック - ミスチェック ■環境 テキストエディタ:visual stadio code ブラウザ:chrome PHP:7.4.2 mysql/mariadb 環境構築:MAMP(Free版) ```html <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <title>アンケート</title> </head> <body> <form action="index.php" method="POST"> <p>名前を入力してください</p> <input type="text" name="nickname" style="width:100px"><br> <p>メールアドレスを入力してください</p> <input type="text" name="email" style="width:200px"><br> <p>メッセージを入力してください</p> <textarea name="message" cols="2px" rows="10px" style="width: 300px;"></textarea><br> <input type="radio" name="sex" value="men"> <label for="men">MEN</label> <input type="radio" name="sex" value="woman"> <label for="woman">WOMAN</label><br><br> <input type="submit" value="送信"> </form> </body> </html>

php

1<?php 2$dsn = 'mysql:dbname=phpkiso;host=localhost'; 3$user = 'root'; 4$password = ''; 5$dbh = new PDO($dsn, $user, $password); 6$dbh->query('SET NAMES utf8'); 7$nickname = htmlspecialchars($nickname); 8$email = htmlspecialchars($email); 9$message = htmlspecialchars($message); 10 11print 'ARIGATO!!'; 12print '<br>'; 13print '<br>'; 14print 'あなたのメールアドレスにメールを送信しました!'; 15 16$mail_sub = 'アンケートを受け取りました'; 17$mail_body = $nickname."様へ\nアンケートありがとうございました。"; 18$mail_body = html_entity_decode($mail_body,ENT_QUOTES, "UTF-8"); 19$mail_head = 'Form:xxx@xxx.co.jp'; 20mb_language('Japanese'); 21mb_internal_encoding("UTF-8"); 22mb_send_mail($mail, $mail_sub, $mail_body, $mail_head); 23 24$sql = 'INSERT INTO anketo (nickname, email, message) VALUES ("'.$nickname.' "," '.$email.' "," '.$message.' ")'; 25$stmt = $dbh->prepare($sql); 26$stmt->execute(); 27 28$dbh = null; 29 30?> 31

こんな感じです。
少々わかりづらいのですが、もしよろしければご回答よろしくお願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/04/01 02:01

phpMyAdminのことだろうと察しますが、mysql/mariadbというのがデータベース本体であって、phpMyAdminはそれらデータベースの管理用ツールでしかなくデータを蓄えたり集計する機能の本体ではありません。用語は正しく。
kotouharuto

2020/04/01 02:10

ありがとうございます。 そうだったんですね! 直ちに修正します。
guest

回答1

0

ベストアンサー

よくない事例の継ぎ接ぎ感マシマシにみえますね。

いくつか間違っているところがあるので、指摘を加えていきます。
お時間があるときにでも、正しい作法がまとめられているドキュメントをご一読ください:

PHPでデータベースに接続するときのまとめ - Qiita

1)データベース接続時のDSN文字列の中でエンコーディングを指定するとよい。
SET NAMES utf8; するやり方もあるけど、DSN文字列に組み込んじゃったほうがコードの行数が減るよ。

2)htmlspecialchars()はあくまでHTML出力直前に使って、データベース保存用データには使わない。
理由については:
「何故htmlspecialcharsを通すのか?」を一言でどうぞ - Qiita

3)コードの中盤で突然出てくるmb_language()やmb_internal_encoding()は悪手。
php.iniで予め設定しておけば不要だし、
百歩譲ってphpコード上で定義するとしてもコードの冒頭に置くべき。

4)SQL文字列を変数の連結で作っているのがサイアク。《とっても重要》
プリペアドステートメントの仕組みを使って、安全にSQL文字列に組み込むべきです。

php

1$sql = <<<EOT 2INSERT INTO anketo (nickname, email, message) VALUES (:nickname, :email, :message) 3EOT; 4$stmt = $dbh->prepare($sql); 5$stmt->bindValue(':nickname', $nickname, PDO::PARAM_STR); 6$stmt->bindValue(':email', $email, PDO::PARAM_STR); 7$stmt->bindValue(':message', $message, PDO::PARAM_STR); 8$stmt->execute();

ですが、もしもVALUES句に与えられる3つのパラメータがカラだったりすると
エラーが生じるため、
もしも$nickname$email$messageがPOST受信したものであれば、
isset()で存在確認して存在しなければエラー表示して拒否、
存在していても、なんらかの不適切な文字列を含むならその旨エラー表示して拒否、
など丁寧に検証するべきかと。

参考:
ヒアドキュメント
PHP: PDOStatement::bindValue - Manual

5)なるべく、データベース処理全体をtry~catchするようにしてね。
せっかくPDO接続を使うのであれば。

6)POST受信したデータ、受け取ってないよね?《とっても重要》

php

1$nickname = ''; 2if (isset($_POST['nickname'])) { 3 $nickname = $_POST['nickname']; 4}

みたいなのをコードの冒頭に置かないと、
誰も$nickname$email$messageに値を詰めてくれません。

投稿2020/04/01 02:22

編集2020/04/01 02:42
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

kotouharuto

2020/04/01 03:58

ご回答ありがとうございます。 少し時間がかかりそうですが、辛抱強くやってみます! まだデータベースを始めたばかりだったので、質問の仕方に問題点が多々あったと思いますが、ご丁寧にありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問