ps:最近需要做几个android展示界面,原来用过xampp做简单的回显页面,于是这次后台想用php搭建,于是开始挖坑学习
环境xampp(集成版tomcat+mysql)+phpstrom(开发环境)
首先看了看php的基础语法和常用函数(这个总结不错)
然后创建了一个简单的php页面来连接数据库,极客学院视频,对数据库进行简单增删改查,然后通过页面回显出数据。
我的目标是做出分页请求和上传图片功能,现在还在探索之中。
4.26-已经用php完成了初步的页面回显
我建立了三个表course、suptitle、subtitle(分别是:课程名,一级标题,二级标题),通过phpadmin后台快速建表
course | suptitle | subtitle |
---|---|---|
course_no(int) | suptitle_id(int) | subtitle_id(int) |
course_name(text,utf-8) | suptitle(text,utf-8) | subtitle_text(text,utf-8) |
course_description(text,utf-8) | course_no(int) | mid (int) |
type(int) | suptitle_id (int) |
然后插入了测试数据,写了三个php文件。
连接文件
//数据库的用户名为root,密码为空
$con = mysql_connect("localhost", "root", "");
//设置字符集为utf8
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET utf8");
mysql_query("SET CHARACTER_SET_RESULT=utf8");
if (!$con){
die(mysql_error());
}
//访问数据库interaction_study
mysql_select_db("interaction_study", $con);
?>
获取课程页面
/*
* 获得JSON数据
* 获得type=0的消息:
* http://localhost/interaction_study/getCourseJson.php?type=0
*/
require 'mysql_connect.php';
$n = 0;
$result = mysql_query("select * from course where type='$_GET[type]'");
while ($row = mysql_fetch_array($result)){
$arr[$n++] = array("course_no" => $row['course_no'],
"course_name" => $row['course_name'],
"course_description" => $row['course_description'],
"type" => $row['type']
);
}
echo json_encode($arr);
?>
剩下两个基本和这个类似,就不贴了,然后请求一下,返回了一个json格式的数组
http://localhost/interaction_study/getCourseJson.php?type=0
[{"course_no":"825","course_name":"JS\u63d2\u4ef6\u5f00\u53d1\u4e4b-Tab\u9009\u9879\u5361","course_description":"Tab\u9009\u9879\u5361\uff0c\u4f5c\u4e3a\u7f51\u9875\u5fc5\u4e0d\u53ef\u5c11\u7684\u5c55\u793a\u529f\u80fd\uff0c\u5b83\u7684\u5b58\u5728\u4e0d\u4ec5\u53ef\u4ee5\u5728\u9875\u9762\u4e2d\u5408\u7406\u7684\u5c55\u793a\u5185\u5bb9\uff0c\u4e5f\u7b26\u5408\u5f53\u4e0b\u5b9e\u73b0\u65e0\u5237\u65b0\u5f02\u6b65\u5c55\u793a\u6570\u636e\u7684\u6f6e\u6d41\uff0c\u5b83\u548c\u7126\u70b9\u56fe\u8f6e\u56de\u76f8\u6bd4\u5f02\u66f2\u540c\u5de5\uff0c\u4f46\u672c\u8d28\u4e0d\u540c\uff0c\u5e0c\u671b\u901a\u8fc7\u8fd9\u8282\u65e2\u7b80\u5355\u6709\u666e\u904d\u7684\u4f8b\u5b50\uff0c\u6211\u4eec\u4e00\u4e00\u5256\u6790\u5b83\u7684\u5b9e\u73b0\u539f\u7406\u3002","type":"0"}]
android使用retrofit+rxjava进行请求。(以前没用过这个组合,这个页面做完学习一下原理,又挖了一个坑)
测试的数据比较少,已经用java从慕课网爬了一些数据(不是正则,用的WebCollector库,吐槽下:正则写起来太麻烦了..),到时候写个脚本导入一下。
5.7 看了个简单的php项目,实现分页,
现在继续做,之前大标题和小标题是分开查询的,现在通过一个页面查询出来(又在语法上被坑,已被单引号双引号搞晕,看了几个博客都没看懂,select * from subtitle where suptitle_id=’$sup_row[‘suptitle_id’]’这句会出错,单引号不加也出错,换成双引号也出错,最后换成变量就能使了???
/* interaction_study
* http://localhost/interaction_study/getTitlesJson.php?course_no=825
*/
require 'mysql_connect.php';
$n = 0;
$m = 0;
$suptitles = mysql_query("select * from suptitle where course_no='$_GET[course_no]'");
while ($sup_row = mysql_fetch_array($suptitles)){
$sup_id=$sup_row['suptitle_id'];
$subtitles = mysql_query("select * from subtitle where suptitle_id=$sup_id");
while ($sub_row = mysql_fetch_array($subtitles)){
$subtitle_result[$m++] = array("subtitle_id" => $sub_row['subtitle_id'],
"subtitle_text" => $sub_row['subtitle_text'],
"mid" => $sub_row['mid'],
"suptitle_id" => $sub_row['suptitle_id']
);
}
$titles_result[$n++] = array("suptitle_id" => $sup_row['suptitle_id'],
"course_no" => $sup_row['course_no'],
"suptitle" => $sup_row['suptitle'],
"subtitie_text" => $subtitle_result
);
}
echo json_encode($titles_result);
?>
5.9昨天已经把界面以及网络请求写好了,用的是okhttp+retrofit+rxjava
添加依赖
compile 'com.squareup.retrofit2:retrofit:2.2.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
//实体类
public class Course {
/**
* course_no : 825
* course_name : JS插件开发之-Tab选项卡
* course_description : Tab选项卡,作为网页必不可少的展示功能,它的存在不仅可以在页面中合理的展示内容,也符合当下实现无刷新异步展示数据的潮流,它和焦点图轮回相比异曲同工,但本质不同,希望通过这节既简单有普遍的例子,我们一一剖析它的实现原理。
* type : 0
*/
private int course_no;
private String course_name;
private String course_description;
private int type;
private List suptitle;
public Course(String course_name, String course_description, int type) {
this.course_name = course_name;
this.course_description = course_description;
this.type = type;
}
public List getSuptitle() {
return suptitle;
}
public void setSuptitle(List suptitle) {
this.suptitle = suptitle;
}
public int getCourse_no() {
return course_no;
}
public void setCourse_no(int course_no) {
this.course_no = course_no;
}
public String getCourse_name() {
return course_name;
}
public void setCourse_name(String course_name) {
this.course_name = course_name;
}
public String getCourse_description() {
return course_description;
}
public void setCourse_description(String course_description) {
this.course_description = course_description;
}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
}
//请求接口
public interface CourseService {
@GET("getCourseJson.php")
Call> getCourses(@Query("type") int type);
}
//请求代码
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(APPURL.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build();
CourseService service = retrofit.create(CourseService.class);
Call> call = service.getCourses(position);
call.enqueue(new Callback>() {
@Override
public void onResponse(Call> call, Response> response) {
courses.addAll(response.body());
adapter.setList(courses);
}
@Override
public void onFailure(Call> call, Throwable t) {
t.printStackTrace();
}
});
另一个Titles请求写法与Course差不多,不贴代码了。