プログラミングの勉強 php 掲示板作成 基本構造手順 覚え書き

saucechord1 Programming

プログラミングの勉強 php 掲示板を作成してゆくときの基本的な手順とコードの覚書

phpの勉強をしています。簡単な掲示板を何度か作成しましたが、簡単に手順とコードの覚書を作っておいて、何度も練習してゆこうと思い備忘録を作っています。

①書き込むためのインプットフォームを最初に作ります。

<form method=”post”>
<div>//名前をインプットするフォーム
  <label for=”view_name”>Bord</label>
  <input id=”view_neme” type=”text” name=”view_name” value=””>
</div>
<div>//メッセージを入力するためのフォーム
  <label for=”message”>Message Board</label>
  <textarea id=”submit” name=”message”></textarea>
</div>//入力されたデータを送信するためのボタン
<input type=”submit” name=”btn_submit” value=”input”>
</form>

②入力されたデータを受け取る

<?php
//データを受け取るためのパス
define(‘FILENAME’,’./message.txt’);
//タイムゾーンを設定する
date_default_timezone_set(‘Asia/Tokyo’);
if(!empty($_POST[‘btn_submit’])){
  if($file_handle = fopen(FILENAME,”a”)){

//書き込まれた日時を記録する
    $now_date = date(“Y-m-d H:i:s”);
//書き込むデータ
    $data = “‘”.$_POST[‘view_name’].”‘,'”.$_POST[‘message’].”‘,'”.$now_date.”‘\n”;
//書き込み
    fwrite($file_handle,$data);

//ファィルを閉じるための処理

    fclose($file_handle);
  }
}
?>

③ファイルデータを読み込んで,投稿完了メッセージ処理

<?php
define(‘FILENAME’,’./message.txt’);
date_default_timezone_set(‘Asia/Tokyo’);
//変数の初期化をする
$now_date = null;
$data = null;
$file_handle= null;
//読み込んだデータを配列に格納してゆく処理1
$split_data = null;
$message = array();
&message_array = array();
//メッセージ入力完了コメント①
$success_message = null;
if(!empty($_POST[‘btn_submit’])){
  if($file_handle = fopen(FILENAME,”a”)){
    $now_date = date(“Y-m-d H:i:s”);
    $data = “‘”.$_POST[‘view_name’].”‘,'”.$_POST[‘message’].”‘,'”.$now_date.”‘\n”;
    fwrite($file_handle,$data);
    fclose($file_handle);
  }
}
//この処理でmessage.txtのデータを読み込んで表示
if($file_handle = fopen(FILENAME,’r’)){
  while($data = fgets($file_handle)){
//読み込んだデータを配列に格納してゆく処理2
      //文字列を分割する処理 \はエスケープ処理
       $split_data = preg_split(‘/\’/’,$data);
 
       $message = array(
         ‘view_name’ =>$split_data[1],
         ‘message’ =>$split_data[3],
         ‘date’ =>$split_data[5]
       );
      array_unshift($message_array,$message);  
  }
//ファイルを閉じる
  fclose($file_handle);

//メッセージ書き込み完了コメント表示②
$success_message = ‘Message write complete’;
}
?>
④htmlに出力させる処理

<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”utf-8″>
<title>Message Board</title>
<style></style>
</head>
<body>
  <h1>Message Board</h1>
//メッセージ書き込み完了コメント表示③
<?php if(!empty($success_message)):?>
  <p class=”succsess_message”><?php echo $success_message; ?></p>
<?php endif; ?>  
<form method=”post”>
<div>
  <label for=”view_name”>Name</label>
  <input id=”view_neme” type=”text” name=”view_name” value=””>
</div>
<div>
  <label for=”message”>Message Board</label>
  <textarea id=”submit” name=”message”></textarea>
</div>
<input type=”submit” name=”btn_submit” value=”input”>
</form>
<hr>
<section>
  <?php if(!empty($message_array)):?>
  <?php foreach($message_array as $value): ?>
  <article>
    <div class=”info”>
      <h2><?php echo
$value[‘view_name’]; ?></h2>
 
      <time><?php echo date(‘Y.m.d H:i’, strtotime($value[‘post_date’])); ?></time>
    </div>
    <p><?php echo $value[‘message’]; ?></p>
  </article>
<?php endforeach; ?>
<?php endif; ?>
</section>
</body>
</html>

⑤名前やメッセージが書き込まれたかどうかのチェックと表示

<?php
// メッセージを保存するファイルのパス設定
define( ‘FILENAME’, ‘./message.txt’);
// タイムゾーン設定
date_default_timezone_set(‘Asia/Tokyo’);
// 変数の初期化 意図しない動作を防ぐためのもの
$now_date = null;
$data = null;
$file_handle = null;
//dataを配列に格納してゆく
$split_data = null;
$message = array();
$message_array = array();
//投稿完了メッセージを出す処理
$success_message = null;
$error_message = array();
$clean = array();
if( !empty($_POST[‘btn_submit’]) ) {
// 表示名の入力チェック
if( empty($_POST[‘view_name’]) ) {
$error_message[] = ‘Please enter your name’;
} else {
$clean[‘view_name’] = htmlspecialchars( $_POST[‘view_name’], ENT_QUOTES);
}
$clean[‘view_name’] = preg_replace( ‘/\\r\\n|\\n|\\r/’, ”, $clean[‘view_name’]);
// メッセージの入力チェック
if( empty($_POST[‘message’]) ) {
$error_message[] = ‘Please enter a message’;
} else {
$clean[‘message’] = htmlspecialchars( $_POST[‘message’], ENT_QUOTES);
$clean[‘message’] = preg_replace( ‘/\\r\\n|\\n|\\r/’, ‘<br>’, $clean[‘message’]);
}
if( empty($error_message) ) {
if( $file_handle = fopen( FILENAME, “a”) ) {
    // 書き込み日時を取得
$now_date = date(“Y-m-d H:i:s”);
// 書き込むデータを作成
$data = “‘”.$clean[‘view_name’].”‘,'”.$clean[‘message’].”‘,'”.$now_date.”‘\n”;
// 書き込み
fwrite( $file_handle, $data);
// ファイルを閉じる
fclose( $file_handle);
$success_message = ‘Input message completed’;
}
}
}
if( $file_handle = fopen( FILENAME,’r’) ) {
    while( $data = fgets($file_handle) ){
$split_data = preg_split( ‘/\’/’, $data);
$message = array(
‘view_name’ => $split_data[1],
‘message’ => $split_data[3],
‘post_date’ => $split_data[5]
);
array_unshift( $message_array, $message);
}
    // ファイルを閉じる
    fclose( $file_handle);
}
?>
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”utf-8″>
<title>Message Board</title>
<style></style>
</head>
<body>
<h1>Message Board</h1>
<?php if( !empty($success_message) ): ?>
    <p class=”success_message”><?php echo $success_message; ?></p>
<?php endif; ?>
<?php if( !empty($error_message) ): ?>
    <ul class=”error_message”>
<?php foreach( $error_message as $value ): ?>
            <li>・<?php echo $value; ?></li>
<?php endforeach; ?>
    </ul>
<?php endif; ?>
<form method=”post”>
<div>
<label for=”view_name”>Name</label>
<input id=”view_name” type=”text” name=”view_name” value=””>
</div>
<div>
<label for=”message”>Message</label>
<textarea id=”message” name=”message”></textarea>
</div>
<input type=”submit” name=”btn_submit” value=”input”>
</form>
<hr>
<section>
<?php if( !empty($message_array) ){ ?>
<?php foreach( $message_array as $value ){ ?>
<article>
    <div class=”info”>
        <h2><?php echo $value[
‘view_name’]; ?></h2>
        <time><?php echo date(‘Y.m.d H:i’, strtotime($value[‘post_date’])); ?></time>
    </div>
    <p><?php echo $value[‘message’]; ?></p>
</article>
<?php } ?>
<?php } ?>
</section>
</body>
</html>

⑥特殊文字がインプットされた時無害化する処理

<?php
// メッセージを保存するファイルのパス設定
define( ‘FILENAME’, ‘./message.txt’);
// タイムゾーン設定
date_default_timezone_set(‘Asia/Tokyo’);
// 変数の初期化 意図しない動作を防ぐためのもの
$now_date = null;
$data = null;
$file_handle = null;
//dataを配列に格納してゆく
$split_data = null;
$message = array();
$message_array = array();
//投稿完了メッセージを出す処理
$success_message = null;
$error_message = array();
$clean = array();
if( !empty($_POST[‘btn_submit’]) ) {
// 表示名の入力チェック
if( empty($_POST[‘view_name’]) ) {
$error_message[] = ‘Please enter your name’;
} else {
$clean[‘view_name’] = htmlspecialchars( $_POST[‘view_name’], ENT_QUOTES);
}
$clean[‘view_name’] = preg_replace( ‘/\\r\\n|\\n|\\r/’, ”, $clean[‘view_name’]);
// メッセージの入力チェック
if( empty($_POST[‘message’]) ) {
$error_message[] = ‘Please enter a message’;
} else {
$clean[‘message’] = htmlspecialchars( $_POST[‘message’], ENT_QUOTES);
$clean[‘message’] = preg_replace( ‘/\\r\\n|\\n|\\r/’, ‘<br>’, $clean[‘message’]);
}
if( empty($error_message) ) {
if( $file_handle = fopen( FILENAME, “a”) ) {
    // 書き込み日時を取得
$now_date = date(“Y-m-d H:i:s”);
// 書き込むデータを作成
$data = “‘”.$clean[‘view_name’].”‘,'”.$clean[‘message’].”‘,'”.$now_date.”‘\n”;
// 書き込み
fwrite( $file_handle, $data);
// ファイルを閉じる
fclose( $file_handle);
$success_message = ‘Input message completed’;
}
}
}
if( $file_handle = fopen( FILENAME,’r’) ) {
    while( $data = fgets($file_handle) ){
$split_data = preg_split( ‘/\’/’, $data);
$message = array(
‘view_name’ => $split_data[1],
‘message’ => $split_data[3],
‘post_date’ => $split_data[5]
);
array_unshift( $message_array, $message);
}
    // ファイルを閉じる
    fclose( $file_handle);
}
?>

6工程で掲示板の基本的な構造を作ってゆきます。何度も反復練習して、見ないでもできるようにしてゆきたいと思っています。データはテキストに書き込む簡単な設計ですが、データベース使用のコードも覚えられるようにして行かなければなりません。また、今度まとめます。

まとめ完成版コード
kobu-agency-798655-unsplash

<?php
// メッセージを保存するファイルのパス設定
define( ‘FILENAME’, ‘./message.txt’);
// タイムゾーン設定
date_default_timezone_set(‘Asia/Tokyo’);
// 変数の初期化 意図しない動作を防ぐためのもの
$now_date = null;
$data = null;
$file_handle = null;
//dataを配列に格納してゆく
$split_data = null;
$message = array();
$message_array = array();
//投稿完了メッセージを出す処理
$success_message = null;
$error_message = array();
$clean = array();
if( !empty($_POST[‘btn_submit’]) ) {
// 表示名の入力チェック
if( empty($_POST[‘view_name’]) ) {
$error_message[] = ‘Please enter your name’;
} else {
$clean[‘view_name’] = htmlspecialchars( $_POST[‘view_name’], ENT_QUOTES);
}
// メッセージの入力チェック
if( empty($_POST[‘message’]) ) {
$error_message[] = ‘Please enter a message’;
} else {
$clean[‘message’] = htmlspecialchars( $_POST[‘message’], ENT_QUOTES);
$clean[‘message’] = preg_replace( ‘/\\r\\n|\\n|\\r/’, ‘<br>’, $clean[‘message’]);
}
if( empty($error_message) ) {
if( $file_handle = fopen( FILENAME, “a”) ) {
    // 書き込み日時を取得
< span style=”white-space: pre;”> $now_date = date(“Y-m-d H:i:s”);
// 書き込むデータを作成
$data = “‘”.$clean[‘view_name’].”‘,'”.$clean[‘message’].”‘,'”.$now_date.”‘\n”;
// 書き込み
fwrite( $file_handle, $data);
// ファイルを閉じる
fclose( $file_handle);
$success_message = ‘Input message completed’;
}
}
}
if( $file_handle = fopen( FILENAME,’r’) ) {
    while( $data = fgets($file_handle) ){
$split_data = preg_split( ‘/\’/’, $data);
$message = array(
‘view_name’ => $split_data[1],
‘message’ => $split_data[3],
‘post_date’ => $split_data[5]
);
array_unshift( $message_array, $message);
}
    // ファイルを閉じる
    fclose( $file_handle);
}
?>
<!DOCTYPE html>
<html lang=”ja”>
<head>
<meta charset=”utf-8″>
<title>Message Board</title>
//css記述
<style>

label {
    display: block;
    margin-bottom: 7px;
    font-size: 86%;
}
input[type=”text”],
textarea {
margin-bottom: 20px;
padding: 10px;
font-size: 86%;
    border: 1px solid #ddd;
    border-radius: 3px;
    background: #fff;
}
input[type=”text”] {
width: 200px;
}
textarea {
width: 50%;
max-width: 50%;
height: 70px;
}
input[type=”submit”] {
appearance: none;
    -webkit-appearance: none;
    padding: 10px 20px;
    color: #fff;
    font-size: 86%;
    line-height: 1.0em;
    cursor: pointer;
    border: none;
    border-radius: 5px;
    background-color: #37a1e5;
}
input[type=submit]:hover,
button:hover {
    background-color: #2392d8;
}

</style>

</head>
<body>
<h1>Message Board</h1>
<?php if( !empty($success_message) ): ?>
    <p class=”success_message”><?php echo $success_message; ?></p>
<?php endif; ?>
<?php if( !empty($error_message) ): ?>
    <ul class=”error_message”>
<?php foreach( $error_message as $value ): ?>
            <li>・<?php echo $value; ?></li>
<?php endforeach; ?>
    </ul>
<?php endif; ?>
<form method=”post”>
<div>
<label for=”view_name”>Name</label>
<input id=”view_name” type=”text” name=”view_name” value=””>
</div>
<div>
<label for=”message”>Message</label>
<textarea id=”message” name=”message”></textarea>
</div>
<input type=”submit” name=”btn_submit” value=”input”>
</form>
<hr>
<section>
<?php if( !empty($message_array) ){ ?>
<?php foreach( $message_array as $value ){ ?>
<article>
    <div class=”info”>
        <h2><?php echo $value[‘view_name’]; ?></h2>
        <time><?php echo date(‘Y.m.d H:i’, strtotime($value[‘post_date’])); ?></time>
    </div>
    <p><?php echo $value[‘message’]; ?></p>
</article>
<?php } ?>
<?php } ?>
</section>
</body>
</html>

タイトルなし

コメント

Translate »