Inhaltsverzeichnis
添加投票项
Heim Backend-Entwicklung PHP-Tutorial PHP+MySQL投票系统的设计和实现分享_PHP

PHP+MySQL投票系统的设计和实现分享_PHP

Jun 01, 2016 pm 12:10 PM
投票系统

系统不大,完成这个系统的过程我分了三个步骤
•数据库设计
•系统框架设计
•前端美化

数据库的设计
设计三张表:投票结果统计表(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 = '/(?

  • )(.*)(?=)/isU';
    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+="
  • Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

    Heiße KI -Werkzeuge

    Undresser.AI Undress

    Undresser.AI Undress

    KI-gestützte App zum Erstellen realistischer Aktfotos

    AI Clothes Remover

    AI Clothes Remover

    Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

    Undress AI Tool

    Undress AI Tool

    Ausziehbilder kostenlos

    Clothoff.io

    Clothoff.io

    KI-Kleiderentferner

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    Heiße Werkzeuge

    Notepad++7.3.1

    Notepad++7.3.1

    Einfach zu bedienender und kostenloser Code-Editor

    SublimeText3 chinesische Version

    SublimeText3 chinesische Version

    Chinesische Version, sehr einfach zu bedienen

    Senden Sie Studio 13.0.1

    Senden Sie Studio 13.0.1

    Leistungsstarke integrierte PHP-Entwicklungsumgebung

    Dreamweaver CS6

    Dreamweaver CS6

    Visuelle Webentwicklungstools

    SublimeText3 Mac-Version

    SublimeText3 Mac-Version

    Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

    Entwickeln Sie ein Web-Abstimmungssystem mit JavaScript Entwickeln Sie ein Web-Abstimmungssystem mit JavaScript Aug 09, 2023 pm 01:30 PM

    Verwendung von JavaScript zur Entwicklung eines Web-Abstimmungssystems Zusammenfassung: Mit der rasanten Entwicklung des Internets ist Online-Abstimmung zu einer bequemen und schnellen Möglichkeit geworden, öffentliche Meinungen einzuholen und Entscheidungen zu treffen. In diesem Artikel wird die Verwendung von JavaScript zur Entwicklung eines einfachen Web-Abstimmungssystems vorgestellt, das es Benutzern ermöglicht, Optionen auszuwählen und Stimmen abzugeben. Einführung: Ein Web-Voting-System ist ein Programm, das mehrere Optionen auf einer Webseite anzeigt und den Benutzern die Auswahl ermöglicht. Es kann in vielen Szenarien eingesetzt werden, z. B. bei Wahlabstimmungen, Produktumfragen, Meinungseinholung usw. Dieser Artikel

    In PHP implementiertes Online-Abstimmungssystem für mehrere Benutzer In PHP implementiertes Online-Abstimmungssystem für mehrere Benutzer Aug 10, 2023 pm 05:49 PM

    Einführung in das in PHP implementierte Multi-User-Online-Abstimmungssystem: Mit der kontinuierlichen Weiterentwicklung der Internet-Technologie steigt das Bewusstsein der Öffentlichkeit für die Beteiligung an demokratischen Entscheidungsprozessen. Das Online-Wahlsystem wurde ins Leben gerufen, um der Öffentlichkeit eine bequeme, schnelle und transparente Möglichkeit zur Stimmabgabe zu bieten. In diesem Artikel wird erläutert, wie Sie mit PHP ein Mehrbenutzer-Online-Abstimmungssystem schreiben und entsprechende Codebeispiele bereitstellen. 1. Analyse der Systemanforderungen Bevor wir mit dem Schreiben von Code beginnen, müssen wir die Anforderungen und Funktionen des Abstimmungssystems klären. Entsprechend den Merkmalen gängiger Abstimmungssysteme können wir die Systemfunktionen wie folgt unterteilen

    So implementieren Sie ein einfaches Abstimmungssystem mit MySQL und Ruby So implementieren Sie ein einfaches Abstimmungssystem mit MySQL und Ruby Sep 20, 2023 pm 12:37 PM

    So implementieren Sie ein einfaches Abstimmungssystem mit MySQL und Ruby. Ein Abstimmungssystem ist eine gängige Online-Anwendung, mit der Benutzermeinungen zu einem Thema oder Thema gesammelt werden. In diesem Artikel stellen wir vor, wie Sie mithilfe der MySQL-Datenbank und der Programmiersprache Ruby ein einfaches Abstimmungssystem implementieren. Zuerst müssen wir die Umgebung vorbereiten. Stellen Sie sicher, dass Sie die MySQL-Datenbank installiert haben und über eine Ruby-Programmierumgebung verfügen. Wenn es noch nicht installiert ist, können Sie es von der offiziellen Website herunterladen und den Anweisungen zur Installation folgen. Als nächstes brauchen wir

    So entwickeln Sie ein Online-Abstimmungssystem mit Laravel So entwickeln Sie ein Online-Abstimmungssystem mit Laravel Nov 02, 2023 pm 06:31 PM

    So entwickeln Sie mit Laravel ein Online-Abstimmungssystem. Einführung: Mit der Entwicklung des Internets können immer mehr Dinge online erledigt werden, einschließlich Abstimmungen. Online-Abstimmungssysteme können bequem und effizient Meinungen und Feedback einer großen Anzahl von Benutzern sammeln. In diesem Artikel wird die Verwendung des Laravel-Frameworks zur Entwicklung eines grundlegenden Online-Abstimmungssystems vorgestellt und spezifische Codebeispiele bereitgestellt. 1. Umgebungseinrichtung und Laravel-Installation: Stellen Sie sicher, dass PHP und Composer auf Ihrem Computer installiert sind. Wenn nicht, installieren Sie es bitte zuerst. offenes Leben

    Design und Optimierung der Benutzeroberfläche des PHP-Online-Abstimmungssystems Design und Optimierung der Benutzeroberfläche des PHP-Online-Abstimmungssystems Aug 09, 2023 pm 08:45 PM

    Design und Optimierung der Benutzeroberfläche des PHP-Online-Abstimmungssystems Einführung: Mit der Entwicklung des Internets werden verschiedene Online-Abstimmungssysteme immer häufiger eingesetzt. Als quelloffene, funktionsreiche serverseitige Skriptsprache ist PHP zu einer der bevorzugten Sprachen für den Aufbau von Online-Abstimmungssystemen geworden. In diesem Artikel untersuchen wir, wie man die Benutzeroberfläche eines Online-Abstimmungssystems in PHP gestaltet und optimiert. 1. Interface-Design Einfaches und klares Layout-Design Ein gutes User-Interface-Design kann ein benutzerfreundliches Erlebnis bieten. Bei der Gestaltung der Benutzeroberfläche des Abstimmungssystems sollten wir auf das Layout achten

    Wie schreibe ich ein einfaches Abstimmungssystem in C++? Wie schreibe ich ein einfaches Abstimmungssystem in C++? Nov 04, 2023 am 11:24 AM

    Wie schreibe ich ein einfaches Abstimmungssystem in C++? Mit der Entwicklung der Technologie sind Wahlsysteme zu einem weit verbreiteten Instrument in der modernen Gesellschaft geworden. Abstimmungssysteme können in vielen Szenarien wie Wahlen, Umfragen und Entscheidungsfindungen eingesetzt werden. In diesem Artikel erfahren Sie, wie Sie ein einfaches Abstimmungssystem in C++ schreiben. Zunächst müssen wir die Grundfunktionen des Abstimmungssystems klären. Ein einfaches Abstimmungssystem sollte über die folgenden Funktionen verfügen: Wähler registrieren: Das System sollte es Benutzern ermöglichen, sich als Wähler zu registrieren, damit sie an der Abstimmung teilnehmen können. Umfragen erstellen: Das System sollte es Administratoren ermöglichen, Umfragen zu erstellen

    So entwickeln Sie mit PHP ein Abstimmungssystem für öffentliche WeChat-Konten So entwickeln Sie mit PHP ein Abstimmungssystem für öffentliche WeChat-Konten Oct 27, 2023 pm 12:12 PM

    So entwickeln Sie mit PHP ein Abstimmungssystem für öffentliche WeChat-Konten. Einführung: Mit der rasanten Entwicklung des mobilen Internets sind öffentliche WeChat-Konten zu einer wichtigen Plattform für Marketing und Werbung geworden. In öffentlichen Konten sind Abstimmungsaktivitäten eine gängige interaktive Methode, die die Bindung und Beteiligung der Benutzer erhöhen kann. In diesem Artikel wird erläutert, wie Sie mithilfe von PHP ein Abstimmungssystem für öffentliche WeChat-Konten entwickeln, und es werden spezifische Codebeispiele bereitgestellt. 1. Vorbereitungsarbeiten Vor der Entwicklung müssen Sie die folgenden Materialien vorbereiten: ein Entwicklerkonto oder ein offizielles WeChat-Konto. Ein verfügbarer Server für die Bereitstellung von PHP-Code.

    Blockchain-Abstimmungssystem in PHP Blockchain-Abstimmungssystem in PHP Jun 11, 2023 pm 12:03 PM

    Mit der Weiterentwicklung der Blockchain-Technologie werden ihre Anwendungen in Bereichen wie Wahlen und Abstimmungen immer weiter verbreitet. In diesem Artikel wird erläutert, wie Sie mithilfe der PHP-Sprache ein Blockchain-basiertes Abstimmungssystem entwickeln. 1. Grundkenntnisse der Blockchain Blockchain ist eine dezentrale verteilte Datenbank. Ihre Datenstruktur nimmt eine Kettenstruktur an. Jeder Block enthält auch den Hash des vorherigen Blocks. Da der Hash-Wert jedes Blocks mit dem Hash-Wert des vorherigen Blocks zusammenhängt, führt die Änderung der Daten eines beliebigen Blocks zu einem Hash in der gesamten Kette.

    See all articles