勉強したことのメモ

webプログラマ見習いが勉強したことのメモ。

PHPのclassを用いてBBS作成

      2014/06/06

オブジェクト指向勉強中のメモ。

■index.php
<?
error_reporting(E_ALL & ~E_NOTICE);
include("../db.class.php");
include("./bbs.class.php");
$con = new dbConnection($dbhost, $dbuser, $dbpass);
$con -> dbCon('test');

if ($_POST['name'] && $_POST['body']) {
$create = new createBbs($_POST['name'], $_POST['body']);
$create -> insert();
header("Location:" . $_SERVER['PHP_SELF']);
} else if ($_GET['mode'] == 'delete' && is_numeric($_GET['seq'])) {
$deleteBbs = new deleteBbs($_GET['seq']);
$deleteBbs -> deleteData();
header("Location:" . $_SERVER['PHP_SELF']);
}
?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transtional//EN" "http://www.w3c.org/TR/html4/loose.dtd">
<meta http-equiv="content-type" content="text/html"/>
<meta cherset = "UTF-8">
<link href="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/css/bootstrap-combined.min.css" rel="stylesheet">
<script src="//netdna.bootstrapcdn.com/twitter-bootstrap/2.3.2/js/bootstrap.min.js"></script>
<html lang="ja">
<head>
<title>BBS</title>
<script>
function deleteBbs (seq) {
if (window.confirm('削除してよろしいですか?')) {
location.href = '<?=$_SERVER["PHP_SELF"];?>?mode=delete&seq=' + seq;
} else {
return false;
}
}
</script>
</head>
<body>
<h1>BBS</h1>
<form action="" method="post">
名前:<input type="text" name="name"><br />
本文:<textarea name="body"></textarea><br />
<input type="submit" value="書き込み"><br />
</form>
<hr>
<?
$bbsObj = new readBbs();
$setData = $bbsObj -> setBbsData();
$bbsData = $bbsObj -> getBbsData();
for ($i = 0; $i < count($bbsData); $i++) :
?>
名前:<?=htmlspecialchars($bbsData[$i]['name']);?><br />
書き込み時間:<?=htmlspecialchars($bbsData[$i]['time']);?><br />
本文:<?=htmlspecialchars($bbsData[$i]['body']);?><br />
<a href="javascript:void(0);" onClick="return deleteBbs(<?=htmlspecialchars($bbsData[$i]['seq']);?>)">[削除]</a>
<hr>
<? endfor; ?>
</body>
</html>

■bbs.class.php
<?
//書き込み処理
class createBbs {
private $name;
private $body;

public function __construct ($name, $body) {
$this -> name = $name;
$this -> body = $body;
}

public function insert() {
$sql = '
INSERT INTO bbs
(
name,
body,
time
)
VALUES
(
"' . mysql_real_escape_string($this -> name) . '",
"' . mysql_real_escape_string($this -> body) . '",
now()
)
';
$row = mysql_query($sql);
}
}

//呼び出し処理
class readBbs {
private $bbsData = array();

public function setBbsData () {
$sql = '
SELECT *
FROM bbs
ORDER BY seq DESC
';
$row = mysql_query($sql);
$i = 0;
while ($rs = mysql_fetch_array($row)) {
$this -> bbsData[$i]['seq'] = $rs['seq'];
$this -> bbsData[$i]['name'] = $rs['name'];
$this -> bbsData[$i]['body'] = $rs['body'];
$this -> bbsData[$i]['time'] = $rs['time'];
$i++;
}
}

public function getBbsData () {
return $this -> bbsData;
}
}

//削除処理
class deleteBbs {
private $seq;

public function __construct ($seq) {
$this -> seq = $seq;
}

public function deleteData(){
$sql = '
DELETE FROM bbs
WHERE seq = ' . $this -> seq . '
LIMIT 1
';
$row = mysql_query($sql);
}

}

■db.class.php
<?
$dbhost = 'aaa'; // サーバ名
$dbuser = 'bbb'; // ID
$dbpass = 'ccc'; //pass

class dbConnection {
private $dbhost;
private $dbuser;
private $dbpass;

public function __construct ($dbhost, $dbuser, $dbpass) {
$this -> dbhost = $dbhost;
$this -> dbuser = $dbuser;
$this -> dbpass = $dbpass;
}

public function dbCon ($dbname) {
mysql_connect($this -> dbhost, $this
-> dbuser, $this -> dbpass);
mysql_query('SET NAMES UTF8');
mysql_select_db($dbname);
}
}

 - PHP

  関連記事

PHPからMySQLデータを取得した際に一括で配列に入れる方法

MySQLからデータを取得して、PHP側で配列に入れる際に今まで一個ずつ書いてい ...

mb_convert_variablesとmb_convert_encodingの違い

両関数の違いについて、引数の場所というか順番が違うだけ? と思ってたけどどうにも ...

PHPのカレンダー関数

カレンダー関数で使えるかもしれないものをメモ。 ■cal_days_in_mon ...

PHPページングテンプレ

使いやすいのがあったのでメモ。   $page            ...

ユーザーエージェントなどユーザー情報を取得する方法

上からUA、IP、ホスト名を取得。 $ua = $_SERVER['HTTP_U ...

前置インクリメントと後置インクリメント

何かの検索している時に見つけたもの。 前置インクリメントの方が高速とのこと。 ■ ...

PHPで月末日を取得

PHPファイルを触っている際に日付処理時、 date('t')というものがあって ...

PHPでメルマガを配信する方法

※2016/04/07追記 1件ずつ小分けで送る方法の記事追加。   ...

PHPで指定月の月末日を取得

今月の、だったらdate('t')でいくけど指定月の場合は どうしたらいいのか分 ...

PHPのheader関数で気になった点

結論としてページの移転の場合はexitか ページ自体を消した方がよさ下。 &nb ...