###前提・実現したいこと
phpで一言掲示板を作成しています。
以下が要件です
1,利用者が名前とコメントを入力し、発言できる。
2,利用者の過去の発言内容をテキストファイルで管理する。
全ての利用者の過去の発言内容を一覧で表示する。一覧には「名前」「コメント」「発言日時」の3つを1行ずつ表示する。
3,利用者の名前は最大20文字以内まで発言できる。もし20文字より多くの文字を入力して発言した場合はエラーメッセージを表示し、発言できないようにする。
4,利用者のコメントは最大100文字以内まで発言できる。もし100文字より多くの文字を入力して発言した場合はエラーメッセージを表示し、発言できないようにする。
5,利用者の名前とコメントは必ず文字が入力される。もし名前あるいはコメントが未入力で発言した場合はエラーメッセージを表示し、発言できないようにする。
###発生している問題・エラーメッセージ
3と4の要件に関して
エラーメッセージは表示出来るのですが
「発言できないようにする」方法が分かりません。
現状では、エラーメッセージと、文字数制限を無視した発言が、同時に表示されてしまいます。
例:
・名前を入力してください(エラーメッセージ)
・ :こんにちは! -2017-05-22 23:24:34
(本来は、田中太郎:こんにちは!-2017-05-22 23:24:34 というような形で表示される)
###該当のソースコード
php
1<?php 2 3$filename = './bbs.txt'; 4$name = 0; 5$comment = 0; 6$name_max = 20; 7$comment_max = 100; 8$log = date('-Y-m-d H:i:s'); 9 10if ($_SERVER['REQUEST_METHOD'] === 'POST'){ 11 12 $name = $_POST['name']; 13 14 if (($fp_name = fopen($filename , 'a')) !== FALSE){ 15 if ((strlen($name) <= 20) || (strlen($name) !== 0)){ 16 if (fwrite($fp_name , "$name:") === FALSE){ 17 print 'ファイル書き込み失敗' . $filename; 18 } 19 } 20 fclose($fp_name); 21 } 22 23 $comment = $_POST['comment']; 24 25 $text = "$comment $log\n"; 26 if (($fp_comment = fopen($filename , 'a')) !== FALSE){ 27 if ((strlen($comment) <= 20) || (strlen($comment)) !== 0){ 28 if (fwrite($fp_comment , " $text") === FALSE){ 29 print 'ファイル書き込み失敗' . $filename; 30 } 31 } 32 fclose($fp_comment); 33 } 34} 35 36$data = array(); 37 38if (is_readable($filename) === TRUE){ 39 if (($fp = fopen($filename , 'r')) !== FALSE){ 40 while (($tmp = fgets($fp)) !== FALSE){ 41 $data[] = htmlspecialchars($tmp); 42 } 43 fclose($fp); 44 } 45}else{ 46 $data[] = 'ファイルがありません'; 47} 48 49?> 50<!DOCTYPE html> 51<html lang = "ja"> 52<head> 53 <meta charset = "UTF-8"> 54 <title>ひとこと掲示板</title> 55</head> 56<body> 57 <h1>ひとこと掲示板</h1> 58 59<?php if (strlen($name) > $name_max){?> 60 <ul> 61 <li> 62<?php print '名前は20文字以内で入力してください';?> 63 </li> 64 </ul> 65<?php } ?> 66 67<?php if(strlen($name) === 0){?> 68 <ul> 69 <li> 70<?php print '名前を入力してください';?> 71 </li> 72 </ul> 73<?php } ?> 74 75 76<?php if (strlen($comment) > $comment_max){?> 77 <ul> 78 <li> 79<?php print 'ひとことは100文字以内で入力してください';?> 80 </li> 81 </ul> 82<?php } ?> 83 84<?php if(strlen($comment) === 0){?> 85 <ul> 86 <li> 87<?php print 'ひとことを入力してください';?> 88 </li> 89 </ul> 90<?php } ?> 91 92 <form method = "POST"> 93 名前:<input type = "text" name = "name" size = "20" value = ""> 94 ひとこと:<input type = "text" name = "comment" size = "55" value = ""> 95 <input type = "submit" name = "submit" value = "送信"> 96 </form> 97<?php 98foreach ($data as $read) { 99?> 100 <ul> 101 <li> 102<?php print $read; ?> 103 </li> 104 </ul> 105<?php 106} 107?> 108</body> 109</html>
###試したこと
・上記のコード(11行目,21行目辺り)でも試してあるように、ファイルへ書き込みを行う際に
指定の文字数以内もしくは、フォームへ入力した文字が0文字でない場合
のみ fwrite()の処理を行えるように、if文で条件分けした。
・同様に、指定の文字数以内もしくは、フォームへ入力した文字が0文字でない場合のみ、fgets()の処理を行えるように、while文をif文で条件分けした
・同様に、指定の条件の場合のみ、配列dataに$tmp(読み込まれたファイル)が代入されるように、$data[]をif文で条件分けした。
以上3つ共試した結果、どの方法でも「発生している問題・エラーメッセージ」に記載したような結果になってしまいました。
大変お手数かと思いますが、ご教授お願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/22 03:23