


Partage de conception et d'implémentation du système de vote PHP plus MySQL
Cet article partage avec vous la conception et la mise en œuvre du système de vote PHP plus MySQL. Les amis dans le besoin peuvent se référer à la conception et à la mise en œuvre du système de vote
php. Les amis dans le besoin peuvent se référer au code. ci-dessous. Avec la conception des résultats de la base de données, Script House a finalement fourni le code source à télécharger
Le système n'est pas grand, j'ai donc divisé le processus de réalisation de ce système en trois étapes
•Conception de la base de données
•Conception du cadre du système
•Embellissement du front-end
Conception de la base de données
Concevoir trois tableaux : tableau de statistiques des résultats de vote (count_voting), tableau d'enregistrement des électeurs (ip_votes), tableau des utilisateurs (utilisateur)
Le tableau des statistiques des résultats du vote est utilisé pour compter les enregistrements de vote finaux. J'ai 4 champs pour cela : le nom de l'élément voté (SelectName), le nom de l'étiquette de l'élément voté (LabelName) (qui joue. un rôle dans le classement), et le nombre de votes (CountVotes) .
Le tableau d'enregistrement des électeurs est utilisé pour enregistrer l'adresse IP (IP), l'emplacement géographique (Location), l'heure du vote (VoteTime) et le nom de l'élément voté (SelectName). Ensuite, j'y ajoute également un identifiant.
La table des utilisateurs est principalement utilisée pour les administrateurs, y compris le nom d'utilisateur (name) et le mot de passe (passwd).
Le script sql pour générer la table est le suivant :
Copier le code Le code est le suivant :
-- -- 表的结构 `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;
Comme le montre le script, I Un déclencheur est créé qui ajoute 1 au champ CountVotes dans la table count_voting lorsque les données sont insérées dans la table ip_votes. La dernière phrase peut également être utilisée pour définir des mots apparentés externes.
Conception du framework
La classe OperatorDB est utilisée pour faire fonctionner la base de données et la classe OperatorVotingDB est utilisée pour l'ensemble d'opérations spécifiques au système.
Utiliser PDO pour faire fonctionner la base de données, je l'encapsule simplement :
Copiez le code Le code est le suivant :
/** * 操作数据库 * 封装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("<br/>数据库连接失败(creater PDO Error!): ".$e->getMessage()."<br/>"); } } public function __destruct() { $this->pdo = null; } public function exec($sql) { } public function query($sql) { } }
Se connecter à la base de données Les informations sont encapsulées pour faciliter les opérations ultérieures.
Copier le code Le code est le suivant :
<?php 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."<br>"; // echo $row[0][0]; if ($time-$row[0][0]<1)//表中最大的时间和现在的时间$time比较 { 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); } } ?> 下面还有需要的函数 复制代码 代码如下: <?php /** * 页面跳转函数 * 使用js实现 * @param string $url */ function goToPgae($url) { echo "<script language='javascript' type='text/javascript'>"; echo "window.location.href='$url'"; echo "</script>"; } function jsFunc($fun, $arg=null) { echo "<script language='javascript' type='text/javascript'>"; echo $fun."('$arg');"; echo "</script>"; } function jsFunc3($fun, $arg1=null,$arg2=null,$arg3=null) { echo "<script language='javascript' type='text/javascript'>"; echo $fun."('$arg1','$arg2','$arg3');"; echo "</script>"; //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 = '/(?<=本站主数据:<\/li><li style=\"width:450px;\">)(.*)(?=<\/li>)/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 = '/(?<=<p class=\"op_ip_detail\">)(.*)(?=<\/p>)/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; } ?>
Ensuite, il y a comment effectuer les opérations de l'administrateur en arrière-plan, principalement le fonction d'ajout d'éléments de vote, la base de données d'opération a été implémentée ci-dessus. Ce qui suit explique essentiellement comment configurer la page, qui est liée à js. La page d'ajout d'éléments de vote est dynamique, de la façon suivante :
Copier le code Le code est le suivant :
function addVote() { right.innerHTML="<h2 id="添加投票项">添加投票项</h2>"; right.innerHTML+="<label>投票项标签<label>"; addInput("right","cLabelName","地区名"); right.innerHTML+="<br><label>投票项名称<label>"; addInput("right","cSelectName","学校名"); right.innerHTML+="<br>"; var args = '\'./add.php\',\'cSelectName\',\'cLabelName\''; var str = '<input type=button value="\u6dfb加" onclick="goToPage('+args+');"/>'; right.innerHTML+=str; } //添加文本框 function addInput(parent,id,pla) { //创建input var input = document.createElement("input"); input.type = "text"; input.id = id; input.placeholder = pla; document.getElementById(parent).appendChild(input); }
Effet :
La suppression des éléments de vote est similaire, comme suit :
Pour ajouter des éléments de vote, vous transmettez des variables au module d'ajout .php via l'URL.
Copier le code Le code est le suivant :
<?php require_once '../api/func.php'; if (!isLoginNow()) { goToPgae("./index.php"); } $name = $_GET["cSelectName"]; $label = $_GET["cLabelName"]; //echo $name."<br>".$label; require_once '../api/OperatorVotingDB.php'; $ovdb=new OperatorVotingDB(); $ovdb->addSelectName($name,$label); require './header.htm'; goToPgae("./admin.php?page=add&auto="."$label"."&id=cLabelName&foc=cSelectName&msg=添加成功"); ?>
Voici deux fonctions pour accéder à la page, js (le saut dans func. php ci-dessus, les fonctions de page sont également implémentées via js).
Copier le code Le code est le suivant :
//js function goToPage(url,arg1,arg2) { var a = document.getElementById(arg1).value; var b = document.getElementById(arg2).value; url += '?'+arg1+'='+a; url += '&'+arg2+'='+b; window.location.href=url; } function goToPage1(url) { window.location.href=url; }
La fonction de modification et de suppression n'est pas implémentée. Je ne pourrai probablement pas implémenter cela, c'est presque la même chose que d'ajouter des fonctionnalités dans js.
Il existe de nombreuses imitations sur Internet concernant le module de connexion. Soumettez simplement le formulaire, recherchez dans la base de données et renvoyez les résultats. En cas de succès, un cookie est défini et chaque page en arrière-plan est ajoutée avec la fonction de détection des cookies.
Embellissement du front-end
La page index.php exploite d'abord la base de données pour obtenir les éléments de vote et le nombre de votes, puis les affiche (utilisez css+p pour embellir l'interface du cadre ou quelque chose du genre), et enfin cliquez sur le bouton de vote pour soumettre le formulaire et accédez à la page vote.php.
Pour le CSS, je l'ai copié depuis Internet. L'effet que j'ai obtenu est le suivant :
Cette chose est considérée comme un très petit système de gestion d'informations. J'ai mis le code source de cette chose sur github (https. : //github.com/hanxi/voting) est téléchargé. Vous pouvez le télécharger et le modifier à volonté ou le télécharger depuis Script Home (cliquez pour télécharger). Les lecteurs sont invités à répondre et à communiquer. Cet aspect n'est pas mon point fort, j'ai de nombreux défauts et j'espère que vous pourrez me donner quelques conseils.
Auteur : Han Xi (Blog technologique de Han Xi - Blog Park)
Weibo : t.qq.com/hanxi1203
Source : hanxi.cnblogs.com
Connexe recommandé :
Configuration php Paramètres de démarrage php-fpm et détails de configuration
Résumé du débogage pour les programmeurs PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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

AI Hentai Generator
Générez AI Hentai gratuitement.

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)

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

PHP et Python ont chacun leurs propres avantages et choisissent en fonction des exigences du projet. 1.Php convient au développement Web, en particulier pour le développement rapide et la maintenance des sites Web. 2. Python convient à la science des données, à l'apprentissage automatique et à l'intelligence artificielle, avec syntaxe concise et adaptée aux débutants.

Le PHP reste important dans le développement Web moderne, en particulier dans la gestion de contenu et les plateformes de commerce électronique. 1) PHP a un écosystème riche et un fort soutien-cadre, tels que Laravel et Symfony. 2) L'optimisation des performances peut être obtenue via Opcache et Nginx. 3) PHP8.0 introduit le compilateur JIT pour améliorer les performances. 4) Les applications natives dans le cloud sont déployées via Docker et Kubernetes pour améliorer la flexibilité et l'évolutivité.

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Les raisons pour lesquelles PHP est la pile technologique préférée pour de nombreux sites Web incluent sa facilité d'utilisation, son soutien communautaire solide et son utilisation généralisée. 1) Facile à apprendre et à utiliser, adapté aux débutants. 2) Avoir une énorme communauté de développeurs et des ressources riches. 3) Largement utilisé dans WordPress, Drupal et d'autres plateformes. 4) Intégrez étroitement aux serveurs Web pour simplifier le déploiement du développement.

PHP est un langage de script largement utilisé du côté du serveur, particulièrement adapté au développement Web. 1.Php peut intégrer HTML, traiter les demandes et réponses HTTP et prend en charge une variété de bases de données. 2.PHP est utilisé pour générer du contenu Web dynamique, des données de formulaire de traitement, des bases de données d'accès, etc., avec un support communautaire solide et des ressources open source. 3. PHP est une langue interprétée, et le processus d'exécution comprend l'analyse lexicale, l'analyse grammaticale, la compilation et l'exécution. 4.PHP peut être combiné avec MySQL pour les applications avancées telles que les systèmes d'enregistrement des utilisateurs. 5. Lors du débogage de PHP, vous pouvez utiliser des fonctions telles que error_reportting () et var_dump (). 6. Optimiser le code PHP pour utiliser les mécanismes de mise en cache, optimiser les requêtes de base de données et utiliser des fonctions intégrées. 7

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

PHP est toujours dynamique et occupe toujours une position importante dans le domaine de la programmation moderne. 1) La simplicité de PHP et le soutien communautaire puissant le rendent largement utilisé dans le développement Web; 2) sa flexibilité et sa stabilité le rendent exceptionnelle dans la gestion des formulaires Web, des opérations de base de données et du traitement de fichiers; 3) PHP évolue et optimise constamment, adapté aux débutants et aux développeurs expérimentés.
