現在PHPで掲示板を作成しています。
未入力での投稿をした場合にエラーメッセージを表示させたいのですが、うまく作動しません。
MyValidator.php
php
1<?php 2require_once 'C:\xampp\htdocs\php_data\DbManager.php'; 3 4class MyValidator { 5 public $_errors; 6 7 public function __construct() { 8 $_errors = array(); 9 } 10 11 public function requiredCheck($value, $name) { 12 if(trim($value) === ''){ 13 $this->_errors[] = "{$name}は必須入力です。"; 14 } 15 } 16 17} 18 19?>
board.php
php
1<?php 2require_once 'C:\xampp\htdocs\php_data\DbManager.php'; 3require_once 'C:\xampp\htdocs\php_data\MyValidator.php'; 4 5date_default_timezone_set('Asia/Tokyo'); 6 7$dataFile ='bbs.txt'; 8 9if(isset($_POST['toukou'])){ 10 11 $v = new MyValidator(); 12 $v->requiredCheck($_POST['name'], '名前'); 13 $v->requiredCheck($_POST['contents'], 'メッセージ'); 14 15 16 $name = htmlspecialchars($_POST['name']); 17 $contents = htmlspecialchars($_POST['contents']); 18 $postedAt = date('Y-m-d H:i:s'); 19 20 21 22 $newData = (sizeof(file($dataFile)) + 1)." ".$name." ".$contents." ".$postedAt. "\n"; 23 24 $fp = fopen($dataFile,'a'); 25 fwrite($fp, $newData); 26 fclose($fp); 27 28} 29 30 try { 31 $db = getDb(); 32 33 $stt = $db->prepare('INSERT INTO bulletin(name, contents) VALUES(:name, :contents)'); 34 35 $stt->bindParam(':name', $_POST['name']); 36 $stt->bindParam(':contents', $_POST['contents']); 37 $stt->execute(); 38 $db = NULL; 39 40 } catch(PDOException $e) { 41 die("エラーメッセージ:{$e->getMessage()}"); 42} 43 44?> 45<!DOCTYPE html> 46<html lang="ja"> 47<head> 48 <meta charset="utf-8"> 49 <title>簡易掲示板</title> 50</head> 51<body> 52 <h1>簡易掲示板</h1></br> 53 <p>名前は20文字以内、メッセージは50文字以内で入力してください</p> 54 55 <form action="" method="POST"> 56 57 名前:<input type="text" name="name"> 58 メッセージ:<input type="text" name="contents"> 59 60 <input type="submit" name='toukou' value="投稿"></br></br> 61 62 </form> 63 64<?php 65 66 $file=file($dataFile); // ファイルの内容を配列に格納 67 foreach( $file as $value ){ 68 $line = explode(" ",$value); 69 echo $value."<br />\n"; // 改行しながら値を表示 70 } 71?> 72</body> 73</html> 74 75
現状、未入力で投稿するとエラーが出ずにそのまま空白で投稿されてしまいます。
修正よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/12/15 05:20
2016/12/15 05:56