文档章节

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

法斗斗
 法斗斗
发布于 2016/03/03 13:56
字数 909
阅读 107
收藏 0
点赞 1
评论 0

想要自己一个人完成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 (配置数据库)

<?php
 
 //定义数据库连接所需的变量
 define("DB_HOST", "localhost");
 define("DB_USER", "root");
 define("DB_PASSWORD", "master12!");
 define("DB_DATABASE", "loginAPI");
 
?>

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

<?php
 
class DB_Connect
{
    public $con;
 8     function __construct()
    {
 
    }


    function __destruct()
    {
        // $this->close();
    }
 
    //连接数据库
    public function connect()
    {
        require_once 'include/Config.php';
        //连接mysql
        $this->con = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_DATABASE) or die(mysqli_error($this->con));
        if (mysqli_connect_errno()) {
            die("Database connection failed");
        }
 
        // 返回 database handler
        return $this->con;
    }
 
    //关闭数据连接
    public function close()
    {
        mysqli_close($this->con);
    }
 
}
 
?>

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

<?php
 
class DB_Functions {
 
    private $db;
 
    // constructor
    function __construct() {
        require_once 'DB_Connect.php';
        // connecting to database
        $this->db = new DB_Connect();
        $this->db->connect();
    }
 
    // destructor
    function __destruct() {
        
    }
 
    /**
     * 添加用户信息
     */
    public function storeUser($name, $email, $password) {
        $uuid = uniqid('', true);
        $hash = $this->hashSSHA($password);
        $encrypted_password = $hash["encrypted"]; // 加密后的密文
        $salt = $hash["salt"]; // salt
        $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())");
        // 检查结果
        if ($result) {
            // 获取用户信息
            $uid = mysqli_insert_id($this->db->con); // 获取最新的id
            $result = mysqli_query($this->db->con,"SELECT * FROM users WHERE uid = $uid");
            //返回刚插入的用户信息
            return mysqli_fetch_array($result);
        } else {
            return false;
        }
    }
 
    /**
     * 通过email和password获取用户信息
     */
    public function getUserByEmailAndPassword($email, $password) {
        $result = mysqli_query($this->db->con,"SELECT * FROM users WHERE email = '$email'") or die(mysqli_connect_errno());
        // check for result 
        $no_of_rows = mysqli_num_rows($result);
        if ($no_of_rows > 0) {
            $result = mysqli_fetch_array($result);
            $salt = $result['salt'];
            $encrypted_password = $result['encrypted_password'];
            $hash = $this->checkhashSSHA($salt, $password);
            // check for password
            if ($encrypted_password == $hash) {
                return $result;
            }
        } else {
            return false;
        }
    }
 
    /**
     * 通过email判断用户是否存在
     */
    public function isUserExisted($email) {
        $result = mysqli_query($this->db->con,"SELECT email from users WHERE email = '$email'");
        $no_of_rows = mysqli_num_rows($result);
        if ($no_of_rows > 0) {
            // 用户存在
            return true;
        } else {
            //用户不存在
            return false;
        }
    }
 
    /**
     * 加密
     * @param password
     * returns salt and encrypted password
     */
    public function hashSSHA($password) {
 
        $salt = sha1(rand());
        $salt = substr($salt, 0, 10);
        $encrypted = base64_encode(sha1($password . $salt, true) . $salt);
        $hash = array("salt" => $salt, "encrypted" => $encrypted);
        return $hash;
    }
 
    /**
     * 解密
     * @param salt, password
     * returns hash string
     */
    public function checkhashSSHA($salt, $password) {
 
        $hash = base64_encode(sha1($password . $salt, true) . $salt);
 
        return $hash;
    }
 
}
 
?>

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


<?php
 
if (isset($_POST['tag']) && $_POST['tag'] != '') {
    // tag是接口请求时post的值(方法名称),用来区别调用方法
    $tag = $_POST['tag'];
 
    //引用DB_Functions.php
    require_once 'include/DB_Functions.php';
    $db = new DB_Functions();
 
    // 定义输入数组
    $response = array("tag" => $tag, "error" => FALSE);
 
    // 判断tag值
    if ($tag == 'login') {
        //获取login方法的post参数
        $email = $_POST['email'];
        $password = $_POST['password'];
 
        // 通过email 和password获取用户信息
        $user = $db->getUserByEmailAndPassword($email, $password);
        if ($user != false) {
            //找到用户信息
            $response["error"] = FALSE;
            $response["uid"] = $user["unique_id"];
            $response["user"]["name"] = $user["name"];
            $response["user"]["email"] = $user["email"];
            $response["user"]["created_at"] = $user["created_at"];
            $response["user"]["updated_at"] = $user["updated_at"];
            echo json_encode($response);
        } else {
            //没有找到用户信息
            //输出错误信息
            $response["error"] = TRUE;
            $response["error_msg"] = "帐号或密码不正确!";
            echo json_encode($response);
        }
    } else if ($tag == 'register') {
        //注册帐号
        $name = $_POST['name'];
        $email = $_POST['email'];
        $password = $_POST['password'];
 
        // 判断用户是否存在
        if ($db->isUserExisted($email)) {
            // 如果用户存在就返错误提示
            $response["error"] = TRUE;
            $response["error_msg"] = "用户已存在";
            echo json_encode($response);
        } else {
            // 新增用户
            $user = $db->storeUser($name, $email, $password);
            if ($user) {
                //新增成功返回用户信息
                $response["error"] = FALSE;
                $response["uid"] = $user["unique_id"];
                $response["user"]["name"] = $user["name"];
                $response["user"]["email"] = $user["email"];
                $response["user"]["created_at"] = $user["created_at"];
                $response["user"]["updated_at"] = $user["updated_at"];
                echo json_encode($response);
            } else {
                // 新增失败,返回错误信息
                $response["error"] = TRUE;
                $response["error_msg"] = "服务器繁忙,操作失败";
                echo json_encode($response);
            }
        }
    } else {
        // tag值无效时
        $response["error"] = TRUE;
        $response["error_msg"] = "未找到您要的方法";
        echo json_encode($response);
    }
} else {
    $response["error"] = TRUE;
    $response["error_msg"] = "您的参数不正确!";
    echo json_encode($response);
}
?>


本文转载自:

共有 人打赏支持
法斗斗
粉丝 20
博文 336
码字总数 6335
作品 0
杨浦
程序员
编程入门先学什么 初学者编程入门指南

  编程入门先学什么?相信这是很多想要自学编程的小伙伴都会有的疑惑,本文将为大家带来初学者编程入门指南。 明确学习编程的目的   对于一个没有任何基础的小白来说,学习编程最重要的是...

W3Cschool小编 ⋅ 04/20 ⋅ 0

C语言开发fastcgi初探(一)

这几天闲着没事干,虽然开学了,但是到下周才有课上。再者,研二了,也没啥课了,导师又不让我出去工作,我那个纠结啊。算鸟,那就自己折腾点东西玩玩吧。 由于自己的本科的时候,一开始脑子...

jacky_chen ⋅ 2012/09/09 ⋅ 29

深入理解Moya

前言 Moya是一个基于Alamofire开发的,轻量级的Swift网络层。Moya的可扩展性非常强,可以方便的RXSwift,PromiseKit和ObjectMapper结合。 如果你的项目刚刚搭建,并且是纯Swift的,非常推荐以...

黄文臣 ⋅ 2017/08/11 ⋅ 0

10步成为专业iOS开发者——从零起步

想在移动开发大餐中分一杯羹,体验最火最炫的技术?小伙子,很有眼光嘛 毫无疑问,移动开发在目前和未来几年内都会盛极一时。无数开发职位虚位以待。各大公司都在寻找各种层次的程序员——新...

hejunbinlan ⋅ 2015/06/18 ⋅ 0

Perfect服务器开发-独立开发APP

从刚刚入门IOS不久,就有一种自己开发app的冲动。但是发现一个现实又无奈的问题,没有后台啊,自己有不会弄。这篇文章是我这两个星期的努力,我觉得自己文笔太差,写不清楚的地方大家直接问我...

iOS_windKing ⋅ 2017/11/10 ⋅ 0

实习日志(五)——关于DTcms的又一点理解和数据库操作小技巧

首先,还是先说以点关于DTcms的东东吧: DTcms.Web.UI文件下的一个基类和四个拓展类,尤其是BasePage.cs文件,其它很多页面的基本处理方法都来自这里; 其次,有大神说,写DTcms的人以前是写...

笨小熊 ⋅ 2014/07/12 ⋅ 0

全国车辆违章查询API接口文档及demo

简介 聚合数据全国车辆违章数据接口,目前已经支持300个左右的城市违章查询,已连接上万个APP。方便有车一族随时了解自己是否有过交通违章,避免因遗忘或逾期处理违章罚单而造成的不必要损失...

熊babi ⋅ 2016/12/12 ⋅ 0

【个人测试公众号】微信公众号接入过程问题笔记

<?php/** wechat php test */ //define your tokendefine("TOKEN", "weixinfreddon");//只用改这一个TOKEN、任意名称,比如weixinfreddon$wechatObj = new wechatCallbackapiTest();$wechat......

FRED丶DON ⋅ 2015/10/04 ⋅ 0

joomla1.5前台组件开发过程分享(附中文开发教程两本)

    上一次分享到一个后台组件开发,也许我讲的不是很明白,不过你们把源代码拿去以后应该可以看懂,我是完全按照MVC模式开发的。今天呢,就 来分享一下前台组件开发,我这里的前台组件和...

yoby ⋅ 2012/05/15 ⋅ 0

程序员技术方向选择

2008年秋天的一个午后,温暖的阳光透过落地窗落在我面前这个长长的写字桌上,桌子对面坐的是一个瘦小的程序员,他的名字叫小明,小明有些茫然,他看着我,不知道该说些什么。 程序员都是很严...

风中帆 ⋅ 2016/08/17 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

浅谈设计模式之工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻...

佛系程序猿灬 ⋅ 今天 ⋅ 0

Dockerfile基础命令总结

FROM 指定使用的基础base image FROM scratch # 制作base image ,不使用任何基础imageFROM centos # 使用base imageFROM ubuntu:14.04 尽量使用官方的base image,为了安全 LABEL 描述作...

ExtreU ⋅ 昨天 ⋅ 0

存储,对比私有云和公有云的不同

导读 说起公共存储,很难不与后网络公司时代的选择性外包联系起来,但尽管如此,它还是具备着简单和固有的可用性。公共存储的名字听起来也缺乏专有性,很像是把东西直接堆放在那里而不会得到...

问题终结者 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部