一步一步学swift之:自己写Api接口-PHP

想要自己一个人完成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 ?>
时间: 2024-12-20 10:22:07

一步一步学swift之:自己写Api接口-PHP的相关文章

Rhythmk 一步一步学 JAVA (21) JAVA 多线程

1.JAVA多线程简单示例 1.1 .Thread  集成接口 Runnable 1.2 .线程状态,可以通过  Thread.getState()获取线程状态: New (新创建) Runnable (可以运行) Blocked  (被阻塞) Waiting  (等待) Timed waiting (计时等待) Terminated  (被终止) ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Rhythmk 一步一步学 JAVA (20) JAVA enum常用方法

JAVA 枚举定义常用方法: 1.static Enum valueOf(Class enum,String name) 返回指定name的枚举类型 2.Static Enum values[] 返回枚举常量集合 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

一步一步学solr:在开始前我们应该明白什么

我就用自己的项目来讲solr应用了,当然他的功能很多,大家可以看这里 http://my.oschina.net/fengnote/blog/288581 功能那是相当的多. solr可以理解为与应用分离的一个搜索服务,我们要搭建应用+搜索服务的关联配置实现部分业务. 我们的项目现在要改功能,一个内容发布系统,做一个站内搜索,原有的框架是SSI的,只把查询部分用solr来实现. 问题是: 我要查询一篇文章关联到N张表 我除了查询文章还要查询分类(也用solr实现) 新增.修改.删除文章/分类后要

一步一步学习Swift之(一):关于swift与开发环境配置

一.什么是Swift? 1.Swift 是一种新的编程语言,用于编写 iOS 和 OS X 应用. 2.Swift 结合了 C 和 Objective-C 的优点并且不受 C 兼容性的限制. 3.Swift 采用安全的编程模式并添加了很多新特性,这将使编程更简单,更灵活,也更有趣. 4.Swift 是基于成熟而且倍受喜爱的 Cocoa 和 Cocoa Touch 框架,它的降临将重新定义软件开发. 5.Swift 是编写 iOS 和 OS X 应用的极佳手段,并将伴随着新的特性和功能持续演进.

一步一步学WebSocket(二) 使用SuperWebSocket实现自己的服务端

上一篇文章,我们了解了客户端如何与服务器创建WebSocket连接.但是一个巴掌拍不响,既然是通信,就必然最少要有两个端.今天我们来看看c#如何用已有的框架实现一个WebSocket服务端. 在.Net Framework 4.5及以上版本中,微软为我们集成了WebSocket协议的基本实现.微软提供的WebSocket对象位于System.Net.WebSocket命名空间下,使用起来挺繁琐的,所以我选择了SuperWebSocket框架来简化开发的难度. SuperWebSocket框架可以

Rhythmk 一步一步学 JAVA (22) JAVA 网络编程

1.获取主机信息 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 @Test     public void GetDomainInfo() throws UnknownHostException {         String domain = "www.baidu.com";         InetAddress netAddress = InetAddress.getByName(domain);         // 获取

一步一步学ROP之linux_x64篇

一步一步学ROP之linux_x64篇 一.序 **ROP的全称为Return-oriented programming(返回导向编程),这是一种高级的内存攻击技术可以用来绕过现代操作系统的各种通用防御(比如内存不可执行和代码签名等).上次我们主要讨论了linux_x86的ROP攻击:<一步一步学ROP之linux_x86篇>,在这次的教程中我们会带来上一篇的补充以及linux_x64方面的ROP利用方法,欢迎大家继续学习. 另外文中涉及代码可在我的github下载:https://githu

一步一步学ios UITextView(多行文本框)控件的用法详解(五5.8)

本文转载至 http://wuchaorang.2008.blog.163.com/blog/static/48891852201232014813990/ 1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: [csharp] view plaincopy #import <UIKit/UIKit.h> @interface TextViewController : UIViewController <UITextViewDelegate> { UITe

【DG】[三思笔记]一步一步学DataGuard

[DG][三思笔记]一步一步学DataGuard 它有无数个名字,有人叫它dg,有人叫它数据卫士,有人叫它data guard,在oracle的各项特性中它有着举足轻理的地位,它就是(掌声)......................Oracle Data Guard.而对于我而言,我一定要亲切的叫它:DG(注:主要是因为打着方便). 不少未实际接触过dg的初学者可能会下意识以为dg是一个备份恢复的工具.我要说的是,这种形容不完全错,dg拥有备份的功能,某些情况下它甚至可以与primary数据库