WEB应用(五)

接下来我们学习后端编程语言PHP

PHP简介:

全称:Hypertext Preprocessor,超文本预处理器。

是一种创建动态交互性站点的开源语言

在服务器上执行

网络安全最常用方案以PHP为范本

PHP文件:

PHP文件可包含文本、HTML、css、JavaScript代码和PHP代码。

在服务器上执行,结果以纯HTML形式返回给浏览器

文件的后缀以   .php  

创建第一个PHP文件:

1、位置必须在phpstudy /www  目录中或者phpstudy/www 目录的子目录中

2、使用vscode 打开我们创建好的文件夹中

 

3、确保我们的Apache和Mysql 为开启状态。

4、配置文件 参考这篇文章

怎么查看phpstudy可以使用了呢。         随意打开一个浏览器

 现在就可以在vscode中创建文件,写代码了。

<?php
    // 解决中文乱码
    // Content:内容
    // type:类型
    // charset:character set 字符集合/编码
    header('Content-type:text/html;charset=utf-8');
    // php中的注释
    // 单行注释 快捷写法:ctrl + /
    // 多行注释 /* */
    // echo : 输出 一次可以输出多个数据
    echo '你好世界!' , '你好网络安全' , '你好北京';
    // print() : 打印 一次只能打印一个数据
    print('hello');
    echo '<br>';
    // var_dump():输出 既可以打印数据的值,也可以输出数据的类型
    var_dump('你好');

    // HTML中的标签在php文件中书写的方式:
    // 在php文件中以字符串(用单引号或者双引号包裹)的形式来书写HTML标签
    // 输出h1标题标签效果
    echo "<h1>标题标签</h1>";

    // 书写Js代码
    echo "<script>alert(123)</script>";

?>

 

 

 

每次执行新的代码,刷新页面。 

<?php
    header('Content-type:text/html;charset=utf-8');
    // php中的变量
    $num = 100;
    $age = 18;
    $name = 'tony';

    echo $num , '<br>' ,  $age , '<br>' ,  $name;

    // php中变量的命名规则:
    // 1.变量名以$美元符号开头
    // 2.$符号后的第一个字符必须是字母或者下划线_
    // 3.变量名的其他字符只能是数字,字母或者下划线
    // 4.变量名中不能包含空格
    // 5.变量名严格区分大小写,$Y和$y不是同一个变量
?>

 

<?php
    header('Content-type:text/html;charset=utf-8');
    // php的数据类型
    // 一:基本类型
    // 1.int : 整型  代表整数 
    // 2.float : 浮点型  代表小数
    // 3.bool : 布尔类型 true/false
    // 4.string : 字符串型  使用单引号或者双引号包裹的内容

    $num = 10;
    var_dump($num); // int

    $float = 3.14;
    var_dump($float); // float

    $bool = true;
    var_dump($bool); // bool

    $str = '100';
    var_dump($str); // string

    // 二:复合类型
    // 1.array 数组
    // 2.object 对象

    // 三:特殊类型
    // NULL 空
    $a = NULL;
    var_dump($a); // NULL    和JS里的NULL是一样的    主动赋值
?>

运算符 :加减乘除等。这些,都和JS是一样的,这里就不讲了。

当然还有流程控制,唯一不同的是PHP在循环结构中多了一种foreach

其中foreach主要用于遍历可迭代对象

数组:

是可以在单个变量中存储多个数值的特殊变量

<?php
    header('Content-type:text/html;charset=utf-8');
    // 创建数组
    // array()
    $arr = array('张三','tony','老六');
    var_dump($arr);
    echo '<br>';
    // [键名1]=>键值1
    // [键名2]=>键值2
    // 数值数组:带有数字ID键的数组
    // 关联数组:带有指定键(可能是字符串)的数组,每个键关联一个值

    $arr1 = array('name'=>'tony','age'=>18,'sex'=>'男');
    var_dump($arr1);

    // echo,print 输出的时候只能输出基本类型数据
    // var_dump() 可以输出复合类型数据
    echo '<br>';
    
    // 另一种方式生成数组
    $arr2 = array(); // 空数组
    $arr2['height'] = 180;
    $arr2['sex'] = '女';
    $arr2['weight'] = '100kg';
    var_dump($arr2);
?>
<?php
    header('Content-type:text/html;charset=utf-8');
    // 数组
    // 数组取值:数组[键名]
    $arr1 = array('tony','lucy','lili','张三','李四','老六');
    // 键:          0       1      2     3       4     5
    // var_dump($arr1);
    // 获取数组中每一个键的值
    // echo $arr1[0] . '<br>';
    // echo $arr1[1] . '<br>';
    // echo $arr1[2] . '<br>';
    // echo $arr1[3] . '<br>';

    // for($i=0;$i<=4;$i++){
    //     echo $arr1[$i] . '<br>';
    // }

    // count(数组):计数   获取数组元素的数量
    // echo count($arr1);

    // 可以通过数值数组元素的数量推导出最大的键名
    // 最大的键名 = 数组元素的数量 - 1
    // 最大的键名 = count($arr1) - 1
    for($i=0;$i<=count($arr1)-1;$i++){
        echo $arr1[$i] . '<br>';
    }
?>
<?php
    header('Content-type:text/html;charset=utf-8');
    // 生成一个关联数组
    $arr2 = array('name'=>'tony','age'=>25,'sex'=>'男','height'=>180);
    // var_dump($arr2);
    // 获取数组键值: 数组[键名]
    // echo $arr2['name'] . '<br>';
    // echo $arr2['age'] . '<br>';
    // echo $arr2['sex'] . '<br>';

    // foreach : 遍历 可以遍历可迭代对象
    // foreach(数组 as 键=>值){代码}
    foreach($arr2 as $a=>$b){
        // =>左侧的变量中保存的是每次循环时,数组的键名
        // =>右侧的变量中保存的是每次循环时,数组的键值
        // echo $a . '<br>';
        echo $b . '<br>';
    }
?>

函数当然和JS差不多,但这里做一个练习

<?php
    header('Content-type:text/html;charset=utf-8');
    // 封装一个可以判断两个数字中较大数字的函数
    function getMax($a,$b){
        // if($a>$b){
        //     return $a;
        // }else{
        //     return $b;
        // }
        // 三元运算符/三目运算符  表达式 ? a : b;
        // 判断表达式,如果为true,执行?后的a,否则执行:后的b
        return $a>$b ? $a : $b;
    }

    // 调用函数
    echo getMax(100,80);

?>
<?php
    header('Content-type:text/html;charset=utf-8');
    // 类和对象
    // 类:一些具有共同特征事物的集合
    // 对象:具体的事物,具体到独一无二的程度

    // 在程序中声明一个类
    // class 类名{
        // 成员变量;
        // 成员函数;
    // }

    // 声明一个'人'的类
    // 注意:类名称的第一个字符大写
    class Person{
        // 成员变量,记录特征
        var $name;
        var $sex;
        var $age;

        // 成员函数,记录行为
        function sleep(){
            echo '可以睡觉';
        }
        function eat(){
            echo '可以吃东西';
        }
    }

    // 类的实例化,类经过实例化操作后,就会实例化出一个对象
    // new : 实例化
    // new 类 => 对象
    $p = new Person;
    // var_dump($p);
    // 实例化成对象后,类中的成员变量->对象的属性
    // 类中的成员成员函数->对象的方法

    // 给对象的属性赋值 : 对象->属性名 = 属性值;
    $p->name = 'tony';
    $p->age = 25;
    $p->sex = '男';
    var_dump($p);

    // 调用对象的方法:对象->方法名();
    $p->sleep();
    echo '<br>';
    $p->eat();
?>
<?php
    header('Content-type:text/html;charset=utf-8');

    // 声明一个动物类
    class Animal{
        var $name;
        var $age;

        function sleep(){
            // $this : 这个对象 调用此方法的对象
            echo $this->name . '可以睡觉';
        }

        function eat(){
            // $this : 这个对象 调用此方法的对象
            echo $this->name . '可以吃东西';
        }
    }

    $a = new Animal;
    // 给对象的属性赋值:对象->属性 = 属性值;
    $a->name = '哈士奇';
    $a->age = 3;

    // 获取对象的属性值:对象->属性名
    echo $a->name;
    echo '<br>';
    echo $a->age;
    echo '<br>';

    // 调用对象的方法:对象->方法名()
    $a->sleep();
    echo '<br>';
    $a->eat();

?>
<?php
    header('Content-type:text/html;charset=utf-8');
    // 声明一个人类
    class Person{
        var $name;
        var $sex;

        // 构造函数 类在被实例化(new)时自动触发构造函数
        function __construct($a,$b){
            // echo 'hello';
            $this->name = $a;
            $this->sex = $b;
        }
    }
    // new 类名(参数),参数会传递给类的构造函数
    $p = new Person('tony','男');
    var_dump($p);
?>

PHP超级全局变量:

在PHP中预定义了几个超级全局变量(superglobals)

这表示它们在一个脚本的全部作用域都可以使用,不需要特别说明,就可以在函数及类中使用

常见的超级全局变量: 

$_REQUEST

$_POST

$_GET

$_FILES

$_COOKIE

$_SESSION

现在我们就要进行简单的前后端交互了                              先展示代码

<?php
    header('Content-type:text/html;charset=utf-8');
    // 超级全局变量
    // $_GET : 获取get请求传递的参数
    var_dump($_GET);
?>

 注意:这个HTML文件同样和我们上面学习php时文件存放位置相同

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 注意:表单在访问的时候必须经过服务器(浏览器url中输入127.0.0.1) -->
    <!-- form表单:收集用户的数据并传递给服务器 -->
    <!-- action="表单数据传递的地址" -->
    <!-- method="设置表单传参方式 get/post" -->
    <form action="08_get.php" method="get">
        用户名: <input type="text" name="username">
        <br>
        密码: <input type="password" name="userpwd">
        <br>
        <input type="submit">
    </form>

    
</body>
</html>

 首先我们在浏览器中的地址栏输入127.0.0.1  找到我们的文件夹

 先打开HTML文件,再在表单中输入点东西。用户名:张三丰,密码:123456

点击提交            再到houduan.php中查看

 出现这样的就是成功了

 接下来可以试试post请求方式,代码不变,将get换成post即可。

但是我们看到效果是一样的,可是区别是什么呢?

这是get请求方式下

你们可以看看post请求

get请求和post请求的区别:

get请求:get一般是在服务器获取数据,get请求传递的参数会显示在url地址栏中,相对不安全,get请求的速度相对较快

 post请求:post一般是向服务器发送数据,post请求传递的参数不会显示在url地址栏,相对更安全,post请求的速度相对较慢

查看post方式传递的数据:

 表单页面按下F12->网络选项->提交表单->点击状态码为200的网络请求选项->找到请求选项->查看到表单数据

 get请求:

1.在url地址栏输入的内容,回车发送请求,get类型的请求

2.表单method="get",提交表单时,发送的get请求

3.超链接传参也是get方式的请求 

http://127.0.0.1/new_php/houduan.php?username=张三丰&userpwd=123456

? : 用来携带参数

& : 连接多个数据

post请求:

表单method="post",提交表单时,发送的是post类型请求

 假设不知道前端发送的是get请求还是POST请求,那么后端就可以使用request。

HTML的代码不需要变,PHP中 var_dump($_REQUEST);

$_REQUEST :

1、 既可以获取get方式传递的数据,也可以获取post方式传递的数据

2、获取请求的速度相对$_GET和$_POST较慢

文件上传:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- 文件上传时,表单method必须为"post" -->
    <!-- 文件上传时,必须设置enctype="multipart/form-data" -->
    <form action="file.php" method="post" enctype="multipart/form-data">
        <!-- 文件上传控件 -->
        <input type="file" name="pic">
        <br>
        <input type="submit">
    </form>
</body>
</html>
<?php
    header('Content-type:text/html;charset=utf-8');
    // 超级全局变量
    // $_FILES : 接收上传的文件数据
    var_dump($_FILES);
    // 当前的php默认设置上传文件大小的限制,最大不能超过2M
?>

接下来我们要对用户传入的内容进行校验      话不多,直接上代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <form action="12_validate.php" method="post">
        用户名: <input type="text" name="username">
        <br>
        密码: <input type="password" name="userpwd">
        <br>
        <input type="submit" value="登录">
    </form>
</body>
</html>
<?php
    header('Content-type:text/html;charset=utf-8');
    // 接收用户传递的数据
    // var_dump($_REQUEST);
    // 数组取值:数组[键名]
    $uname = $_REQUEST['username'];
    $upwd = $_REQUEST['userpwd'];
    // echo '用户名:' . $uname;
    // echo '<br>';
    // echo '密码:' . $upwd;

    // empty(参数):判断参数是否是空字符串
    // 如果是空字符串,返回true
    // 如果不是空字符串,返回false

    // 如果用户名或者密码没有输入内容,提示 用户名或密码不能为空!
    if(empty($uname) || empty($upwd)){
        // die('字符串'):输出字符串,并且终止后续程序的执行
        die('用户名或密码不能为空!');
    }

    // 只允许用户名是大写或者小写字母
    // preg_match(正则规则,需要校验的字符串):正则校验
    // 在这里我们不去学习正则规则,如有需要可以去百度
    // 如果字符串符合正则规则,返回1
    // 如果字符串不符合正则规则,返回0
    $res = preg_match('/^[a-zA-Z]+$/',$uname);
    if($res == 0){
        die('用户名只能包含大写或者小写字母!请勿输入其他字符!');
    }


?>

欲知后事如何,且听下回分解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值