http://www.cnblogs.com/kissdodog/p/4159176.html
想要自己一个人完成app,那么后台接口也必须自己动动手。不用担心,其实很简单的,给自己信心!
下面就以登录注册为例,做一个api接口
首先在mac上搭建PHP环境,下载 MAMP Pro for Mac 3.4 破解版:
http://www.ifunmac.com/2015/08/mamp-pro-3-4/
即可一键安装Apache/PHP/MySQL开发环境。简单吧。
有了环境就可以写代码了:
首先写一个Config.php (配置数据库)

1 <?php
2
3 //定义数据库连接所需的变量
4 define("DB_HOST", "localhost");
5 define("DB_USER", "root");
6 define("DB_PASSWORD", "master12!");
7 define("DB_DATABASE", "loginAPI");
8
9 ?>

写一个DB_Connect.php(用于连接数据库)

1 <?php
2
3 class DB_Connect
4 {
5 public $con;
6
8 function __construct()
9 {
10
11 }
12
14 function __destruct()
15 {
16 // $this->close();
17 }
18
19 //连接数据库
20 public function connect()
21 {
22 require_once 'include/Config.php';
23 //连接mysql
24 $this->con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE) or die(mysqli_error($this->con));
25 if (mysqli_connect_errno()) {
26 die("Database connection failed");
27 }
28
29 // 返回 database handler
30 return $this->con;
31 }
32
33 //关闭数据连接
34 public function close()
35 {
36 mysqli_close($this->con);
37 }
38
39 }
40
41 ?>

再来一个:DB_Functions.php (用来封装 执行sql后 返回数据的方法)

1 <?php
2
3 class DB_Functions {
4
5 private $db;
6
7 // constructor
8 function __construct() {
9 require_once 'DB_Connect.php';
10 // connecting to database
11 $this->db = new DB_Connect();
12 $this->db->connect();
13 }
14
15 // destructor
16 function __destruct() {
17
18 }
19
20 /**
21 * 添加用户信息
22 */
23 public function storeUser($name, $email, $password) {
24 $uuid = uniqid('', true);
25 $hash = $this->hashSSHA($password);
26 $encrypted_password = $hash["encrypted"]; // 加密后的密文
27 $salt = $hash["salt"]; // salt
28 $result = mysqli_query($this->db->con,"INSERT INTO users(unique_id, name, email, encrypted_password, salt, created_at) VALUES('$uuid', '$name', '$email', '$encrypted_password', '$salt', NOW())");
29 // 检查结果
30 if ($result) {
31 // 获取用户信息
32 $uid = mysqli_insert_id($this->db->con); // 获取最新的id
33 $result = mysqli_query($this->db->con,"SELECT * FROM users WHERE uid = $uid");
34 //返回刚插入的用户信息
35 return mysqli_fetch_array($result);
36 } else {
37 return false;
38 }
39 }
40
41 /**
42 * 通过email和password获取用户信息
43 */
44 public function getUserByEmailAndPassword($email, $password) {
45 $result = mysqli_query($this->db->con,"SELECT * FROM users WHERE email = '$email'") or die(mysqli_connect_errno());
46 // check for result
47 $no_of_rows = mysqli_num_rows($result);
48 if ($no_of_rows > 0) {
49 $result = mysqli_fetch_array($result);
50 $salt = $result['salt'];
51 $encrypted_password = $result['encrypted_password'];
52 $hash = $this->checkhashSSHA($salt, $password);
53 // check for password
54 if ($encrypted_password == $hash) {
55 return $result;
56 }
57 } else {
58 return false;
59 }
60 }
61
62 /**
63 * 通过email判断用户是否存在
64 */
65 public function isUserExisted($email) {
66 $result = mysqli_query($this->db->con,"SELECT email from users WHERE email = '$email'");
67 $no_of_rows = mysqli_num_rows($result);
68 if ($no_of_rows > 0) {
69 // 用户存在
70 return true;
71 } else {
72 //用户不存在
73 return false;
74 }
75 }
76
77 /**
78 * 加密
79 * @param password
80 * returns salt and encrypted password
81 */
82 public function hashSSHA($password) {
83
84 $salt = sha1(rand());
85 $salt = substr($salt, 0, 10);
86 $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
87 $hash = array("salt" => $salt, "encrypted" => $encrypted);
88 return $hash;
89 }
90
91 /**
92 * 解密
93 * @param salt, password
94 * returns hash string
95 */
96 public function checkhashSSHA($salt, $password) {
97
98 $hash = base64_encode(sha1($password . $salt, true) . $salt);
99
100 return $hash;
101 }
102
103 }
104
105 ?>

在Index.php调用并输出返回值(这个文件地址就是接口的访问地址)

1 <?php
2
3 if (isset($_POST['tag']) && $_POST['tag'] != '') {
4 // tag是接口请求时post的值(方法名称),用来区别调用方法
5 $tag = $_POST['tag'];
6
7 //引用DB_Functions.php
8 require_once 'include/DB_Functions.php';
9 $db = new DB_Functions();
10
11 // 定义输入数组
12 $response = array("tag" => $tag, "error" => FALSE);
13
14 // 判断tag值
15 if ($tag == 'login') {
16 //获取login方法的post参数
17 $email = $_POST['email'];
18 $password = $_POST['password'];
19
20 // 通过email 和password获取用户信息
21 $user = $db->getUserByEmailAndPassword($email, $password);
22 if ($user != false) {
23 //找到用户信息
24 $response["error"] = FALSE;
25 $response["uid"] = $user["unique_id"];
26 $response["user"]["name"] = $user["name"];
27 $response["user"]["email"] = $user["email"];
28 $response["user"]["created_at"] = $user["created_at"];
29 $response["user"]["updated_at"] = $user["updated_at"];
30 echo json_encode($response);
31 } else {
32 //没有找到用户信息
33 //输出错误信息
34 $response["error"] = TRUE;
35 $response["error_msg"] = "帐号或密码不正确!";
36 echo json_encode($response);
37 }
38 } else if ($tag == 'register') {
39 //注册帐号
40 $name = $_POST['name'];
41 $email = $_POST['email'];
42 $password = $_POST['password'];
43
44 // 判断用户是否存在
45 if ($db->isUserExisted($email)) {
46 // 如果用户存在就返错误提示
47 $response["error"] = TRUE;
48 $response["error_msg"] = "用户已存在";
49 echo json_encode($response);
50 } else {
51 // 新增用户
52 $user = $db->storeUser($name, $email, $password);
53 if ($user) {
54 //新增成功返回用户信息
55 $response["error"] = FALSE;
56 $response["uid"] = $user["unique_id"];
57 $response["user"]["name"] = $user["name"];
58 $response["user"]["email"] = $user["email"];
59 $response["user"]["created_at"] = $user["created_at"];
60 $response["user"]["updated_at"] = $user["updated_at"];
61 echo json_encode($response);
62 } else {
63 // 新增失败,返回错误信息
64 $response["error"] = TRUE;
65 $response["error_msg"] = "服务器繁忙,操作失败";
66 echo json_encode($response);
67 }
68 }
69 } else {
70 // tag值无效时
71 $response["error"] = TRUE;
72 $response["error_msg"] = "未找到您要的方法";
73 echo json_encode($response);
74 }
75 } else {
76 $response["error"] = TRUE;
77 $response["error_msg"] = "您的参数不正确!";
78 echo json_encode($response);
79 }
80 ?>
转自:http://www.cnblogs.com/kissdodog/p/4159176.html
http://www.cnblogs.com/kissdodog/p/4159176.html的更多相关文章
- javascript Windouw 转自 http://www.cnblogs.com/kissdodog/archive/2013/01/01/2841464.html
javascript之window对象 window :window对象是BOM中所有对象的核心,除了是BOM中所有对象的父对象外,还包含一些窗口控制函数. 1.全局的window对象 JavaScr ...
- Mysql----索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- mysql六:索引原理与慢查询优化
一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句 ...
- 初谈SQL Server逻辑读、物理读、预读
前言 本文涉及的内容均不是原创,是记录自己在学习IO.执行计划的过程中学习其他大牛的博客和心得并记录下来,之所以想写下来是为了记录自己在追溯的过程遇到的几个问题,并把这些问题弄清楚. 本章最后已贴出原 ...
- ajaxFileUpload插件
关键词: $.ajaxFileUpLoad(); data status dataType 参考资料: http://www.cnblogs.com/kissdodog/archive/2012/12 ...
- 【转】MySql中的函数
原文:http://www.cnblogs.com/kissdodog/p/4168721.html MySQL数据库提供了很多函数包括: 数学函数: 字符串函数: 日期和时间函数: 条件判断函数: ...
- Comet技术
1.Comet是什么? 维基百科: Comet是一种用于web的推送技术,能使服务器实时地将更新的信息传送到客户端,而无须客户端发出请求,目前有两种实现方式,长轮询和iframe流. 说白了就是web ...
- Xml序列化去掉命名空间,去掉申明
#region 序列化 /// <summary> /// 序列化 /// </summary> /// <par ...
- .net学习笔记----HttpRequest,WebRequest,HttpWebRequest区别
WebRequest是一个虚类/基类,HttpWebRequest是WebRequest的具体实现 HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所 ...
随机推荐
- 检索Google Maps地图位置(小训练)
名称:检索地图位置 内容:地图初期显示和检索显示 功能:根据条件检索地图的经度与纬度 1.在这之前我们需要创建一个表(Accoun__c),添加一个重要的字段地理位置情報,它会默认的给你两个字段经度和 ...
- 使用IdleTest进行TDD单元测试驱动开发演练(1)
[前言] 开发工具:Visual Studio 2012 测试库:Visual Studio 2012自带的MSTest DI框架:Unity 数据持久层:Entity Framework 前端UI: ...
- iOS 正确选择图片加载方式
正确选择图片加载方式能够对内存优化起到很大的作用,常见的图片加载方式有下面三种: //方法1 UIImage *imag1 = [UIImage imageNamed:@"image.png ...
- 如何dos中查看当前MySQL版本信息?
dos中MySQL安装服务成功--启动服务成功--登录MySQL成功后输入:select version(); 如图:
- 搭建高可用的rabbitmq集群 + Mirror Queue + 使用C#驱动连接
我们知道rabbitmq是一个专业的MQ产品,而且它也是一个严格遵守AMQP协议的玩意,但是要想骚,一定需要拿出高可用的东西出来,这不本篇就跟大家说 一下cluster的概念,rabbitmq是erl ...
- Jenkins——构建、集成中的问题
准备 Jekins 安装插件 MsBuild Plugin Team Foundation Server Plug-in 配置环境变量 我的电脑中设置环境变量,Path中添加msbuild的路 ...
- linux umount
linux umount 提示"device is busy" 终极解决方法 http://www.wisdr.com/news/20120621174117.htm 这里面的方法亲测可用. 小tip ...
- Java监听器
监听器 1.概念 监听器:主要是用来监听特定对象的创建,属性的变化的!,本质上却是一个实现特定接口的普通java类! 对象分为自己创建自己使用的,和别人创建自己用的,自己创建的不需要监听,值需要取监听 ...
- Java的JDBC操作
Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...
- 安装Windows更新程序遇到错误:0x80070422
看看服务那里 windows update服务是不是被禁用了? 还有一个问题可能是由于Windows Modules Installer被禁用了.