PHP投票システム簡単実装ソースコード(1/3)_PHPチュートリアル

WBOY
リリース: 2016-07-20 11:10:56
オリジナル
1502 人が閲覧しました

この記事では投票システムの実装原理と実装コードを詳しく紹介しますので、困っている方は参考にしてください。

データベースの設計
3 つのテーブルを設計します: 投票結果統計テーブル (count_voting)、投票者記録テーブル (ip_votes)、ユーザー テーブル (user)

投票結果統計テーブルは、最終的な投票記録をカウントするために使用されます。投票された項目の名前 (SelectName)、投票された項目のラベル名 (LabelName) (分類に役割を果たす)、および投票数 (CountVotes) の 4 つのフィールドが作成されました。

投票者記録テーブルは、投票者の IP (IP)、地理的位置 (Location)、投票時刻 (VoteTime)、および投票された項目の名前 (SelectName) を登録するために使用されます。次に、IDも追加します。

ユーザーテーブルは主に管理者に使用され、ユーザー名 (name) とパスワード (passwd) が含まれます。

テーブルを生成するSQLスクリプトは次のとおりです:

コードは次のとおりです コードをコピー


--
-- テーブル構造 `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->e​​xec($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...)
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート