iOS+PHP实现登录功能

   近期在做app开发的时候,因为要用到app登录功能,就自己写了个简单的iOS+PHP实现登录功能的demo,经过运行能够通过登录测试。

    在开发过程中,也是碰到了各种各样的问题,经过不断的调试和改变方法,终于将所有的坑都基本上填满了,因此,将最终完整版的代码及相关流程记录在此,供自己及其它需要的人查阅使用。

  一、一些约定条件

    Mac OS真的是一个太太太封闭的系统环境了,封闭到我已经测试了N中办法,都没办法成功搭建后台服务器——不管是使用集成软件(如MAMP或者XAMPP),还是自行下载MySQL和MyAdmin客户端安装。有的时候Apache无法正常启动,有时候MySQL又故障掉了,更悲哀的是,真机测试时,客户端上输入内容后,无法正常与服务器通信!逼不得已,就只能放弃了,最终采用Windows的WIN7系统的电脑做后台服务器,然后与测试用的手机、编程用的Mac电脑处于同一无线局域网下。==如果哪位同仁能告知如何在MacBook上搭建后台服务器且能正常工作,欢迎不吝赐教,鄙人万分感激!==

    当在装有WIN 7系统的电脑上配置服务器时,我使用的是WAMP集成软件,数据库和表的编辑操作使用的是SQLyog软件,这样可以有效的创建、修改表的内容。==注意,在WIN7的电脑上搭建完后台并创建好数据库之后,还需要进行局域网的配置工作,这样才能让处于同一局域网下的设备(如手机)连接到这台电脑及后台==。这个方法我也忘了,所以需要您和其他做PHP后台开发的同仁咨询。==如果您已经知道怎么做了,也欢迎不吝赐教,我好记录在本文章中,供更多人的来学习==。

    一些约定条件如下

  [x] 手机客户端能成功连接后台服务器,并与后台服务器进行数据交互

  [x] 密码为原始输入的字符串,不经过MD5等加密方式的加密(正常开发时,请务必进行加密处理)

  [x] 传输方式选择GET传输(为了安全起见,最好使用POST传输方式)

  [x] 登录账号只选择手机号(正常开发时,登录的账号可能还有email或者用户名)

  二、数据库和表的创建及初始化

    使用SQLyog或者phpMyAdmin创建一个名为testAppDatabase的数据库,“基字符集”选择“utf8”,“数据库排序规则”选择“utf8_general_ci”,如下图所示(图像截取的是使用SQLyog软件创建数据库的情况,使用phpMyAdmin类似):

  

使用SQLyog创建新数据库.PNG

    然后,在testAppDatabase数据库下,新建一个名为userInformationTable的表,“引擎”选择“InnoDB”,“字符集”选择“utf8”,“核对”选择“utf8_general_ci”,最后创建列名及每一列对应的数据类型以及是否可以为空等,并设置userID为主键、正数、自增,如下图所示(图像截取的是使用SQLyog软件创建表的情况,使用phpMyAdmin类似):

  

使用SQLyog创建新表.PNG

    正常情况下,每一列都最好设置为“非空”,如果用户没有输入,那么可以默认使用“N/A”等填充,等用户输入了当前列对应的内容了,再替换掉“N/A”即可。

    因为我们是做登录模块的验证,没有经过注册,因此,数据库中是没有信息的。我们可以手动先填写一些信息,供测试使用。填写好的内容如下图所示(使用的phpMyAdmin客户端插入的数据)

  

插入数据.PNG

    ==注意,此时的密码是完全的明文密码,未进行任何加密,这主要是为了测试方便使用,正常开发时,请务必将保存到数据库中的密码进行加密处理。==

    至此,数据库相关的“配置”就处理完了,下面是php代码相关的内容。

  三、php代码

    在php代码中,我们主要完成的是接收客户端传输过来的数据,并将数据与数据库进行匹配验证,一般验证的内容有两点:

  [x] 用户输入的账号是否存在

  [x] 用户输入的账号存在的情况下,账号和密码是否与数据库中的一一匹配

    因此,我们的php代码主要就是围绕这两个逻辑来编写。

  首先,编写数据库连接代码,并保存到其它用户读取不到的位置。

    对php有一些了解的人应该知道,保存在htddoc路径(对于使用WAMP集成的环境来说,就是www文件夹下,如下图)下的文件,是可以被浏览器通过输入网址的方式读取到的,如果将登录数据库使用的账户和密码信息放到这个文件夹下,那么数据库是非常不安全的。

  

www目录.png

    因此,我们通常将连接数据库需要的php代码单独编写并保存为“.php”格式的文件,然后将这个文件放置在与“www”同级的位置,如下图所示的“connectionToDB.php”文件。

  

连接数据库文件存放位置.PNG

    使用php编辑器编辑“connectionToDB.php”文件,写入的代码如下:

  connectionToDB.php

  $dbc = mysqli_connect('192.168.1.101', 'root', '你设置的登录数据库的密码', 'testAppDatabase') or die("连接失败:".mysql_error());

  //连接数据库的格式通常为

  //$dbc = mysqli_connect(hostname, 登录账号, 登录密码, 数据库的名称) or die("连接失败:".mysql_error());

  //hostname:一般是localhost,也常设置为作为后台的电脑的IP地址,查询的方法是“运行->cmd->ipconfig /all”,在控制台中找到IPv4地址。

  //对于局域网,这个IP地址可能会不断的变化,因此,如果没有做IP固化的操作,每次使用后台服务器时,最好都加纳差一下这个IP地址,然后将“connectionToDB.php”中的IP地址换为正在使用的地址

  //登录账号:一般是根用户root。如果不使用根用户,就使用数据库拥有者为你开辟的用户名和密码

  //登录密码:对应登录账号的密码

  //数据库名称:要连接的数据库的名称。一般一个产品只有一个数据库,该数据库中有很多的表

  ?>

    ==注意:php代码的编写,一定要使用utf-8的编码格式,这点要切记。下面提到的php文件均采用这种编码格式,将不再赘述。==

  接着,编写和登录验证相关的php代码,将其保存为“login.php”文件并保存到www目录下,如下图所示:

  

登录的php文件路径.png

    “www”目录就想到于在浏览器中输入的localhost或者192.168.1.101这个IP地址,所以能看到,我们要编写的“login.php”在下两级目录下,知道这点这对于我们编写“login.php”文件中的某些代码是有必要的。

  login.php

  header('Content-type:text/html;charset=utf-8'); //代码的方式设置编码方式

  require_once('../../../connectionToDB.php');

  //一个"../"代表一级目录,

  //因为我们的“connectionToDB.php”文件与“www”文件夹在同一级目录下

  //从“login.php”追溯“connectionToDB.php”需要进过三级目录,所以需要三个"../"

  $postedData = $_REQUEST; //$_REQUEST既可以获取到通过POST方式传输的数据,也可以获取到通过GET方式传输的数据

  //获取用户输入的账号的形式:手机号、邮箱地址还是一般用户名

  $userAccountType = $postedData['Account_Type'];

  //获取用户输入的账号和密码

  $userAccount = $postedData['User_Account'];

  $userPassword = $postedData['User_Password'];

  //根据账户形式获取对应的账号内容,用于后面的比对

  //是否账号是否存在的标签以及是否登录成功的标签

  $accountBeingOrNotFlag = "0"; //0代表账号不存在,1代表账号存在

  $loginOKOrNotFlag = "0"; //0代表登录失败,1代表登录成功

  switch ($userAccountType) {

  case "Telephone": //账号是手机号

  $q = "SELECT * FROM userinformationtable WHERE UserTelephoneNumber = $userAccount"; //查询数据库有没有这个手机号

  $r = @mysqli_query($dbc, $q);

  $rows = @mysqli_num_rows($r); //查询到的信息的行数,如果行数不是0,说明查询到了信息

  if($rows) {

  //行数不是0,说明有这个手机号,设置标签的值为1

  $accountBeingOrNotFlag = "1"; //账号存在

  //查询账号和密码是否匹配

  $qA = "SELECT * FROM userinformationtable WHERE UserTelephoneNumber = '$userAccount' and UserPassword = '$userPassword'";

  $rA = @mysqli_query($dbc, $qA);

  $rowsA = @mysqli_num_rows($rA);

  if($rowsA) {

  //行数不是0,说明账号和密码匹配,设置标签值为1,登录成功

  $loginOKOrNotFlag = "1";

  }else {

  //行数是0,说明账号和密码不匹配,设置标签值为0,登录失败

  $loginOKOrNotFlag = "0";

  }

  }else {

  //行数是0,说明账号不存在,设置标签值为0

  $accountBeingOrNotFlag = "0";

  }

  //将标签值保存到数组中,然后将其传递给客户端,客户端根据标签值判断对应的操作逻辑

  $returnArr = array("accountBeingOrNotFlag" => $accountBeingOrNotFlag, "loginOKOrNotFlag" => $loginOKOrNotFlag);

  //下面的两行代码是方便测试使用,即将我们测试的一些内容保存到一个.log文件中,然后通过查看这个文件,看结果是否是我们想要的

  $dccc = print_r($returnArr, true);

  file_put_contents('C://Users/Administrator/Desktop/zj.log', $dccc);

  //关闭数据库连接

  mysqli_close($dbc);

  //将要传递给客户端的结果信息通过json编码的形式输出

  echo json_encode($returnArr);

  break;

  //下面的代码注释和上面的这个case里面的类似,不再赘述

  case "EmailAddress":

  $q = "SELECT * FROM userinformationtable WHERE UserEmailAddress = $userAccount";

  $r = @mysqli_query($dbc, $q);

  @$rows = mysql_num_rows($r);

  if($rows) {

  $accountBeingOrNotFlag = "1"; //账号存在

  $qA = "SELECT * FROM userinformationtable WHERE UserEmailAddress = '$userAccount' and UserPassword = '$userPassword'";

  //$qA = "SELECT * FROM userinformationtable WHERE UserTelephoneNumber = 13240132824 and UserPassword = l19880226";

  $rA = @mysqli_query($dbc, $qA);

  $rowsA = @mysqli_num_rows($rA);

  if($rowsA) {

  $loginOKOrNotFlag = "1"; //登录成功

  }else {

  $loginOKOrNotFlag = "0"; //登录失败

  }

  }else {

大连哪家医院看男科好   http://www.39552222.com/

  $accountBeingOrNotFlag = "0"; //账号不存在

  }

  $returnArr = array("accountBeingOrNotFlag" => $accountBeingOrNotFlag, "loginOKOrNotFlag" => $loginOKOrNotFlag);

  mysqli_close($dbc);

  echo json_encode($returnArr); //输出json格式

  break;

  case "NormalName":

  $q = "SELECT * FROM userinformationtable WHERE UserNormalName = $userAccount";

  $r = @mysqli_query($dbc, $q);

  @$rows = mysql_num_rows($r);

  if($rows) {

  $accountBeingOrNotFlag = "1"; //账号存在

  $qA = "SELECT * FROM userinformationtable WHERE UserNormalName = '$userAccount' and UserPassword = '$userPassword'";

  $rA = @mysqli_query($dbc, $qA);

  $rowsA = @mysqli_num_rows($rA);

  if($rowsA) {

  $loginOKOrNotFlag = "1"; //登录成功

  }else {

  $loginOKOrNotFlag = "0"; //登录失败

  }

  }else {

  $accountBeingOrNotFlag = "0"; //账号不存在

  }

  $returnArr = array("accountBeingOrNotFlag" => $accountBeingOrNotFlag, "loginOKOrNotFlag" => $loginOKOrNotFlag);

  mysqli_close($dbc);

  echo json_encode($returnArr); //输出json格式

  break;

  }

  ?>

    好了,和登录有关的php代码已经编写完成了

猜你喜欢

转载自blog.csdn.net/weixin_44239023/article/details/89316260
今日推荐