Mayx's Home Page https://mabbs.github.io
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

130 lines
3.4 KiB

  1. ---
  2. layout: post
  3. title: 如何自己写一个博客计数器
  4. tags: [计数器]
  5. ---
  6. 都怪LeanCloud,我得自己写计数器了!<!--more-->
  7. # 事件起因
  8. 我之前用的博客计数器是用的LeanCloud作为后台制作的计数器,然后嘛……代码是抄的。结果最近[LeanCloud凉了](https://blog.avoscloud.com/6841/),这让我无法忍受,之前的代码我也看不懂,改也不会改……
  9. 那好吧,我只好自己写计数器了。
  10. 于是我花了很长时间,自己写了一个计数器,另外还得把原来的计数器信息转移过来……
  11. # 使用方法
  12. ## 前端部分
  13. 主页显示点击数:
  14. ```html
  15. {% raw %}Hits: <span id="{{ post.url }}" class="visitors-index" >Loading...</span>{% endraw %}
  16. ```
  17. 内页显示点击数:
  18. ```html
  19. {% raw %} Hits: <span id="{{ page.url }}" class="visitors" >Loading...</span>{% endraw %}
  20. ```
  21. JS代码:(需要Jquery)
  22. ```js
  23. var auxiliaryHost = "你的域名";
  24. function showHitS(hits){
  25. $.get(auxiliaryHost+"/counter.php?action=show&id="+hits.id,function(data){
  26. hits.innerHTML=Number(data);
  27. });
  28. }
  29. function showHitCount() {
  30. var visitors=$(".visitors-index");
  31. for(var i = 0; i < visitors.length; i++){
  32. showHitS(visitors[i]);
  33. }
  34. }
  35. function addCount() {
  36. var visitors=$(".visitors");
  37. $.get(auxiliaryHost+"/counter.php?action=add&id="+visitors[0].id,function(data){
  38. visitors[0].innerHTML=Number(data);
  39. });
  40. }
  41. if ($('.visitors').length == 1) {
  42. addCount();
  43. } else if ($('.visitors-index').length > 0){
  44. showHitCount();
  45. }
  46. ```
  47. 2021.03.23更新:修复了一些BUG并且支持异步了
  48. ## 后端部分
  49. MySQL建表:
  50. ```sql
  51. CREATE TABLE `counter` (
  52. `url` char(50) NOT NULL,
  53. `counter` int(11) NOT NULL,
  54. UNIQUE KEY `url` (`url`)
  55. );
  56. ```
  57. PHP:
  58. ```php
  59. <?php
  60. header('Access-Control-Allow-Origin: *');
  61. $con=mysqli_connect("MySQL地址","用户名","密码","数据库名");
  62. if (mysqli_connect_errno($con))
  63. {
  64. die("连接 MySQL 失败: " . mysqli_connect_error());
  65. }
  66. $hid = md5($_GET['id']);
  67. if ( $_GET['action'] == "show" ) {
  68. $sql = "SELECT * FROM `counter` WHERE `url` = '".$hid."' ";
  69. $result = $con->query($sql);
  70. if ($result->num_rows > 0) {
  71. while($row = $result->fetch_assoc()) {
  72. echo $row["counter"];
  73. }
  74. } else {
  75. $sql = "INSERT INTO `counter` (`url`, `counter`)
  76. VALUES ('".$hid."', '0')";
  77. if ($con->query($sql) === TRUE) {
  78. echo "0";
  79. }else{
  80. echo "Error";
  81. }
  82. }
  83. } elseif ( $_GET['action'] == "add" ) {
  84. $sql = "SELECT * FROM `counter` WHERE `url` = '".$hid."' ";
  85. $result = $con->query($sql);
  86. if ($result->num_rows > 0) {
  87. while($row = $result->fetch_assoc()) {
  88. $sql = "UPDATE `counter` SET `counter` = '".($row["counter"]+1)."' WHERE `url` = '".$hid."'";
  89. $con->query($sql);
  90. echo ($row["counter"]+1);
  91. }
  92. } else {
  93. $sql = "INSERT INTO `counter` (`url`, `counter`)
  94. VALUES ('".$hid."', '1')";
  95. if ($con->query($sql) === TRUE) {
  96. echo "1";
  97. }else{
  98. echo "Error";
  99. }
  100. }
  101. } else {
  102. header("HTTP/1.1 301 Moved Permanently");
  103. header("Location: https://mabbs.github.io");
  104. }
  105. mysqli_close($con);
  106. ```
  107. # 结果
  108. 看来还是自己写代码放心,至少服务是自己维护的,不像垃圾LeanCloud坏掉之后我就无能为力了……
  109. 不过说实话我根本不会JS(虽然我之前说我学这个),编写之中遇到了不少问题,所以在此感谢各位帮助我的各位大佬们,让我最终完成了这个计数器。

Powered by TurnKey Linux.