PHP+MySQL投票系统的设计和实现分享_PHP
系统不大,完成这个系统的过程我分了三个步骤
•数据库设计
•系统框架设计
•前端美化
数据库的设计
设计三张表:投票结果统计表(count_voting),投票人记录表(ip_votes),用户表(user)
投票结果统计表用于统计最后的投票记录,我给它弄了4个字段:被投票项的名称(SelectName),被投票项标签名(LabelName)(起到分类的作用),票数(CountVotes)。
投票人记录表用于登记投票人的ip(IP),地理位置(Location),投票时间(VoteTime),被投票项名称(SelectName)。然后我还给它加一个ID。
用户表主要用于给管理员用的,包含用户名(name)和密码(passwd)。
生成表的sql脚本如下:
复制代码 代码如下:
--
-- 表的结构 `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。还能后出最后一句是设置外部关联字。
框架设计
OperatorDB类用于操作数据库,OperatorVotingDB类用于该系统特定的操作集合。
使用PDO操作数据库,我它简单的封装一下:
复制代码 代码如下:
/**
* 操作数据库
* 封装PDO,使其方便自己的操作
*/
class OperatorDB
{
//连接数据库的基本信息
private $dbms='mysql'; //数据库类型,对于开发者来说,使用不同的数据库,只要改这个.
private $host='localhost'; //数据库主机名
private $dbName='voting'; //使用的数据库
private $user='voting'; //数据库连接用户名
private $passwd='voting'; //对应的密码
private $pdo=null;
public function __construct()
{
//dl("php_pdo.dll");
//dl("php_pdo_mysql.dll");
$this->dsn="$this->dbms:host=$this->host;dbname=$this->dbName";
try
{
$this->conn=new PDO($this->dsn,$this->user,$this->passwd);//初始化一个PDO对象,就是创建了数据库连接对象$db
}
catch(PDOException $e)
{
die("
数据库连接失败(creater PDO Error!): ".$e->getMessage()."
");
}
}
public function __destruct()
{
$this->pdo = null;
}
public function exec($sql)
{
}
public function query($sql)
{
}
}
把连接数据库的信息封装进去方便后续的操作。
复制代码 代码如下:
require_once 'OperatorDB.php';
class OperatorVotingDB
{
private $odb;
public function __construct()
{
$this->odb = new OperatorDB();
}
public function __destruct()
{
$this->odb = null;
}
/**
* 清空Voting数据中的所有表
*
* 调用数据库操作类,执行clear数据库的操作
*/
public function clearTables()
{
$sqls = array("TRUNCATE ip_votes;","TRUNCATE count_voting;");
$this->odb->exec($sqls[0]);
$this->odb->exec($sqls[1]);
}
/**
* 重置count_voting表中的CountValues字段为0
*
*/
public function resetCountValues()
{
$sql = "UPDATE count_voting SET CountVotes = 0;";
$this->odb->exec($sql);
}
/**
* 投票
* 将信息写入ip_votes表
* @param type $ip
* @param type $loc
* @param type $time
* @param type $name
*/
public function vote($ip,$loc,$name)
{
$sql = "INSERT INTO ip_votes VALUES (NULL, '$ip', '$loc', NOW(), '$name')";
$subsql = "SELECT MAX(to_days(VoteTime)) FROM ip_votes WHERE IP='$ip'";
$stm = $this->odb->query($subsql);
if (count($row=$stm->fetchAll())==1)
{
$now = date("Y-m-d H:i:s");
$subsql = "SELECT to_days('$now');";
$stm = $this->odb->query($subsql)->fetch();
$time = $stm[0];//使用mysql计算出的today时间
// echo $time."
";
// echo $row[0][0];
if ($time-$row[0][0]{
echo "投票失败,相同ip需要隔一天才能投票";
return;
}
}
// echo $sql;
echo "投票成功!";
$this->odb->exec($sql);
}
/**
* 添加SelectName字段的行
*
* @param string $name
* @param string $label
* @param int $count
*/
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 ORDER BY LabelName DESC;";
// echo $sql;
return $this->odb->query($sql);
}
}
?>
下面还有需要的函数
复制代码 代码如下:
/**
* 页面跳转函数
* 使用js实现
* @param string $url
*/
function goToPgae($url)
{
echo "";
}
function jsFunc($fun, $arg=null)
{
echo "";
}
function jsFunc3($fun, $arg1=null,$arg2=null,$arg3=null)
{
echo "";
//echo $fun."('$arg1','$arg2','$arg3');";
}
function isLoginNow()
{
if ($_COOKIE["user"]=='')
{
return false;
}
return true;
}
function getClientIP()
{
if ($_SERVER["HTTP_X_FORWARDED_FOR"])
{
if ($_SERVER["HTTP_CLIENT_IP"])
{
$proxy = $_SERVER["HTTP_CLIENT_IP"];
}
else
{
$proxy = $_SERVER["REMOTE_ADDR"];
}
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
else
{
if ($_SERVER["HTTP_CLIENT_IP"])
{
$ip = $_SERVER["HTTP_CLIENT_IP"];
}
else
{
$ip = $_SERVER["REMOTE_ADDR"];
}
}
return $ip;
}
//从123查获取ip
function getIpfrom123cha($ip) {
$url = 'http://www.123cha.com/ip/?q='.$ip;
$content = file_get_contents($url);
$preg = '/(?
preg_match_all($preg, $content, $mb);
$str = strip_tags($mb[0][0]);
//$str = str_replace(' ', '', $str);
$address = $str;
if($address == '') {
$address = '未明';
}
return $address;
}
//从百度获取ip所在地
function getIpfromBaidu($ip) {
$url = 'http://www.baidu.com/s?wd='.$ip;
$content = file_get_contents($url);
$preg = '/(?)(.*)(?=)/isU';
preg_match_all($preg, $content, $mb);
$str = strip_tags($mb[0][1]);
$str = str_replace(' ', '', $str);
$address = substr($str, 7);
if($address == '') {
$address = '未明';
}
return $address;
}
?>
然后就是后台管理员的操作怎么弄了,主要是添加投票项的功能,操作数据库上面已经实现。后面的基本上是页面怎么设置,关系到js。添加投票项的页面是动态的,如下:
复制代码 代码如下:
function addVote()
{
right.innerHTML="
添加投票项
";right.innerHTML+="

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Utiliser JavaScript pour développer un système de vote en ligne Résumé : Avec le développement rapide d'Internet, le vote en ligne est devenu un moyen pratique et rapide de recueillir l'opinion publique et de prendre des décisions. Cet article présentera l'utilisation de JavaScript pour développer un système de vote Web simple, qui permet aux utilisateurs de sélectionner des options et de soumettre des votes. Introduction : Un système de vote Web est un programme qui affiche plusieurs options sur une page Web et permet aux utilisateurs de choisir. Il peut être utilisé dans de nombreux scénarios, tels que le vote électoral, les enquêtes sur les produits, la collecte d'opinions, etc. Cet article

Introduction au système de vote en ligne multi-utilisateurs implémenté en PHP : Avec le développement continu de la technologie Internet, la conscience du public de participer à la prise de décision démocratique augmente. Le système de vote en ligne a été créé pour offrir au public un moyen de voter pratique, rapide et transparent. Cet article explique comment utiliser PHP pour écrire un système de vote en ligne multi-utilisateurs et fournit des exemples de code correspondants. 1. Analyse des exigences du système Avant de commencer à écrire du code, nous devons clarifier les exigences et les fonctions du système de vote. Selon les caractéristiques des systèmes de vote courants, nous pouvons diviser les fonctions du système comme suit :

Comment implémenter un système de vote simple à l'aide de MySQL et Ruby Un système de vote est une application en ligne courante utilisée pour recueillir les opinions des utilisateurs sur un problème ou un sujet. Dans cet article, nous présenterons comment utiliser la base de données MySQL et le langage de programmation Ruby pour implémenter un système de vote simple. Premièrement, nous devons préparer l’environnement. Assurez-vous d'avoir installé la base de données MySQL et de disposer d'un environnement de programmation Ruby. S'il n'est pas encore installé, vous pouvez le télécharger depuis le site officiel et suivre les instructions pour l'installer. Ensuite, nous avons besoin

Comment utiliser Laravel pour développer un système de vote en ligne Introduction : Avec le développement d'Internet, de plus en plus de choses peuvent être faites en ligne, y compris le vote. Les systèmes de vote en ligne peuvent recueillir les opinions et les commentaires d’un grand nombre d’utilisateurs de manière pratique et efficace. Cet article expliquera comment utiliser le framework Laravel pour développer un système de vote en ligne de base et fournira des exemples de code spécifiques. 1. Configuration de l'environnement et installation de Laravel : Assurez-vous que PHP et Composer sont installés sur votre machine. Sinon, veuillez d'abord l'installer. vie ouverte

Conception de l'interface utilisateur et optimisation du système de vote en ligne PHP Introduction : Avec le développement d'Internet, divers systèmes de vote en ligne sont de plus en plus largement utilisés. En tant que langage de script côté serveur open source et riche en fonctionnalités, PHP est devenu l'un des langages préférés pour la création de systèmes de vote en ligne. Dans cet article, nous explorerons comment concevoir et optimiser l'interface utilisateur d'un système de vote en ligne en PHP. 1. Conception de l'interface Conception de mise en page simple et claire Une bonne conception de l'interface utilisateur peut offrir une expérience conviviale. Lors de la conception de l'interface utilisateur du système de vote, nous devons prêter attention à la présentation

Comment écrire un système de vote simple en C++ ? Avec le développement de la technologie, les systèmes de vote sont devenus un outil largement utilisé dans la société moderne. Les systèmes de vote peuvent être utilisés dans de nombreux scénarios tels que les élections, les enquêtes et la prise de décision. Cet article va vous montrer comment écrire un système de vote simple en C++. Premièrement, nous devons clarifier les fonctions de base du système électoral. Un système de vote simple devrait avoir les caractéristiques suivantes : Enregistrer les électeurs : Le système devrait permettre aux utilisateurs de s'inscrire comme électeurs afin de pouvoir participer au vote. Créer des sondages : le système doit permettre aux administrateurs de créer des sondages

Comment utiliser PHP pour développer un système de vote pour les comptes publics WeChat Introduction : Avec le développement rapide de l'Internet mobile, les comptes publics WeChat sont devenus l'une des plateformes importantes de marketing et de promotion. Dans les comptes publics, les activités de vote constituent une méthode interactive courante qui peut accroître la fidélité et la participation des utilisateurs. Cet article expliquera comment utiliser PHP pour développer un système de vote pour les comptes publics WeChat et fournira des exemples de code spécifiques. 1. Travail de préparation Avant le développement, vous devez préparer le matériel suivant : un compte développeur d'un compte officiel WeChat. Un serveur disponible pour déployer du code PHP.

À mesure que la technologie blockchain continue de se développer, ses applications dans des domaines tels que les élections et le vote deviennent de plus en plus répandues. Cet article expliquera comment utiliser le langage PHP pour développer un système de vote basé sur la blockchain. 1. Connaissance de base de la blockchain Blockchain est une base de données distribuée décentralisée. Sa structure de données adopte une structure en chaîne. Chaque bloc contient plusieurs transactions et contient également le hachage de la valeur du bloc précédent. Puisque la valeur de hachage de chaque bloc est liée à la valeur de hachage du bloc précédent, la modification des données dans l'un des blocs entraînera un hachage sur toute la chaîne.
