mirror of
				https://github.com/Mabbs/mabbs.github.io
				synced 2025-11-04 08:42:52 +08:00 
			
		
		
		
	
		
			
	
	
		
			131 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			131 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								layout: post
							 | 
						|||
| 
								 | 
							
								title: 如何自己写一个博客计数器
							 | 
						|||
| 
								 | 
							
								tags: [计数器]
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  都怪LeanCloud,我得自己写计数器了!<!--more-->   
							 | 
						|||
| 
								 | 
							
								  
							 | 
						|||
| 
								 | 
							
								# 事件起因
							 | 
						|||
| 
								 | 
							
								  我之前用的博客计数器是用的LeanCloud作为后台制作的计数器,然后嘛……代码是抄的。结果最近[LeanCloud凉了](https://blog.avoscloud.com/6841/),这让我无法忍受,之前的代码我也看不懂,改也不会改……   
							 | 
						|||
| 
								 | 
							
								  那好吧,我只好自己写计数器了。   
							 | 
						|||
| 
								 | 
							
								  于是我花了很长时间,自己写了一个计数器,另外还得把原来的计数器信息转移过来……
							 | 
						|||
| 
								 | 
							
								  
							 | 
						|||
| 
								 | 
							
								# 使用方法
							 | 
						|||
| 
								 | 
							
								## 前端部分
							 | 
						|||
| 
								 | 
							
								  主页显示点击数:
							 | 
						|||
| 
								 | 
							
								```html
							 | 
						|||
| 
								 | 
							
								{% raw %}Hits: <span id="{{ post.url }}" class="visitors-index" >Loading...</span>{% endraw %} 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								  内页显示点击数:
							 | 
						|||
| 
								 | 
							
								```html
							 | 
						|||
| 
								 | 
							
								{% raw %} Hits: <span id="{{ page.url }}" class="visitors" >Loading...</span>{% endraw %} 
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								  JS代码:(需要Jquery)
							 | 
						|||
| 
								 | 
							
								```js
							 | 
						|||
| 
								 | 
							
								var auxiliaryHost = "你的域名";
							 | 
						|||
| 
								 | 
							
								function showHitS(hits){
							 | 
						|||
| 
								 | 
							
								    $.get(auxiliaryHost+"/counter.php?action=show&id="+hits.id,function(data){
							 | 
						|||
| 
								 | 
							
								            hits.innerHTML=Number(data);
							 | 
						|||
| 
								 | 
							
								        });
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function showHitCount() {
							 | 
						|||
| 
								 | 
							
								    var visitors=$(".visitors-index");
							 | 
						|||
| 
								 | 
							
								    for(var i = 0; i < visitors.length; i++){
							 | 
						|||
| 
								 | 
							
								        showHitS(visitors[i]);
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								function addCount() {
							 | 
						|||
| 
								 | 
							
								var visitors=$(".visitors");
							 | 
						|||
| 
								 | 
							
								    $.get(auxiliaryHost+"/counter.php?action=add&id="+visitors[0].id,function(data){
							 | 
						|||
| 
								 | 
							
								        visitors[0].innerHTML=Number(data);
							 | 
						|||
| 
								 | 
							
								    });
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								if ($('.visitors').length == 1) {
							 | 
						|||
| 
								 | 
							
								    addCount();
							 | 
						|||
| 
								 | 
							
								} else if ($('.visitors-index').length > 0){
							 | 
						|||
| 
								 | 
							
								    showHitCount();
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								  2021.03.23更新:修复了一些BUG并且支持异步了
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								## 后端部分
							 | 
						|||
| 
								 | 
							
								  MySQL建表:
							 | 
						|||
| 
								 | 
							
								```sql
							 | 
						|||
| 
								 | 
							
								CREATE TABLE `counter` (
							 | 
						|||
| 
								 | 
							
								  `url` char(50) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  `counter` int(11) NOT NULL,
							 | 
						|||
| 
								 | 
							
								  UNIQUE KEY `url` (`url`)
							 | 
						|||
| 
								 | 
							
								);
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								  PHP:
							 | 
						|||
| 
								 | 
							
								```php
							 | 
						|||
| 
								 | 
							
								<?php
							 | 
						|||
| 
								 | 
							
								header('Access-Control-Allow-Origin: *');
							 | 
						|||
| 
								 | 
							
								$con=mysqli_connect("MySQL地址","用户名","密码","数据库名"); 
							 | 
						|||
| 
								 | 
							
								if (mysqli_connect_errno($con)) 
							 | 
						|||
| 
								 | 
							
								{ 
							 | 
						|||
| 
								 | 
							
								    die("连接 MySQL 失败: " . mysqli_connect_error()); 
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								$hid = md5($_GET['id']);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								if ( $_GET['action'] == "show" ) {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								$sql = "SELECT * FROM `counter` WHERE `url` = '".$hid."' ";
							 | 
						|||
| 
								 | 
							
								$result = $con->query($sql);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								if ($result->num_rows > 0) {
							 | 
						|||
| 
								 | 
							
								    while($row = $result->fetch_assoc()) {
							 | 
						|||
| 
								 | 
							
								        echo $row["counter"];
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								$sql = "INSERT INTO `counter` (`url`, `counter`)
							 | 
						|||
| 
								 | 
							
								VALUES ('".$hid."', '0')";
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								if ($con->query($sql) === TRUE) {
							 | 
						|||
| 
								 | 
							
								    echo "0";
							 | 
						|||
| 
								 | 
							
								}else{
							 | 
						|||
| 
								 | 
							
								echo "Error";
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								} elseif ( $_GET['action'] == "add" ) {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								$sql = "SELECT * FROM `counter` WHERE `url` = '".$hid."' ";
							 | 
						|||
| 
								 | 
							
								$result = $con->query($sql);
							 | 
						|||
| 
								 | 
							
								if ($result->num_rows > 0) {
							 | 
						|||
| 
								 | 
							
								    while($row = $result->fetch_assoc()) {
							 | 
						|||
| 
								 | 
							
								$sql = "UPDATE `counter` SET `counter` = '".($row["counter"]+1)."' WHERE `url` = '".$hid."'";
							 | 
						|||
| 
								 | 
							
								$con->query($sql);
							 | 
						|||
| 
								 | 
							
								        echo ($row["counter"]+1);
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								$sql = "INSERT INTO `counter` (`url`, `counter`)
							 | 
						|||
| 
								 | 
							
								VALUES ('".$hid."', '1')";
							 | 
						|||
| 
								 | 
							
								 
							 | 
						|||
| 
								 | 
							
								if ($con->query($sql) === TRUE) {
							 | 
						|||
| 
								 | 
							
								    echo "1";
							 | 
						|||
| 
								 | 
							
								}else{
							 | 
						|||
| 
								 | 
							
								echo "Error";
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								} else {
							 | 
						|||
| 
								 | 
							
								header("HTTP/1.1 301 Moved Permanently");
							 | 
						|||
| 
								 | 
							
								header("Location: https://mabbs.github.io");
							 | 
						|||
| 
								 | 
							
								}
							 | 
						|||
| 
								 | 
							
								mysqli_close($con);
							 | 
						|||
| 
								 | 
							
								```
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								# 结果
							 | 
						|||
| 
								 | 
							
								  看来还是自己写代码放心,至少服务是自己维护的,不像垃圾LeanCloud坏掉之后我就无能为力了……   
							 | 
						|||
| 
								 | 
							
								  不过说实话我根本不会JS(虽然我之前说我学这个),编写之中遇到了不少问题,所以在此感谢各位帮助我的各位大佬们,让我最终完成了这个计数器。
							 |