iOS 与XAMPP的交互

一. XAMPP for Mac组件环境搭建

XAMPP = Apache + PHP + MySQL
XAMPP支持多个操作系统:Windows,Linux,Mac OS X
Code2 是一款试用与Mac电脑的网页编程工具,具有多语言支持(HTML,PHP,JavaScript,CSS等)

二. Web开发HTML网页与HTTP

BS模式:客户端通过浏览器以URL地址的形式向服务器发送访问Web页面的请求.服务器做出响应,并以超文本的格式回传客户端所请求的Web页面

HTML的简单语法:

<html>
    <title>
    Hello
    </title>
    <body>
        Hello,this is Carson !
    </body>
</html>

详见:http://www.w3school.com.cn/

三. PHP基本语法与概念

PHP的基本语法:

<?php
    // 向客户端发送数据!
    echo("Hello,this is Carosn!");
    ?>

PHP可以嵌入HTML语法,但是文件后缀名必须为.php

<html>
    <title>
    Hello
    </title>
    <body>
        Hello,this is Carson !  
    <?php
    // 向客户端发送数据!
    echo("<br/>");
    echo("Hello,this is Carosn!");
    ?>
    </body>
</html>

PHP中定义变量时,会自动定义变量类型

$int_var = 1;
$str_var = "Carson";
// gettype($int_var);为获取变量类型 $后为变量名
$strAppend_var = " is me.";
// PHP中的字符串拼接使用"."
echo($str_var.$strAppend_var);

PHP的分支结构:

$int_a = 3;
$int_b = 5;
if ($int_a > $int_b) {
    echo($int_a);
} else {
    echo($int_b);
}
// 三目运算在PHP中同样适用
echo($int_a > $int_b ? $int_a : $int_b);

PHP的循环结构:

// for 循环
for ($i = 0; $i < 10; $i++) {
    echo($i);
    echo("<br/>");
}
    
// while循环
$i = 0;
while ($i < 10) {
    echo($i);
    echo("<br/>");
    $i++;
}
    
// do-while循环
$j = 0;
do {
    echo($j);
    echo("<br/>");
    $j++;
} while ($j < 10)

PHP的数组:

$array_var = array("Carson","is","a","clever","boy");
// 数组元素个数
$count = count($array_var);
// 数组结构发送
echo(var_dump($array_var));
// 给数组中添加元素
$array_var[] = "HaHa!";
// 换行
echo("<br/>");
echo(var_dump($array_var));
// 删除数组中的元素
unset($array_var[0]);
echo("<br/>");
echo(var_dump($array_var));
// 数组排序(升序)
sort($array_var);
echo("<br/>");
echo(var_dump($array_var));
// 数组排序(降序)
rsort($array_var);
echo("<br/>");
echo(var_dump($array_var));

PHP的字典:

$dict_var = array("name"=>"Carson","age"=>"23","gender"=>"Male");
echo(var_dump($dict_var));
echo("<br/>");
// 字典转换成为json串
echo(json_encode($dict_var));

GET请求处理:

$name = $_GET["name"];
$age = $_GET["age"];
$sex = $_GET["sex"];
echo($name."<br/>");
echo($age."<br/>");
echo($sex."<br/>");

POST请求处理:

$name = $_POST["name"];
$age = $_POST["age"];
$sex = $_POST["sex"];
echo($name."<br/>");
echo($age."<br/>");
echo($sex."<br/>");

当变量使用_REQUEST修饰则使用GET与POST都行

$name = $_REQUEST["name"];
$age = $_REQUEST["age"];
$sex = $_REQUEST["sex"];
$pwd = $_REQUEST["pwd"];
echo($name."<br/>");
echo($age."<br/>");
echo($sex."<br/>");
echo($pwd."<br/>");

四. MySQL数据库操作与PHP交互

  • 判断连接MySQL是否成功
// 连接数据库(第一个参数为服务器地址,第二个参数为MySQL登录名,第三个参数为登陆密码)
$link = mysql_connect("127.0.0.1","root","");
// 选择连接的数据库的库名
$select_db = mysql_select_db("test");
// 进行判断,如果连接成功,向前段发送一个连接成功的消息,失败则发送失败消息
if ($link && $select_db) {
    echo("数据库连接成功!");
} else {
    echo("数据库连接失败!");
}
// 关闭数据库
mysql_close($link);
  • 查询表
// 输入SQL语句进行查询
$result = mysql_query("select * from userlist where name = '$name'");
// 返回所有结果行数(数据库中的伴随指针或游标)
$stmt = mysql_num_rows($result);
// 返回结果
$userInfo = mysql_fetch_array($result);
// 释放伴随指针
mysql_free_result($result);
  • PHP连接MySQL的设置登陆的后台数据处理源码:
<?php
// 连接数据库
    $link = mysql_connect("127.0.0.1","root","");
    // 连接哪个数据库
    $select_db = mysql_select_db("conn",$link);
    
    // 进行判断是否连接成功
    if ($link && $select_db) {
//      echo("数据库连接成功!");
        // 准备SQL语句
        $result = mysql_query("select * from userlist where name = '$name'");
        // 返回数据所在行数
        $sum_row = mysql_num_rows($result);
        // 得到数据
        $userInfo = mysql_fetch_array($result);
        
        if ($result) {
            // 如果result存在的话,说明用户存在,则匹配密码
            $user_pwd = $pwd;
            $sql_pwd = $userInfo["pwd"];
            if ($user_pwd == $sql_pwd) { // 用户密码匹配成功!
                $success = array("flag"=>"success","name"=>$userInfo["name"],"age"=>$userInfo["name"],"sex"=>$userInfo["sex"]);
                echo(json_encode($success));
            } else { // 用户密码匹配失败!
                $errorDic = array("flag"=>"用户名或密码错误!");
                echo(json_encode($errorDic));
            }
        } else { // 用户不存在
            $errorDic = array("flag"=>"用户不存在,请先注册!");
            echo(json_encode($errorDic));
        }
    } else {
        $errorDic = array("flag"=>"数据库连接失败!");
        echo(json_encode($errorDic));
    }
    // 释放伴随指针或游标
    mysql_free_result($result);
    // 关闭数据库
    mysql_close($link);

    ?>

五.iOS与PHP通讯协议设计

Xcode中iOS进行POST请求源码:

- (void)connectMySQLByPHP {
    // 文件地址:
    //http://127.0.0.1/Carsontest/testConnection.php
    // 文件数据
    //name=Carson&age=23&sex=Male&pwd=0312
    
    // 获取文件的url
    NSString *urlStr = @"http://127.0.0.1/Carsontest/testConnection.php";
    NSURL *url = [NSURL URLWithString:urlStr];
    // 创建请求对象(异步Block,POST请求)
    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
    request.HTTPMethod = @"POST";
    // 将数据转换成为NSData对象
    NSString *dataStr = @"name=Carson&age=23&sex=Male&pwd=0312";
    NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];
    request.HTTPBody = data;
    // 创建会话对象(单例)
    NSURLSession *session = [NSURLSession sharedSession];
    // 指定会话模式,为请求数据模式
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error) {
            NSLog(@"请求数据失败!-----%@",error.description);
        } else {
            NSLog(@"请求数据成功!");
            NSLog(@"%@",[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
            // JSON解析(解析成为NSDictionary对象)
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
            NSLog(@"%@",dict);
            // 将上述转化的NSDictionary的对象转化成为JSON字符串.
            BOOL flag = [NSJSONSerialization isValidJSONObject:dict];
            if (flag) {
                NSData *dataJSON = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];
                NSString *dataJSONStr = [[NSString alloc] initWithData:dataJSON encoding:NSUTF8StringEncoding];
                NSLog(@"%@",dataJSONStr);
            } else {
                NSLog(@"该JSON对象不能转化成为JSON串!");
            }
        }
    }];
    // 开始请求
    [dataTask resume];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容