H5学习感悟02

http 通信过程

客户端

  • 对域名先查找本地hosts文件有没有对应ip,如果没有就去请求DNS服务器,
  • 查找对应域名的ip地址,然后通过ip以及端口与服务端建立通道
  • 收到服务器的’包’,根据content-type处理响应的内容,开始界面渲染。
Host: localhost:63343
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:68.0) Gecko/20100101 Firefox/68.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: keep-alive
Cookie: Webstorm-91a8f251=010b5b92-7bda-48b2-a14f-b911fb6350c7; Phpstorm-9bd8916c=1d074b2f-cb88-475b-8ff1-1cc122018191
Upgrade-Insecure-Requests: 1
Pragma: no-cache
Cache-Control: no-cache

服务端:

  • 根据客户端提交过来的’包’,获取请求路径
  • 根据请求路径对应的文件扩展名找到文件的MIME TYPE
    判断文件类型是否是静态文件
  • 服务端把要发给客户端的数据打成’包’,通过连接通道发回给客户端
HTTP/1.1 200 OK
content-type: text/html
server: PhpStorm 2019.1.1
date: Thu, 6 Jun 2019 06:33:33 GMT
X-Frame-Options: SameOrigin
X-Content-Type-Options: nosniff
x-xss-protection: 1; mode=block
cache-control: private, must-revalidate
last-modified: Thu, 6 Jun 2019 03:30:21 GMT
content-length: 669

三次握手的目的是确保连接时可靠的

页面跳转

header('Location:index.html')  

在响应头中添加一个Location的头信息,客户端接收到这个头信息会自动跳转到头信息的地址。不能循环重定向

json 数据的表述手段

字面量:是代码中表述数据的一种手段

json与js字面量的区别

  • .json 属性要用""
  • json 字符串要用""
  • json 不能有注释
  • json 没有undefined

把json数据转对象的过程称为反序列化

对象转关联数组

$arr = json_decode($content,true);

将数据序列化的时候,必须要UTF-8编码

json_encode();

doc+tab 快速在php页面生成html代码

多文件上传


  
        <div class="form-group">
            <label for="images">海报label>
            <input type="file" id="images" name="images[]" class="form-control" multiple>
        div>
     var_dump($_FILES['images']);

校验文件逻辑

    if (empty($_FILES['images'])) {
      //客户端没提交音乐文件

      $GLOBALS["error_msg"] = '请提交图片文件';
      return;
  }

  $image = $_FILES['images'];

多文件长传

 for ($i = 0; $i < count($image['name']); $i++) {
        //校验是否上传成功
        if ($image['error'][$i] !== UPLOAD_ERR_OK) {
            $GLOBALS["error_msg"] = $image['name'][$i] . '文件上传失败';
            return;
        }
        //校验文件类型
        $allowed_type_image = array('image/png');
        if (!in_array($image['type'][$i], $allowed_type_image)) {
            $GLOBALS["error_msg"] = $image['name'][$i] . '文件格式非法,只能上传图片';
            return;
        }
        //校验文件大小

        if ($image['size'][$i] >= 5 * 1024 * 1024) {
            $GLOBALS["error_msg"] = $image['name'][$i] . '文件超出1M';
            return;
        }

        if ($image['size'][$i] <= 1 * 10) {
            $GLOBALS["error_msg"] = $image['name'][$i] . '文件小于10K';
            return;
        }

        //长传了文件,但还在临时目录中,开始移动
        //将上传的文件重新命名
        $source_images[$i] = uniqid() . '-' . $image['name'][$i];
        if (!move_uploaded_file($image['tmp_name'][$i], '../file/' . $source_images[$i])) {

            $GLOBALS["error_msg"] = $image['name'][$i] . '提交图片文件失败';
            return;
        }

    }

从数组中删除一条数据

foreach ($jsonObj as $key => $obj) {
    if ($obj['id'] !== $needDeleteId) {

        //break;
    } else {
        $index = array_search($obj, $jsonObj);
        //echo "有数据" . $key.'==='.$a['title'].'、、'.$index;
        //从数组中删除
        $delete = array_splice($jsonObj, $index, 1);
        echo '
';
        var_dump($delete);
        echo '
'
; var_dump($delete[0]['id']); echo '
';
        var_dump($jsonObj);
        echo '
'
; } }

mysql 数据库操作

$connection=@mysqli_connect('127.0.0.1','root','12345678','stus');

判断数据库是否连接成功

if (!$connection){
  echo '连接失败';
  return;
}

@mysqli_connect 加@忽略错误信息

基于数据库连接对象,执行一次数据库操作

$query=mysqli_query($connection,'select * from stud');//返回的不是结果,返回的是查询对象

$query

object(mysqli_result)#2 (5) {
  ["current_field"]=>
  int(0)
  ["field_count"]=>
  int(6)
  ["lengths"]=>
  NULL
  ["num_rows"]=>
  int(7)
  ["type"]=>
  int(0)
}

拿着查询对象,再到数据库中逐行取出数据

mysqli_fetch_assoc($query)//以关联数组的方式从数据库取出数据

###遍历查询到的数据

  • 第一种
$query = mysqli_query($connection, 'select * from stud');
toast($query);
$arr = array();
for ($i=0;$i<$query->num_rows;$i++){
    $arr[] = mysqli_fetch_assoc($query);
}
toast($arr);
  • 第二种
$query = mysqli_query($connection, 'select * from stud');
  toast($query);
  $arr = array();
  $row=mysqli_fetch_assoc($query);
  while ($row){
      $arr[]=$row;
      $row=mysqli_fetch_assoc($query);
  }
  • 第三种
while ($row=mysqli_fetch_assoc($query)){
      $arr[]=$row;
  }

用对象的方式操作数据库

 $conenction = new mysqli('127.0.0.1', 'root', '12345678', 'stus');

        if ($conenction->connect_error){
            die("连接失败");
        }
        echo "连接成功";


        $str="insert into users values (null,'$username','$gender','$birthday',null)";

        if ($conenction->query($str)===TRUE){
            echo "插入数据成功";
            header('Location:userlist.php');
        }else{
            echo $conenction->error;
        }


        $conenction->close();

释放数据库操作

释放查询操作

mysqli_free_result($query);

断开connection连接

mysqli_close($connection);

mysql 编码问题

mysqli_set_charset($connection,'utf8');

Cookie

  • 从响应报文的响应头里获取,从请求报文的请求头发出去

  • 如果只传两个参数,不传第三个参数(cookie的过期时间),

  • 默认cookie的过期时间是会话级别(浏览器的打开到关闭,关闭可浏览器就自动删除)

  • cookie取出来的数据都是字符串类型

setcookie('name','hcy');
setcookie('name');//直传键不传值,删除cookie,过期
toast($_COOKIE);//返回的是关联数组

设置cookie的过期时间

//设置cookie 一天后到期
setcookie('name','hcy',time()+1*24*60*60);

cookie的作用范围

//path用于设置cookie的作用范围
setcookie('name','hcy',time()+1*24*60*60,'/');

domain 用于设置cookie的域名范围

cookie的问题

session

使用session

session_start();//给当前用户找属于他的箱子,session_id 通过cookie的方式存到浏览器(客户端)

session是有类型的,取出来的数据不需要强制转换

session操作

$_SESSION['name']='hcy2019';
//取消session
unset($_SESSION['name']);
//获取session
vardump($_SESSION);

session与cookie的区别

  • cookie是核心,session是基于cookie的,是一种处理cookie的安全性而提出的一种技术手段
  • cookie的值都是字符串,有时需要强制转换,session是有类型的,取出来的数据不需要强制转换
  • cookie数据存于浏览器(客户端),session给当前用户找属于他的箱子,session_id 通过cookie的方式存到浏览器(客户端),而值存于服务器

.超全局变量

  • $GLOBALS 全局作用域可用的全部变量
  • $_SERVER 获取服务端相关信息
  • $_REQUEST 获取提交的相关参数
  • $_POST 获取post提交的相关参数
  • $_GET 获取get提交的相关参数
  • $_FILES 获取上传文件
  • $_ENV 操作环境变量
  • $_COOKIE 操作cookie
  • $_SESSION 操作session

你可能感兴趣的:(h5)