微信小程序

 技术  前后端  PHP  SQL  微信小程序 󰈭 2070字

记一次微信小程序的搭建过程。

前端wxml+wxss+js,后端apache2+php+mysql

尽管为了完成微信小程序的基本功能只需要略知上述内容的皮毛即可,但是从零开始仍然是过程坎坷,花费了许多夜晚才略有成效;故特此记录。

后端apache服务器的配置

apache2

最初不知道从哪里安装了一个不带有mysqli库的apache2,导致我顶着超长的延迟在服务器修了一年还是不知道怎么搞出来。

最后根据另外一篇博文执行了一个安装许多拓展的指令,成功安装上mysqli.

mysql

安装mysql比较一帆风顺;注意修改之打算用于远程访问服务器的用户为最高权限,同时加上密码以防止恶意破坏(虽然应该并没有人会打算破坏我这个什么都没有的服务器)。

php

确实是没有想到0202年了还要用php

不过这可能是因为我从来没有接触过后端服务器,才一度见识浅薄地以为php是上古时期才存在的服务器语言。

 1<?php
 2$servername = "xxx:3306";
 3$username = "root";
 4$password = "xxx";
 5
 6$age = $_GET['age'];
 7//$age = 15;
 8$id = $_GET['id'];
 9//$id = "215100test";
10// 创建连接
11
12$conn = mysqli_connect($servername, $username, $password);
13// 检测连接
14if ($conn->connect_error) {
15    die("连接失败");
16} 
17
18//向数据库中插入数据
19$sql = "INSERT INTO main(age, id) VALUES (" .$age .",  '" .$id."')";
20
21if(mysqli_query($conn, "use temp;") == TRUE)
22	echo "CHANGE SUCCED; ";
23else die("changed failed");
24
25if (mysqli_query($conn, $sql) === TRUE)
26    echo "succeed";
27else echo "Error creating database: ";
28$conn->close();
29
30?>

第一个成功的php程序。可以直接通过访问ip地址+子网页名称得到success的消息。

并且实践证明,L21的use指令是必要的,这是mysql对于insert所要求保证的。

实现wxapp中记账本数据的上传和下载

在实践中,因为最终新建了一个wxapp的数据库用于实战,但root权限只在之前测试时修改为最高过,导致use指令一直不成功。

1GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.100' IDENTIFIED BY '$密码' WITH GRANT OPTION;
2flush privileges;

前端wxapp的配置

初步成功地实现wx.request指令

线形的markdown文本结构显然是很难表现出我在并行研究这两块的时间顺序的,但是也只能以此进行粗略的记录。

初步构建完第一个php查询程序后,最迫切想去实现的当然是wx.request指令。

 1wx.request({
 2      url: 'http://xxx/wxapp.php',
 3      data:{
 4        age: 11415,
 5        id: '230302'
 6      },
 7      success: function (res) {
 8        console.log("OK");
 9        console.log(res.data)
10      },
11      fail:function(){
12        console.log("NO");
13      }
14})

最开始一直被各种奇怪的错误卡死,说我查询失败。

经过检查后发现,首先要把php中的use指令加上,能够完成上述通过web浏览器访问。然后又抱错说我的url是无效的,翻阅了网友的博客才发现不能直接将ip地址写入url,而要加上http://,实在是非常的神奇。因为没有好好学习计算机网络,并且只检验了https://$ip地址/wxwapp.php是无法访问的,没有考虑到http://是默认的网络协议,导致卡了非常多的时间。

wx.navigateTo

该指令可以从一个页面跳转到另一个界面,值得注意的是,其中的url不能填写tabBar,并且url不需要加任何后缀!

js中自定义sort的比较方法

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。 若 a 等于 b,则返回 0。 若 a 大于 b,则返回一个大于 0 的值。 注意:b的值是数组遍历到的当前值,a是数组遍历到的下一个值(即b的下一个)

???所以说为什么会有这种神秘的方法

难怪我直接return一个不等式回去总是出错

js中需要return3种值,所以要用减号

orz

附录

mysqli部分语法

创建数据库:create database $name;

选择数据库:use $name;

查询数据库中有哪些数据表:show tables;

展示一个数据表:desc $TableName;

修改数据表中的列:alter table $tableName change $原名称 $新名称 $数据类型

删除表中行信息:delete from $tableName [where...]

撤销主键: ALTER TABLE $tableName DROP PRIMARY KEY

cashflow.php

  1<?php
  2$conn = mysqli_connect("xxx", "root", "xxx");
  3
  4if(!$conn)
  5	die("链接失败!");
  6
  7if(!mysqli_query($conn, "use wxapp")) die("数据库选择失败!");
  8
  9$op = $_GET['op'];
 10$title = $_GET['title'];
 11$id = $_GET['id'];
 12$subtitle = $_GET['subtitle'];
 13$cost = $_GET['cost'];
 14$date = $_GET['date'];
 15$time = $_GET['time'];
 16$typeindex = $_GET['typeindex'];
 17$hasLocation = $_GET['hasLocation'];
 18$errMsy = $_GET['errMsy'];
 19$locationName = $_GET['locationName'];
 20$locationAddress = $_GET['locationAddress'];
 21$latitude = $_GET['latitude'];
 22$longitude = $_GET['longitude'];
 23$submitTime = $_GET['submitTime'];
 24$old_submitTime = $_GET['old_submitTime'];
 25$openId = $_GET['openId'];
 26$flag= $_GET['flag'];
 27
 28class INFO{
 29    public $title;
 30    public $id;
 31    public $subtitle;
 32    public $cost;
 33    public $date;
 34    public $time;
 35    public $typeindex;
 36    public $hasLocation;
 37    public $errMsy;
 38    public $locationName;
 39    public $locationAddress;
 40    public $latitude;
 41    public $longitude;
 42    public $submitTime;
 43    public $flag;
 44}
 45$json = '';
 46$data = array();
 47
 48
 49if($op == 'INSERT'){
 50    $sql = "insert into cashflow (title, id, subtitle, cost, date, time, typeindex, hasLocation, errMsy, locationName, locationAddress, latitude, longitude, submitTime, openId, flag) values(
 51        '" .$title. "',
 52    '" .$id. "',
 53    '" .$subtitle. "',
 54    '" .$cost. "',
 55    '" .$date. "',
 56    '" .$time. "',
 57    '" .$typeindex. "',
 58    '" .$hasLocation. "',
 59    '" .$errMsy. "',
 60    '" .$locationName. "',
 61    '" .$locationAddress. "',
 62    '" .$latitude. "',
 63    '" .$longitude. "',
 64    '" .$submitTime. "',
 65    '" .$openId. "',
 66    '" .$flag. "'
 67    )";
 68    if(!mysqli_query($conn, $sql)){
 69        die("Insert failed!");
 70    }
 71    else echo "Insert OK!";
 72}
 73else if($op == 'UPDATE'){
 74    $sql = "update cashflow set
 75    subtitle='" .$subtitle. "', 
 76    cost='" .$cost. "', 
 77    date='" .$date. "', 
 78    time='" .$time. "', 
 79    typeindex='" .$typeindex. "', 
 80    hasLocation='" .$hasLocation. "', 
 81    errMsy='" .$errMsy. "', 
 82    locationName='" .$locationName. "', 
 83    locationAddress='" .$locationAddress. "',
 84    latitude='" .$latitude. "', 
 85    longitude='" .$longitude. "', 
 86    submitTime='" .$submitTime. "'
 87    where openId='" .$openId. "' && title='" .$title. "' && id='" .$id. "' && submitTime='" .$old_submitTime. "'";
 88
 89    if(mysqli_query($conn, $sql) != true) die("Update failed!");
 90    else echo "Update OK!";
 91}
 92else if($op == 'DELETE'){
 93    $sql = "delete from cashflow
 94    where submitTime='" .$submitTime. "'";
 95    if(mysqli_query($conn, $sql) != true) die("Delte failed!");
 96    else echo "Delete OK!";
 97}
 98else if($op == 'DELETEBOOK'){
 99    $sql = "delete from cashflow
100    where id='" .$id. "'";
101    if(mysqli_query($conn, $sql) != true) die("DelteBook failed!");
102    else echo "DeleteBook OK!";
103}
104else if($op == 'QUERY'){
105    $res = mysqli_query($conn, "select * from cashflow where openId='" .$openId. "'");
106    // $res = mysqli_query($conn, "select * from cashflow");
107    if(!$res) die("Query failed!");
108    else{
109        while($row = mysqli_fetch_array($res)){
110            $info = new INFO();
111            $info->title = $row["title"];
112            $info->id = $row["id"];
113            $info->subtitle = $row["subtitle"];
114            $info->cost = $row["cost"];
115            $info->date = $row["date"];
116            $info->time = $row["time"];
117            $info->typeindex = $row["typeindex"];
118            $info->hasLocation = $row["hasLocation"];
119            $info->errMsy = $row["errMsy"];
120            $info->locationName = $row["locationName"];
121            $info->locationAddress = $row["locationAddress"];
122            $info->latitude = $row["latitude"];
123            $info->longitude = $row["longitude"];
124            $info->submitTime = $row["submitTime"];
125            $info->flag = $row["flag"];
126            $data[] = $info;
127        }
128        $json = json_encode($data);
129        // echo "{".'"data"'.":".$json."}";
130        echo $json;
131    }
132}
133else if($op == 'RENAME'){
134    $sql = "update cashflow set
135    title = '" .$title. "'
136    where openId = '" .$openId. "' && id = '" .$id. "'";
137
138    if(!mysqli_query($conn, $sql)) die("Rename failed!");
139    else echo "Rename OK!";
140    // echo $sql; die;
141}
142else if($op == 'INSERTCOL'){
143    $sql = "insert into cashflow (title, id, flag, submitTime, openId) values(
144        '" .$title. "',
145        '" .$id. "',
146        '" .$flag. "',
147        '" .$submitTime. "',
148        '" .$openId. "'
149        )";
150    if(!mysqli_query($conn, $sql)){
151        die("InsertCol failed!");
152    }
153    else echo "InsertCol OK!";
154    // echo $sql; die;
155}
156else die("Invalid Input!");
157
158
159$conn->close();
160?>
嗨! 这里是 rqdmap 的个人博客, 我正关注 GNU/Linux 桌面系统, Linux 内核, 后端开发, Python, Rust 以及一切有趣的计算机技术! 希望我的内容能对你有所帮助~
如果你遇到了任何问题, 包括但不限于: 博客内容说明不清楚或错误; 样式版面混乱等问题, 请通过邮箱 rqdmap@gmail.com 联系我!
修改记录:
  • 2023-05-29 23:05:14大幅重构了python脚本的目录结构,实现了若干操作博客内容、sqlite的助手函数;修改原本的文本数 据库(ok)为sqlite数据库,通过嵌入front-matter的page_id将源文件与网页文件相关联
  • 2023-05-08 21:44:36博客架构修改升级
  • 2022-11-16 01:27:34迁移老博客文章内容
微信小程序