记一次微信小程序的搭建过程。
前端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?>