-- -- テーブル構造 `count_voting` --
DROP TABLE I F EXISTS `count_voting` ; CREATE TABLE IF NOT EXISTS `count_voting` ( `SelectName` varchar(40) NOT NULL, `LabelName` varchar(40) NOT NULL, `CountVotes` bigint(20) unsigned NOT NULL, 一意のキー `SelectName` (`SelectName`)、 KEY `CountVotes` (`CountVotes`)、 KEY `CountVotes_2` (`CountVotes`)、 KEY `CountVotes_3` (`CountVotes`) ) ENGINE=InnoDB デフォルトの文字セット=utf8 COMMENT='投票統計表';
-------------------------------------- ------------ ---------------
-- -- テーブル構造 `ip_votes` --
DROP TABLE IF EXISTS `ip_votes `; CREATE TABLE IF NOT EXISTS `ip_votes` ( `ID` bigint(20) unsigned NOT NULL auto_increment COMMENT '投票者のシリアル番号: 自動インクリメント', `IP` varchar(15) NOT NULL COMMENT '投票者の IP' , `Location` varchar(40) NOT NULL COMMENT '投票者の位置', `VoteTime` datetime NOT NULL, `SelectName` varchar(40) NOT NULL, PRIMARY KEY (`ID`), KEY `ID` (`ID`), KEY `SelectName` (`SelectName`) ) Engine = Innodb Default Charset = UTF8 Auto_insert_tr`; Delimiter // INSERT ON `ip_votes` 後にトリガー `vote_count_after_insert_tr` を作成します各行の更新 count_voting SET CountVotes = CountVotes + 1 WHERE SelectName = NEW.SelectName // DELIMITER ;
-- -------------- ---------- --------------------------------
-- -- `user`のテーブル構造 --
DROP TABLE IF EXISTS `user`; CREATE TABLE IF NOT EXISTS `user` ( `name` varchar(10) NOT NULL COMMENT '管理者ユーザー名', `passwd` char(32) NOT NULL COMMENT 'ログインパスワード MD5 値' ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='ユーザー テーブル';
-- -- テーブル `user` にデータを転送します --
INSERT INTO `user` (`name`, `passwd) `) VALUES ('ttxi', '700469ca1555900b18c641bf7b0a1fa1'),('jitttanwa', 'adac5659956d68bcbc6f40aa5cd00d5c');
-- -- エクスポートされるテーブルを制限します- -
-- -- 制限テーブル `ip_votes` -- ALTER TABLE `ip_votes` ADD CONSTRAINT `ip_votes_ibfk_1` FOREIGN KEY (`SelectName`) REFERENCES `count_voting` (`SelectName`) ON DELETE CASCADE ON UPDATE CASCADE ;
スクリプトからわかるように、ip_votes テーブルにデータが挿入されたときに count_voting テーブルの CountVotes フィールドに 1 を追加するトリガーを作成しました。最後の文は外部関連語を設定するためにも使用できます。
フレームワーク設計 OperatorDB クラスはデータベースの操作に使用され、OperatorVotingDB クラスはシステム固有の一連の操作に使用されます。 PDO を使用してデータベースを操作します。簡単にカプセル化してみましょう:
コードは次のとおりです | コードをコピーします |
/** * 操作データベース * 独自の操作に便利なように PDO をカプセル化 */ class OperatorDB { / /データベースに接続するための基本情報 private $dbms='mysql'; //データベースの種類、開発者が別のデータベースを使用する場合は、これを変更するだけです。 private $host='localhost' //データベースのホスト名 private $dbName='voting '; //使用するデータベース private $user='voting'; //データベース接続ユーザー名 private $pdo=null;
; function __construct()dbname; this-& gt; passwd); // PDO オブジェクトの初期化はデータベース接続オブジェクトの作成です $ DB } Catch (pdoException $ e) { DIE ("& LT; br/& gt; データベース接続失敗 (Creater) pdo エラー!):". ;getMessage()." "); 。 } パブリック関数クエリ($sql) { } }
その後の操作を容易にするために、データベース接続情報をカプセル化します。
コードは以下の通りです | コードをコピー |
require_once 'OperatorDB.php'; class OperatorVotingDB { private $odb;
public function __construct() { $this ->odb = new OperatorDB(); } public function __destruct() { $this->odb = null; } /** * 投票データ内のすべてのテーブルをクリアします * * データベース操作クラスを呼び出して、データベースのクリア操作を実行します */ public function clearTables( ) { $sqls = array("TRUNCATE ip_votes;", "TRUNCATE count_voting;"); $sqls[1]); }
/** * count_voting テーブルの CountValues フィールドを 0 にリセットします * */ public function replaceCountValues() { $sql = "UPDATE count_voting SET CountVotes = 0;"; $this->odb-> ;exec($sql); }
/***/ public function vote($ip, $loc,$name) { } $sql = "ip_votes 値に挿入 (NULL, '$ip ', '$loc', NOW(), '$name')"; $subsql = "SELECT MAX( to_days(VoteTime)) FROM ip_votes WHERE IP='$ip'"; $stm = ;odb->query($subsql); $subsql = "SELECT to_days('$now');"; $stm = $ this-> odb-> Query($ subsql) - > fetch();現在の時間$ sql;
/** */ public function addSelectName($name, $label, $count=0) { $sql = "INSERT INTO count_voting VALUES ('$name', '$label', $count) ;"; $this->odb->exec($sql); }
/** * 投票総数を取得し、結果を投票数で並べ替えます * * CountVotes フィールドで並べ替え、count_voting テーブルを返します * * @param int $n * */ public function getVotesSortByCount($n=-1) { $sql = "SELECT * FROM count_voting ORDER BY CountVotes DESC LIMIT 0 , $n;"; if (-1 == $n) { $sql = "SELECT * FROM count_voting ORDER BY CountVotes DESC;"; } // echo $ sql; return $this->odb->query($sql); }
/** * 投票ステータスを取得し、投票数で並べ替え、結果をラベルでグループ化します * * CountVotes フィールドで並べ替え、LabelName フィールドでグループ化し、count_voting テーブルを返します */ public function getVotesGroupByLabel() { $sql = "SELECT * FROM count_voting注文方法LabelName DESC;"; // echo $sql; return $this->odb->query($sql); } } ?>
1 2 3
|
http://www.bkjia.com/PHPjc/444675.html
www.bkjia.com
本当http://www.bkjia.com/PHPjc/444675.html技術記事この記事では、投票システムの実現原理とコードの実現について詳しく説明しています。必要な場合は、投票結果テーブル (count_vo...)
|
|