[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能

本文可能会有错误, 或者不足的地方, 还请多多指正, 多多提宝贵意见!!!

在网上找了好多PHP端接收客户端发送的数据和文件的代码, 然后今天总结一下


首先在本地利用XAMPP(集成服务器开发安装包)ps: 很傻瓜, 一直下一步就可以了, 也特别强大!


然后编写PHP代码, 接收客户端iOS的请求, 进行相应处理! (实现一下前台和后台交互的全过程) 啊, 都由你自己来, 会发现好累!!! 废话不多说, 开始吧!


一. 安装本地服务器(XAMPP)

注意, 一定要使用我这个XAMPP安装包 (不然我的php文件里用的是php3的函数, 而百度下的最新的XAMPP里面集成的是php5的, 可能会出现问题)

给一个MAC版XAMPP安装包, 给种一枚! http://pan.baidu.com/s/1gecDFAb

  1. 双击运行.dmg安装包


    [iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第1张图片
  2. 双击


    [iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第2张图片

遇到错误请参考: http://www.cnblogs.com/lidongxu/p/5256351.html

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第3张图片

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第4张图片

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第5张图片

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第6张图片

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第7张图片

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第8张图片

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第9张图片

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第10张图片

等待是短暂的!!!


[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第11张图片

// ps: 这个网页你可以在地址栏输入localhost 或者 127.0.0.1 可以访问!


[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第12张图片
[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第13张图片

到此, 我们的XAMPP安装就基本完成了. 大家可以打开 Launchpad 看到XAMPP

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第14张图片

在应用程序里, 找到XAMPP文件夹, 也可以看到XAMPP安装的东西, manager-osx 是启动图标, 而uninstall是 反安装程序, 也就是运行它用于卸载(记住)


[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第15张图片

大家可以切换上面的上面的上面图片这个软件 标签到 -> Manage Servers 上, 确保3个选项都是Running 的状态, 直接点击Start All (当你要使用XAMPP的时候)
要确保都是Running的状态!

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第16张图片

二. 配置MySql

在上面我们讲了 如何安装XAMPP
, 利用Apache软件把我们的电脑变成一个Web 服务器, 当然了别忘了启动那几个服务, 然后让这个软件一直开着的状态, 不要退出!(最小化就好了嘛!)

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第17张图片

输入 localhost 或者 127.0.0.1 打开本地服务器, 然后点击右上角的, phpMyAdmin,

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第18张图片

如果遇到错误请参考 http://www.cnblogs.com/lidongxu/p/5256351.html
然后进入到这个页面: 添加新的数据库

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第19张图片

然后输入数据库名字 , 然后点击创建


[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第20张图片

之后, 输入第一张表的名字, (我这里输入Login)


[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第21张图片

然后添加字段, 比如我这里添加(userName text类型, password text类型), 然后点击右下角. 保存按钮.


[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第22张图片

这样我们的数据库以及表和字段基本就建立完毕!!!


[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第23张图片

三.然后呢, 今天我们就来接触下PHP开发语言

  1. 首先呢, 需要在我们本机服务器文件夹资源下新建个.php文件, 废话嘛(你要写php啦!)


    [iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第24张图片
  2. 在register.php 输入以下代码
    然后呢, 今天我们就来接触下PHP开发语言

  3. 首先呢, 需要在我们本机服务器文件夹资源下新建个.php文件, 废话嘛(你要写php啦!)

  4. 在register.php 输入以下代码
    复制下面这段代码

     $nameP = $_POST['name2'];
    $passP = $_POST['pass2'];
    $ageP = $_POST['age2'];
    $telephoneP = $_POST['telephone2'];
    // 2. 建立数据库连接 (127.0.0.1 数据库所在的ip地址)
    // root 是数据库用户名(默认的)
    // "" 密码(默认是空)
    $con = mysql_connect("127.0.0.1", "root", "");
    $myCon = mysql_select_db("lidongxu", $con);
    // 3. 先查询, 如果存在就不要在插入了
    $select = "select userName from User where userName = '$nameP'";
    $seleResult = mysql_query($select);
    // 4. 如果查到了, 说明已经存在这个用户了, 则返回-1给客户端代表已经注册过了
    if (mysql_num_rows($seleResult)) {
    // success 就是key值 对应的value 就是后面的字符串
    $a = array();
    $a['success'] = "-1";
    $a['status'] = "have";
    $arr = json_encode($a);
    echo $arr;
    }
    // 5. 如果没注册过, 那么
    else {
    // 6. 把数据都插入到mysql数据库中
    $sql = "insert into User values('$nameP', '$passP', '$ageP', '$telephoneP')";
    $result = mysql_query($sql);
    if ($result == 1) { // 7. 代表执行成功
    $a = array();
    $a['success'] = "1";
    $a['status'] = "ok";
    $arr = json_encode($a);
    echo $arr;
    }
    else { // 8. 代表插入失败
    $a = array();
    $a['success'] = "0";
    $a['status'] = "no";
    $arr = json_encode($a);
    echo $arr;
    }
    }
    // 9. 接收用户头像图片
    // 9.1. 接收图片传到服务器上默认的临时文件路径以及名字 (uploadfile 给前台使用的
    // 字段)
    $url = $_FILES["uploadimageFile"]["tmp_name"];
    // 9.2 获取根路径下的downloads文件夹下的路径(download2 需要手动
    // 去本地创建)
    $destination_folder = $_SERVER['DOCUMENT_ROOT'].'/download2/';
    // 9.3拼接要作为服务器上保存的文件名字
    $newfname = $destination_folder .(string)$nameP.'.jpg'; //set your file ext
    // 打开连接 rb+ 读写打开一个二进制文件,允许读写数据,文件必须存在。
    // 获取客户端上传到缓存文件夹下的文件
    $file = fopen ($url, "rb");
    if ($file) {
    // a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。
    // 获取要把客户端传递过来的文件复制到新的文件夹下的名字
    $newf = fopen ($newfname, "a");
    if ($newf)
    // 检查文件是否结束,如结束,则返回非零值
    while(!feof($file)) {
    // 开始从某个文件读取1MB 然后写入到新的路径1MB
    fwrite($newf, fread($file, 1024 * 8 ), 1024 * 8 );
    }
    }
    if ($file) {
    // 关闭文件链接
    fclose($file);
    }
    if ($newf) {
    fclose($newf);
    }
    ?>

    复制代码结束

  5. 然后在本地服务器文件夹下新建download2文件夹

[iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第25张图片
Paste_Image.png
  1. 然后再把登录的php代码也写了吧!在htdocs文件夹下, 新建loginGet.php文件 然后插入代码

复制代码开始


// 1. 获取GET网络请求网址里的key值对应的value
// 声明变量name1 和pass1 接收
$name1 = $_GET['name'];
$pass1 = $_GET['pass'];
// 2. 建立数据库连接
// 参数1: 数据库所在的服务器的地址(本机127.0.0.1或者localhost)
// 参数2: MySql数据库的账户(默认root)
// 参数3: MySql数据库的密码(默认无)
$con = mysql_connect("127.0.0.1", "root", "");
// 参数1: 自己建立的数据库的名字
$myCon = mysql_select_db("lidongxu", $con);
// 3. 执行查询 (利用用户名和密码进行匹配查找, 如果找到了随意返回userName(用户名))
$sql = "select * from User where userName = '$name1' And password = '$pass1'";
// 4. 接收结果
$result = mysql_query($sql);
// 4.2 如果查询结果为空的话
if(mysql_num_rows($result) == 0) {
$a = array();
$a['success'] = "0";
$a['name'] = "null";
$a['status'] = "no";
$arr = json_encode($a);
echo $arr;
}
else {
// 5. 取出本条记录
$row = mysql_fetch_row($result);
$a = array();
$a['success'] = "1";
$a['name'] = $row[0];
$a['age'] = $row[2];
$a['telephone'] = $row[3];
$a['status'] = "ok";
$arr = json_encode($a);
echo $arr;
}
?>

代码复制结束

到此, php暂时告一段路, 然后进行iOS段代码开发(开心不???)

四.然后, 那么我们来看看iOS端代码如何实现.

ViewContrller.m (主要类) 可能里面用到了自己定义的类LoginView 请去GitHub https://github.com/lidongxuwork/iOS-to-PHP 上下载源代码(顺路给个星哈, 谢谢!!!)


// ViewController.m
// php
//
// Created by 李东旭 on 16/2/25.
// Copyright © 2016年 李东旭. All rights reserved.
//

import "ViewController.h"

import "MainViewController.h"

import "Define.h"

@interface ViewController ()
@property (nonatomic, strong) LoginView *loginR;
@end
@implementation ViewController
-(void)viewDidLoad {
[super viewDidLoad];

warning 1. 创建登录注册页面

// 登录注册类调用
self.loginR = [[LoginView alloc] initWithFrame:self.view.frame];

warning 2. 签代理 代理方法可以拿到登录信息和注册信息

_loginR.delegate = self;
[self.view addSubview:_loginR];

}

pragma mark - LoginView delegate

warning 3. 根据不同的后台给的字段 代表的意思 以及值进行不同处理

  • (void)getLoginName:(NSString *)name pass:(NSString *)pass
    {
    // 调用登录验证接口 (这里用get网络请求的方式, 和post网络请求的方式)
    NSString *url = @"http://127.0.0.1/loginGet.php";
    // 后台规定登录用户名的字段必须是name密码的pass
    NSDictionary *dic = @{@"name":name, @"pass":pass};
    // 网络请求有点特殊 点进去看
    [LDXNetWork GetThePHPWithURL:url par:dic success:^(id responseObject) {
    // 后台返回的字典里 如果success对应的value是1代表登录成功
    if ([responseObject[@"success"] isEqualToString:@"1"]) {
    MainViewController *mainVC = [[MainViewController alloc] init];
    mainVC.dic = responseObject;
    [self presentViewController:mainVC animated:YES completion:nil];
    }
    else {
    [self showTheAlertView:self andAfterDissmiss:1.0 title:@"账号或密码错误" message:@""];
    }
    } error:^(NSError *error) {
    NSLog(@"%@", error);
    }];
    }
  • (void)getRegisterName:(NSString *)name pass:(NSString *)pass age:(NSString *)age telephone:(NSString *)telephone image:(UIImage *)image
    {
    NSString *url = @"http://127.0.0.1/register.php";
    NSDictionary *dic = @{@"name2":name, @"pass2":pass, @"age2":age, @"telephone2":telephone};
    // 网络请求有点特殊点进去看 (@"uploadimageFile" 后台给的字段)
    [LDXNetWork PostThePHPWithURL:url par:dic image:image uploadName:@"uploadimageFile" success:^(id response) {
    NSString *success = response[@"success"];
    if ([success isEqualToString:@"1"]) {
    // 代表注册成功
    [self showTheAlertView:self andAfterDissmiss:1.5 title:@"注册成功" message:@""];
    // 跳转回到登录界面
    [_loginR goToLoginView];
    }
    else if([success isEqualToString:@"-1"]){
    [self showTheAlertView:self andAfterDissmiss:1.5 title:@"账号已经被注册了" message:@""];
    }
    } error:^(NSError *error) {
    NSLog(@"%@", error);
    }];
    }
  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }
    @end

MainViewController.h 登录到的界面


//
// MainViewController.h
// php
//
// Created by 李东旭 on 16/3/11.
// Copyright © 2016年 李东旭. All rights reserved.
//

import

@interface MainViewController : UIViewController
@property (nonatomic, strong) NSDictionary *dic;
@end

MainViewController.m


//
// MainViewController.m
// php
//
// Created by 李东旭 on 16/3/11.
// Copyright © 2016年 李东旭. All rights reserved.
//

import "MainViewController.h"

@interface MainViewController ()
@end
@implementation MainViewController

  • (void)viewDidLoad {
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor whiteColor];
    UIImageView *imageV = [[UIImageView alloc] initWithFrame:CGRectMake(50, 100, 200, 200)];
    imageV.backgroundColor = [UIColor greenColor];
    // 取出用户名对应的头部图片
    NSString *imageValue = self.dic[@"name"];

warning 5. 直接在这里进行网址路径拼接, 因为不同用户要取不同的头像图片, 图片都保存在服务器的一个叫download2文件夹, 里面图片是根据用户名加.jpg来获取的

NSString *url = [NSString stringWithFormat:@"%@/%@.jpg", @"http://127.0.0.1/download2", imageValue];
// 同步加载图片
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
UIImage *image = [UIImage imageWithData:data];
[imageV setImage:image];
[self.view addSubview:imageV];
// 循环创建label, 从请求下来传过来的字典里, 拿出指定的字段的value值显示
NSArray *arr = @[@"name", @"age", @"telephone"];
for (int i = 0; i < 3; i++) {
    CGFloat offY = 320;
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 320 + i * 50, 250, 40)];
    [self.view addSubview:label];
    NSString *s = arr[i];
    NSString *value = self.dic[s];
    label.text = [NSString stringWithFormat:@"%@: %@", s, value];
}

}

  • (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }
    @end

注意: 你可能运行的时候, 遇到这个问题 failed to open stream: No such file or directory

  1. [iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第26张图片

    解决方法: 在本地服务器路径文件夹下建立文件夹 download2


    [iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第27张图片

    错误2:


    [iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第28张图片

    没有权限 我们就给权限被 哈哈哈哈
    [iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第29张图片

    [iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能_第30张图片

    然后回车 就可以啦. 然后回到Xcode 重新运行应该就没问题啦!!

本文可能会有错误, 或者不足的地方, 还请多多指正, 多多提宝贵意见!!!

以上文件, 以及项目代码, 都在这里 看过来-> (顺路给个星哦~~~)

iOS端
https://github.com/lidongxuwork/iOS-to-PHP
PHP端
https://github.com/lidongxuwork/Register-Login-PHP

1.gif

你可能感兴趣的:([iOS+PHP]利用XAMPP搭建本地服务器, 编写PHP代码实现iOS端注册登录功能)