BreathTake/ホームページ作成の小技・PHPの小技篇

*
ホームページ作成の小技タイトル・PHPの小技篇・イメージ写真
ホームページ作成の小技TOP>> PHPの小技篇>> 掲示板作成プログラム
掲示板作成プログラム

掲示板作成のプログラムソ−ス

  このファイルと同じフォルダに「bbs_w.php」と言うカラのファイルを作成してください。
  そのファイルにデータが書き込まれます。
<?php
##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//★CSVファイルの指定 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
  $csv_file ='./bbs_w.php';
//★ログファイルの指定
  $lines = file($csv_file);

##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//★書き込みボタンが押された場合の処理★★★★★★★★★★★★★★★★★★★★★★
##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
if ($_POST['write']) {
  //ログの先頭行の記事番号を+1にして最新の記事番号を 配列$no にセット
  //explode:文字列の分解
     $items = explode(",", $lines[0]);
     $no = $items[0] + 1;
  //送信された「名前・メールアドレス・タイトル」を取得
     $name = htmlspecialchars($_POST['name']);
     $mail = htmlspecialchars($_POST['mail']);
     $title = htmlspecialchars($_POST['title']);
  //名前・タイトルが無記入の場合の処理
     if (!$name) $name = "名無しさん";
     if (!$title) $title = "無題";
  //送信された「内容」を取得し、文字変換
     $contents = htmlspecialchars($_POST['contents']);
     $contents = str_replace("\r\n", "<br>", $contents);
     $contents = str_replace("\r", "<br>", $contents);
     $contents = str_replace("\n", "<br>", $contents);
  //削除キーのセット
    if ($_POST['delkey'] == "") {
            $delkey = "515";
    } else {
      $delkey = htmlspecialchars($_POST['delkey']);
    }
  //日付の取得
    $time = date("Y/m/d H:i:s");
  //クッキーのセット
    $expire = time() + 3600 * 24 * 30;
      setcookie("name", $name, $expire);
      setcookie("mail", $mail, $expire);
      setcookie("delkey", $delkey, $expire);
  //新たにログファイルに追加する一行を 配列$data にセット
  //記事番号 名前 メールアドレス タイトル 本文 削除キー 投稿時間(改行)…の順序でセット
    $data = "$no,$name,$mail,$title,$contents,$delkey,$time\n";
  //ログファイル 配列$lines の先頭に今回の書き込み内容を格納
  //配列の最初にデータを追加
    array_unshift($lines, $data);
} else {
  //★最初の読み込み時の処理(クッキーの値を取得)
    $name = $_COOKIE['name'];
    $mail = $_COOKIE['mail'];
    $delkey = $_COOKIE['delkey'];
}

##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//★削除ボタンが押された場合の処理★★★★★★★★★★★★★★★★★★★★★★★★
##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
if ($_POST['delete']) {
  //ログファイルの内容をチェック
  for ($i = 0; $i < count($lines); $i++) {
    //ログファイルの現在行のデータから各項目の値を $items に格納
      $items = explode(",", $lines[$i]);
      //$items[0] には現在行の記事番号、$items[5] には現在行の削除キーをそれぞれ格納
      //記事番号・削除キーともにフォームから送られてきた値と等しければ
       ログファイルの配列から一行削除
      //array_splice は配列から特定の行を削除・置換する関数で、
       第1引数に配列、第2引数に削除開始位置、第3引数に削除要素数が入る
      if ($items[0] == $_POST['delno'] && $items[5] == $_POST['delkey2']) {
        array_splice($lines, $i, 1);
      }
  }
}

##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//★書き込みや削除を行なってログ内容が変更されたときにはログを書き込み★★★★★★
##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
if ($_POST['write'] || $_POST['delete']) {
  //@ファイルを書き込みモードで開く
  $fp = fopen($csv_file, 'w') or die("書き込みファイルがオープン出来ません");
  //A配列をまとめて出力 : foreach($lines as $line) fputs($fp, $line)
  foreach($lines as $line) fputs($fp, $line);
  //Bファイルを閉じる
  fclose($fp);
}

##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//★CSVファイルの取り込み ★★★★★★★★★★★★★★★★★★★★★★★★★★★★
##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//ファイルを開く
  $fdisp = fopen($csv_file, 'r') or die("読み込みファイルがオープン出来ません");
//変数の初期化
  $alldata = 1;
  while (list($a,$b,$c,$d,$e,$f,$g) = fgetcsv($fdisp, 1024, ",")) {
     $s_no[$alldata] = $a;
     $s_name[$alldata] = $b;
     $s_mail[$alldata] = $c;
     $s_title[$alldata] = $d;
     $s_contents[$alldata] = $e;
     $s_delkey[$alldata] = $f;
     $s_time[$alldata] = $g;
     $alldata ++;
  }
//ファイルを閉じる
  fclose($fdisp);

##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//★ページの設定★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
##■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
//全データ数の取得
  $count = count($s_no);
//1頁に表示するアイテム数
  $pagedata = "5";
//ページ数 = 全データ数÷1頁表示数
  $allpage = ceil($count / $pagedata);
//選択されたページの番号(送信データの取得)
  if ($_GET["pagenum"] == "" ){
    $_GET["pagenum"] = "1";
  }
  $pagenum = $_GET["pagenum"];
//選択されたページに表示されるレコードの先頭番号
  $first_data = ($pagenum * $pagedata) - ($pagedata-1);
//選択されたページに表示されるレコードの最終番号
  $last_data= ( $pagenum*$pagedata);
?>


<!-- ========================================================================= -->
<table border="0" cellpadding="0" cellspacing="5" width="650" align="center" valign="top">
<form method="post" action="<?=$_SERVER["PHP_SELF"]?>">
<tr>
  <td width="100">
  <b>お名前</b>
  </td>
  <td>
  <input type="text" name="name" value="<?=$name?>" size="50">
  </td>
</tr>
<tr>
  <td>
  <b>メール</b>
  </td>
  <td>
  <input type="text" name="mail" value="<?=$mail?>" size="50">
  </td>
</tr>
<tr>
  <td>
  <b>タイトル</b>
  </td>
  <td>
  <input type="text" name="title" size="50">
  </td>
</tr>
<tr>
  <td>
  <b>削除キー</b>
  </td>
  <td>
  <input type="password" name="delkey" value="<?=$delkey?>" size="20">
  </td> </tr>
<tr>
  <td>
  <b>内 容</b>
  </td>
  <td>
  <textarea name="contents" cols="70" rows="5"></textarea>
  </td>
</tr>
<tr>
  <td colspan=2 align="right" valign="top">
  <input type="submit" name="write" value="送 信">
  </td> </tr>
</form>
</table>
<!-- ========================================================================= -->

<p></p>

<!-- ========================================================================= -->
<table border="0" cellpadding="0" cellspacing="5" width="650" align="center" valign="top">
<tr>
<td align="left" valign="top">
  <?php
  //表示件数の最初
  if ( $count == "" ) {
    $first_data = "0";
  }
  //表示件数の最後
  if ( $last_data >= $count ) {
    $last_data = $count;
  }
  ?>


  全<?= $count ?>件中<?= $first_data ?><?= $last_data ?>件を表示
  <?php
    $j = 1;
    while ($j <= $allpage ) {
  ?>

      <a href="<?=$_SERVER["PHP_SELF"]?>?pagenum=<?= $j ?>">><?= $j ?></a>
  <?php
    $j++;
    }
  ?>

<hr>
</td
</tr>
<?php
for ( $i = $first_data; $i <= $last_data ; $i++) {
  if ( $s_no[$i] ) {
?>

<tr>
<td align="left" valign="top">

  <div style="border-style:solid;border-color:#c0c0c0;border-width:1px;line-height:1;">
  <table border="0" cellpadding="0" cellspacing="5" width="650" align="center" valign="top">
  <tr>
    <td align="left" valign="top" bgcolor="#696969">
    <font color="#ffffff">タイトル <b><?= $s_title[$i] ?></b> (記事No:<?= $s_no[$i] ?>)</font>
    </td>
  </tr>
  <tr>
    <td align="left" valign="top">
    <?= $s_contents[$i] ?>
    </td>
  </tr>
  <tr>
    <td align="left" valign="top">
    投稿者:
    <?php
      if ($s_mail[$i]) echo "<a href='mailto:$s_mail[$i]'>";
    ?>

      <?=$s_name[$i]?>
    <?php
      if ($s_mail[$i]) echo "</a>";
    ?>

    (投稿時間:<?= $s_time[$i] ?>)
    </td>
  </tr>
  </table>
  </div>
  <p></p>
</td>
</tr>
<?php
  }
}
?>

<tr>
<td align="left" valign="top">
<hr>
</td>
</tr>
</table>
<!-- ========================================================================= -->

<!-- ========================================================================= -->
<table border="0" cellpadding="0" cellspacing="5" width="600" align="center" valign="top">
<form method="post" action="<?=$_SERVER["PHP_SELF"]?>">
<input type="hidden" name="POST_mainselector" value="01php">
<input type="hidden" name="POST_selector" value="bordphp">
<tr>
<td align="right" valign="top">
記事番号:<input type="text" name="delno"> 
削除キー: <input type="password" name="delkey2"> 
<input type="submit" name="delete" value="記事削除">
</td>
</tr>
</form>
</table>
<p></p>
<!-- ========================================================================= -->
Copyright © 2011 BreathTake All Rights Reserved