toshieeeee
7/6/2016 - 7:38 AM

basic board

basic board

<?php

$filename = './codeCamp.txt';

$error = array();
$data = array();
$comment = '';

if($_SERVER['REQUEST_METHOD'] === 'POST'){

  $user_name = null;

  /*
  isset()
  変数がセットされていること、そして NULL でないことを検査する。
  →Null以外だったらtrueを返す
  */

  //それぞれエラー用のコメントを連想配列に格納しておく 

  //名前のエラー文章

  if(isset($_POST['user_name']) !== TRUE || mb_strlen($_POST['user_name']) === 0){

    $error['user_name'] = '名前を入力してください';

  } else if(mb_strlen(($_POST['user_name']) > 20)){

    $error['user_name'] = '名前は20文字以内で入力してください';

  } else if(preg_match ('/^\s$|^ $/',$_POST['user_name'])){

    $error['user_name'] = '名前は半角、または全角スペースだけでは登録できません';

  } else {

    $user_name = $_POST['user_name'];    

  }

  //ひとことのエラー文章

  $user_comment = null;

  if(isset($_POST['user_comment']) !== TRUE || mb_strlen($_POST['user_comment']) === 0){

    $error['user_comment'] = 'コメントを入力してください';

  } else if(mb_strlen(($_POST['user_comment']) > 100)){

    $error['user_comment'] = 'コメントは100文字以内で入力してください';

  } else if(preg_match('/^\s$|^ $/',$_POST['user_comment'])){

    $error['user_comment'] = 'コメントは半角、または全角スペースだけでは登録できません';

  } else {

    $user_comment = $_POST['user_comment'];

  }

  //エラーがなければ保存
  // = $error[]の配列に何も入ってなければ、処理を実行

  if(count($error) === 0){

    $comment = $user_name . ',' . $user_comment . ',' . date('Y-m-d H:i:s') ."\n";

    // fgetsCSVで取り出すために、','で区切ってるのか!

    if(!$fp = fopen($filename, 'a')){ // ファイルポインタリソースを取得

      echo 'Cannot Open File' . $filename;
      exit;

    }

    if(fwrite($fp, $comment) === FALSE) {

      echo 'Cannot Write to file' . $filename;
      exit;

    }

    fclose($fp);

    header('Location: http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']); // ブラウザをリダイレクトします

    /*
      ページ遷移による対策は、POSTでデータを登録後、
      header関数を用いて違うページに飛ばす(GETを実行する)ことで対策します。
    */

  }
}


//ここまで、テキストにデータを書き込む処理

if(is_readable($filename) === TRUE) {

  if(($fp = fopen($filename, 'r')) !== FALSE) {

    while (($row = fgetcsv($fp, 1000, ',')) !== FALSE) {

      //配列に格納

      $data[] = $row;

    }

    fclose($fp);
    $data = array_reverse($data); // 逆順に並べ替える。この実装はやったほうがいいね。
  }

}

//ここまで、ブラウザ出力用に、データを適切な形で配列に入れる処理

?>


<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="UTF-8">
  <title>掲示板 - 課題</title>
</head>
<body>
  
  <h1>課題</h1>
   
  <form action="codeCampCopy.php" method="post">

    <?php if(count($error) > 0){ ?>

      <ul>

        <?php foreach ($error as $error_text) { ?>

        <li><?php echo $error_text ?></li>

        <?php } ?>

      </ul>

    <?php } ?>
        
    <p>名前 : <input type="text" name="user_name"></p>

    コメント : <input type="text" name="user_comment" size="60">

    <p><input type="submit" name="submit" value="送信"></p>
      
    </form>


    <p>発言一覧</p>

    <ul>

      <?php foreach ($data as $read) { ?>

        <li>
          <?php echo htmlspecialchars($read[0], ENT_QUOTES, 'UTF-8');?>
          <?php echo htmlspecialchars($read[1], ENT_QUOTES, 'UTF-8');?>
          <?php echo htmlspecialchars($read[2], ENT_QUOTES, 'UTF-8');?>
        </li>
        
      <?php } ?>

    </ul>

    


</body>
</html>