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

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

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

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

PHP

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

HTML

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

Q&A

解決済

1回答

3352閲覧

textareaに入力されたものをデータベースに登録する

Masa_1321412

総合スコア12

MySQL

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

PHP

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

HTML

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

0グッド

0クリップ

投稿2021/12/08 06:41

前提・実現したいこと

テキストエリアに入力された内容をデータベースに登録するシステムを作ろうとしたところ以下のようなエラーが出てしまいました。

入力画面
イメージ説明

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

エラーメッセージを検索してみるとおそらく型が違うものを入れようとしているということだと思うのですがどのように直せばいいかわかりません

イメージ説明

該当のソースコード

<html> <head> <meta charset="UTF-8"> <title>メッセージ</title> </head> <body> <h3>メッセージ</h3> <br> <?php session_start(); try { $dsn = 'mysql:dbname=map;host=localhost'; $user = 'root'; $password = ''; $dbh = new PDO ( $dsn, $user, $password ); // データベースに接続 $dbh->query ( 'SET NAMES utf8' ); // 文字コードのための設定 } catch ( Exception $e ) { echo 'サーバが停止しておりますので暫くお待ちください。'; exit (); } if(isset($_POST["send"])){ printf("sender = %s\nsubject = %s\ntext = %s",$_SESSION["name"],$_POST["title"],$_POST["content"]); $sender = htmlspecialchars($_SESSION["name"]); $subject = htmlspecialchars($_POST['title']); $text = htmlspecialchars($_POST['content'], ENT_QUOTES, 'UTF-8'); $data = []; try{ $sql = "INSERT INTO mail(sender,subject,text) VALUES(?,?,?)"; $stmt = $dbh->prepare ( $sql ); $data = $sender; $data = $subject; $data = $text; $stmt->execute($data); }catch(PDOException $e){ die($e->getMessage()); } } $dbh = null; // データベースから切断 ?> <form method="post" action=""> <div style="display:table-cell"> <p>件名</p><input type="text" name="title"> <p>メッセージ</p><textarea name="content" cols="60" rows="10"></textarea> </div> </div> <p><input type="submit" name="send" value="送信"></p> </form> <input type="button" value="戻る" onClick="history.back()"> </body> </html>

試したこと

データベースのtextのタイプをvarcharに変更してみたりしたのですが駄目でした
以下のサイトを参考に
$text = htmlspecialchars($_POST['content'], ENT_QUOTES, 'UTF-8');
としてみたのですが駄目でした
フォームデータをデータベースに登録

補足情報(FW/ツールのバージョンなど)

データベースの構造は以下のようになります
イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

$data = $sender;

$data = $subject; $data = $text;

単に=なので上書きし続けています。$dataをデバッグで確認してみてください。
エラーにもexecuteの内容が出力されてますよね。想定どおりですか?

executeにパラメータ突っ込むなら例えばこんな感じになるかと。

php

1$data=[]; 2$data[] = $sender; 3$data[] = $subject; 4$data[] = $text;

投稿2021/12/08 07:08

編集2021/12/08 07:09
m.ts10806

総合スコア80875

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

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

Masa_1321412

2021/12/08 07:20

ありがとうございます 完全に見落としていました
m.ts10806

2021/12/08 07:22

捕捉したExceptionを出力してないのは勿体ないと思います(俗に「例外を握りつぶす」と指摘される行為です)
退会済みユーザー

退会済みユーザー

2021/12/09 00:26

個人的には、DSN文字列にcharset指定を持たせたいことと、htmlspecialchars()で加工したあとの文字列をデータベース保存するのは裂けたいことと、new PDOするときにオプションで例外生成するよう明示したいことも添えたい。あと、トランザクション処理。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問