php+android 搭建后台及显示

来源:互联网 发布:淘宝优惠券微信公众号 编辑:程序博客网 时间:2024/06/03 18:06

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)
  1. 默认编码要设成utf-8,否则插入中文会成问号
  2. mid是慕课网视频的id,我的数据是从慕课网抓取的

然后插入了测试数据,写了三个php文件。

连接文件

<?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);?>

获取课程页面

<?php/* * 获得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’]’这句会出错,单引号不加也出错,换成双引号也出错,最后换成变量就能使了???

<?php/* 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<Titles> 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<Titles> getSuptitle() {        return suptitle;    }    public void setSuptitle(List<Titles> 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<List<Course>> 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<List<Course>> call = service.getCourses(position);                call.enqueue(new Callback<List<Course>>() {                    @Override                    public void onResponse(Call<List<Course>> call, Response<List<Course>> response) {                        courses.addAll(response.body());                        adapter.setList(courses);                    }                    @Override                    public void onFailure(Call<List<Course>> call, Throwable t) {                        t.printStackTrace();                    }                });

另一个Titles请求写法与Course差不多,不贴代码了。

0 0