PHP+MySQL投票系统的设计和实现分享
前端之家收集整理的这篇文章主要介绍了
PHP+MySQL投票系统的设计和实现分享,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
系统不大,完成这个系统的过程我分了三个步骤
•数据库设计
•系统框架设计
•前端美化
设计三张表:投票结果
统计表(count_voting),投票人记录表(ip_votes),
用户表(user)
投票结果
统计表用于
统计最后的投票记录,我给它弄了4个字段:被投票项的
名称(SelectName),被投票项
标签名(LabelName)(起到
分类的作用),票数(CountVotes)。 投票人记录表用于登记投票人的ip(IP),地理位置(Location),投票时间(VoteTime),被投票项
名称(SelectName)。然后我还给它加一个ID。
用户表主要用于给
管理员用的,包含
用户名(name)和密码(passwd)。
生成表的
sql脚本如下:
<div class="codetitle">
<a style="CURSOR: pointer" data="83520" class="copybut" id="copybut83520" onclick="doCopy('code83520')"> 代码如下: <div class="codebody" id="code83520">
--
-- 表的结构
count_voting
--
DROP TABLE IF 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,
UNIQUE KEY
SelectName
(
SelectName
),
KEY
CountVotes
(
CountVotes
),
KEY
CountVotes_2
(
CountVotes
),
KEY
CountVotes_3
(
CountVotes
)
) ENGINE=InnoDB DEFAULT CHARSET=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_INCREMENT=4 ;
--
-- 触发器
ip_votes
--
DROP TRIGGER IF EXISTS
vote_count_after_insert_tr
;
DELIMITER //
CREATE TRIGGER
vote_count_after_insert_tr
AFTER INSERT ON
ip_votes
FOR EACH ROW UPDATE 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。还能后出最后一句是设置外部关联字。