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

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

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

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MySQL

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

PHP

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

Q&A

1回答

1567閲覧

PHPで掲示板を作成した際のチェックプログラムについて

MamoP

総合スコア6

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

MySQL

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

PHP

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

0グッド

0クリップ

投稿2018/08/27 08:00

前提・実現したいこと

PHPで一言コメントができる掲示板を作成しています。
投稿内容が空白の時に「内容を入力してください」と出るチェックプログラムをつくりたいです。

投稿内容をチェックする機能を実装中に以下のエラーが発生しました。

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

・投稿内容が空白でもMySQLに投稿されてしまう。

該当のソースコード

PHP

1<!doctype html> 2<html lang="ja"> 3<head> 4<meta charset="utf-8"> 5<h2>掲示板</h2> 6</head> 7<body> 8 <form action="post.php" method="post"> 9 <dt><label for="message">内容</label></dt> 10 <dd><textarea id="message" name="memo" cols="50" rows="8"> 11 </textarea> 12</dd> 13 <button type="submit">投稿する</button> 14</form> 15</body> 16 17<?php 18// connecting to MySQL 19try { 20 $db = new PDO('mysql:dbname=my_bbs_portfolio;host=127.0.0.1;charset=utf8', 21 'root',''); 22} catch (PDOException $e) { 23 echo 'DB接続エラー: ' . $e->getMessage(); 24} 25$memos = $db->query('SELECT * FROM memo_test ORDER BY id DESC'); 26?> 27 28<article> 29<?php // display memo ?> 30<?php while ( $memo = $memos->fetch()): ?> 31 <p><?php print($memo['memo']); ?></p> 32 <time><?php print($memo['modified_time']); ?></time> 33 <hr> 34<?php endwhile; ?> 35</article> 36</html>

PHP

1<!doctype html> 2<html lang="ja"> 3 4<meta charset="utf-8"> 5<h2>Practice</h2> 6<main> 7 <a href="input.php">戻る</a> 8<?php 9try { 10 $db = new PDO('mysql:dbname=my_bbs_portfolio;host=127.0.0.1;charset=utf8', 11 'root',''); 12 } catch (PDOException $e) { 13 echo 'DB接続エラー: ' . $e->getMessage(); 14} 15$statement = $db->prepare('INSERT INTO memo_test SET memo=?, 16 modified_time=NOW()'); 17$statement->execute(array($_POST['memo'])); 18echo '投稿が完了しました'; 19?> 20</main> 21</html>

試したこと

・if(empty($_POST))を使って条件分岐をさせた。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

投稿データが有るかどうか判定。
投稿データが有る場合、
内容があるかどうか判定。
内容がない場合は、
エラーメッセージを登録する。

エラーメッセージがなくて、投稿データが有る場合、
データベースに登録する。

みたいな流れになるのではないかと。
エラーメッセージを管理する、例えば投稿データのチェックを行う前に
$err_msgs = [];
なんていうエラーメッセージ管理用配列変数を用意して、
内容がないなどのソフトなエラーを例えば
$err_msgs[] = '内容が空欄です。記入してください。';
みたいにして管理すれば、
一連のチェック処理が終わったときに
count($err_msgs)が0のままならエラーなしとみなせるんではないかと。
0よりも大きければ、例えば

foreach ($err_msgs as $msg) { echo $msg . '<br />' . PHP_EOL; }

みたいにすればエラーメッセージも表示できますし。
(投稿フォームの入力欄の近くにエラーメッセージを表示しないときは
また違った工夫をこらさないといけないでしょうけども。)

投稿2018/08/27 08:17

編集2018/08/27 08:22
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

MamoP

2018/08/28 06:05

ありがとうございます。 上段のPHPに <?php $err_msg=[]; if (!empty($_POST)){ if ($_POST['memo']===''){ $err_msg[] = '内容を入力してください'; }if(count($err_msg)>0){ foreach ($err_msg as $msg) { echo $msg. '<br />' . PHP_EOL; } } } ?> と追加しましたが、空欄のままでも投稿できてしまいます。 どのようにしたらいいですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問