PHPで簡易掲示板を作成中。NGワードだけをエラーを表示したいが、全ての入力でエラーメッセージを表示してしまう。
PHP初心者です。
発生している問題・エラーメッセージ
実装したい機能 $contentsにNGワードを含む文字列が入力されたときだけ'NGワードが入力されています'と表示したい
現状、どんな文字列を入力しても、'NGワードが入力されています'と表示されてしまう
('空白でもNGワードが入力されています'となります)
該当のソースコード
PHP
1$errors = []; 2if($_POST){ 3 $id = null; 4 $name = $_POST["name"]; 5 $contents = $_POST["contents"]; 6 if(!$name){ 7 $errors[] .= "名前を入力してください"; 8 } 9 if(!$contents){ 10 $errors[] .= "投稿内容を入力してください"; 11 } 12 $ng_word = array('死ね','アホ','殺す','バカ'); 13 if($contents=$ng_word){ 14 $errors[] .="NGワードが入力されています"; 15 } 16 if(!$errors){ 17 date_default_timezone_set('Asia/Tokyo'); 18 $created_at = date("Y-m-d H:i:s"); 19 //DB接続情報を設定します。 20 $pdo = new PDO( 21 "mysql:dbname=sample;host=localhost","root","",array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`") 22 ); 23 //ここで「DB接続NG」だった場合、接続情報に誤りがあります。 24 if ($pdo) { 25 echo "DB接続OK"; 26 } else { 27 echo "DB接続NG"; 28 } 29 //SQLを実行。 30 $regist = $pdo->prepare("INSERT INTO post(id, name, contents, created_at) VALUES (:id,:name,:contents,:created_at)"); 31 $regist->bindParam(":id", $id); 32 $regist->bindParam(":name", $name); 33 $regist->bindParam(":contents", $contents); 34 $regist->bindParam(":created_at", $created_at); 35 $regist->execute(); 36 //ここで「登録失敗」だった場合、SQL文に誤りがあります。 37 if ($regist) { 38 echo "登録成功"; 39 } else { 40 echo "登録失敗"; 41 } 42 } 43} 44//DB接続情報を設定します。 45$pdo = new PDO( 46 "mysql:dbname=sample;host=localhost","root","",array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET CHARACTER SET `utf8`") 47); 48//ここで「DB接続NG」だった場合、接続情報に誤りがあります。 49if ($pdo) { 50 echo "DB接続OK"; 51} else { 52 echo "DB接続NG"; 53} 54//SQLを実行。 55$regist = $pdo->prepare("SELECT * FROM post order by created_at DESC limit 20"); 56$regist->execute(); 57//ここで「登録失敗」だった場合、SQL文に誤りがあります。 58if ($regist) { 59 echo "登録成功"; 60} else { 61 echo "登録失敗"; 62} 63?> 64 65<!DOCTYPE html> 66<meta charset="UTF-8"> 67<title>掲示板サンプル</title> 68<h1>掲示板サンプル</h1> 69<section> 70 <h2>新規投稿</h2> 71 <div id="error"><?php foreach($errors as $error){echo $error.'<br>';}?></div> 72 <form action="index.php" method="post"> 73 名前 : <input type="text" name="name" value=""><br> 74 投稿内容: <input type="text" name="contents" value=""><br> 75 <button type="submit">投稿</button> 76 <a href="registration.php"> 77 会員登録がまだの方はこちら 78 </a> 79 </form> 80</section> 81 82<section> 83 <h2>投稿内容一覧</h2> 84 <?php foreach($regist as $loop):?> 85 <div>No:<?php echo $loop['id']?></div> 86 <div>IPアドレス: <?php echo $_SERVER["REMOTE_ADDR"] ; ?></div> 87 <div>名前:<?php echo $loop['name']?></div> 88 <div>投稿内容:<?php echo $loop['contents']?></div> 89 <div>投稿時間:<?php echo $loop['created_at']?></div> 90 <div>------------------------------------------</div> 91 <?php endforeach;?> 92 93</section> 94### データベースの画像↓
試したこと
NGワードをはじくコードのみ削除して実行すると、投稿内容は表示されました。(もちろんNGワードでも表示されてしまいます。)
キャッシュを削除し、投稿しても、繰り返し'NGワードが入力されています'となります。
補足情報(FW/ツールのバージョンなど)
WindowsにLAMP仮想環境を構築しています。
PHP 7
回答1件
あなたの回答
tips
プレビュー