lxl-php第五天

cookie


  • 设置cookie : setcookie('名','值',有效期,范围)
    • setcookie('username','jake',PHP_INT_MAX)
  • cookie的删除
    • setcookie('名','值',time()-1)
    • setcookie('名',false) / setcookie('名','')
    • 注意!! 删除的时候和要和设置的时候格式一致,参数的数量要一致
  • =====实现登录功能(cookie方法)=====
    //登录界面 login.php
    if($_SERVER['REQUEST_METHOD'] == 'POST') {
        $str = file_get_contents['./users.json'];
        $arr = json_decode($str,true);//转换成2维数组
        $username = $_POST['username'];//拿到提交的用户名和密码
        $password = $_POST['password'];
    
        foreach($arr as $key => $value) {//遍历users.json里的用户名和密码 判断是否和输入的用户名,密码一致
            if($value['username'] == $username && $value['password'] == $password) {
                setcookie('login',1,PHP_INT_MAX);//设置一个cookie值
                echo '登录成功';//如果一致了,就是登录成功
                header('refresh:1;url=main.php');//登录成功 跳转到主页面
                die();//登录成功,后面的代码就无需执行
            }
        }
    }
    //主页面
    //如果有设置cookie[login] 并且 改值 就是1;就表示已经登录成功
        退出
    
        登录
        
    
  • 实现退出功能
    //主页面
    登录
    //退出页面 loginout.php
    
    

session


  • session的设置

    • php中默认不开启session; session_start() 开启
    • 设置的方法 $_SESSION['名'] = 值;
  • session的删除

    • session_destroy() 直接销毁session文件
    • unset($_SESSION['名']) 删除一个session中的信息
    • $_SESSION=[] 删除所有的session信息,文件还存在
  • =====实现登录功能(cookie方法)=====

    //登录页面 login.php
    if ($_SERVER['REQUEST_METHOD']=='POST') {
        $username = $_POST['username'];
        $password = $_POST['password'];
        $str = file_get_contents['./users.json'];
        $arr = json_decode($str,true);
        foreach($arr as $key=>$value) {
            if ($username == $value['username'] && $password == $value['password']) {
                session_start();//用session 就必须要开启
                $_SESSION['login'] = true; // 设置se  ssion的值
                header('refresh:1;url=main.php')//跳转到主页面
                die();
            }
        }
    }
    
    //主页面 main.php
    
    
    
        退出
    
        登录
    
    
  • 实现退出页面 0

    登录
    //退出 login out.php
    session_start();//下面要用到session 就必须要写这句话
    session_destroy();//删除session
    echo '退出成功';
    header('refresh:1;url=main.php')//跳转到主页面
    ?>
    

注册案例


  • list页面 将数据动态渲染到list页面
    1. 创建student.json文件(数组,每一项是一个对象)
    2、list.html页面 --> 修改扩展名 list.php
    3. 使用file_get_contents 读取student.json文件,并使用json_decode转换成二维数组
    4. 使用foreach遍历渲染
    
    ...
    $value) { ?>
        
            
            
            
            
            
            
            
            
            
                编辑
                删除 
            
        
    
  • 删除.
    1. 把list.php中的删除对应的a标签加上href值,delete.php?id=
    2. 创建delete.php,在这个文件里面通过$_GET来获取id值
    3. 使用file_get_contents读取stduent.json
    4. 使用json_decode转换成二维数组
    5. 对二维数组进行遍历,判断每一项的id值是否和$_GET['id']相等
    6. 如果相等,使用array_splice删除这一项($key)
    7. 删除成功之后,使用header函数跳转到list.php列表
//list页面中
 删除 //根据不同的id 对应到删除的那一项
 //delete页面
  $value) {//循环json数据,找到二维数组中id与要删除的那项id一致的那项
     if ($id == $value['id']) {
         array_splice($arr,$key,1);//根据索引删除
     }
 }
 file_put_contents('./student.json',json_encode($arr));//将删除后的数据 放到json文件中
 echo '删除成功';
 header('refresh:1;url=list.php');
 ?>
  • 增加 register.php
    1. 把register.html变成register.php
    2. 给form标签添加action,method,enctype
    3. 使用$_POST,$_FILES接收数据
    4. 上传文件
    5. 构建当前添加新的数组
    6. 使用file_get_contents读取student.json,转换成二维数组
    7. 把新数组添加到之前二维数组
    8. 把新的二维数组重新写回student.json
    9. 使用header跳转到列表页
//在新增页面中,因为也涉及到文件的上传
$myid; "name" => $_POST['username']; "nickname" => $_POST['nickname'], "age" => $_POST['age'], "mobile" => $_POST['tel'], "gender" => $_POST['gender'], "class" => $_POST['class'], "src" => $filename; ] //将新的数据 放入json文件中 file_put_contents('./student.json',json_encode($arr)); echo '添加成功'; header('refresh:1;url=list.php'); } } ?>
  • 编辑/修改 edit.php

    [ 分两大步:显示编辑页面, 处理编辑提交的数据 ]

    1. 把list.php中的编辑的超链接换成edit.php?id=
    2. 创建edit.php这个文件
    3. 在edit.php中使用$_GET接收id值
    4. 通过file_get_contents读取student.json ---> json_decode转换成二维数组
    5. 对这个二维数组进行遍历 --> 找到和$_GET['id']值一样的这个数据
    6. 对edit.php中的表单文本域添加value默认值
        + checkbox --> checked
        + select --> selected
    7. 使用$_SERVER['REQUEST_METHOD']判断当前到底是GET还是POST
    8. 接收用户提交的数据 --> 我们就发现了一个问题,我们如果想要修改数据,必须要用一个东西叫id  
    9. 在form表单里面添加一个隐藏域 把id传进去 ``
    10. 通过$_POST拿到所有的数据
    11. 所谓的修改就是找到我们对应二维数组中的这个对象,数据进行覆盖
    12. 万一用户进行文件上传,他肯定是想要用新的图片做头像 
        + 如果用户没有上传 ---> 用旧的图片做头像
        + 如果用户上传了 --> 用新的图片做头像
    13. 使用file_get_contents读取json文件 --> 转换为二维数组
    14. 把对应这个索引的数据替换掉 变成一个新的二维数组
//1.加载显示编辑页面
//list页面中
 编辑
//编辑页面中
 $value) {
    if ($id == $value['id']) {
        $data = $value;
        break;
    }   
}
?>

...

姓名:
昵称:
年龄:
电话:
性别:>男
>女
班级:
头像: 

// 处理编辑提交的数据
//先确认修改的是哪一个
$id = $_GET['id'];
$tsr = file_get_contents('./student.json');
$arr = json_decode($str,true);
foreach($arr as $key => $value){
    if ($id == $value['id']) {
        $data = $value;
        $index = $key;
        break;
    }
}

//对上传的文件作出判断 处理
if(!empty($_FILES) && $_FILES['photo']['id']) {
    $file = $_FILES['photo'];
    $name = time().rand();
    $ext = strrchr($file['name'],'.');
    $filename = './upload'.$name.$ext;
    move_uploaded_file($file['tmp_name'],$filename);
} else {//如果没有修改图片,就还是用之前的
    $filename = $data['src'];
}

$myarr = [
    "id"=>$_POST['id'],//提交的 那个数据中的id,就是隐藏的input
    "name"=>$_POST['username'],
    "nickname"=>$_POST['nickname'],
    "age"=>$_POST['age'],
    "mobile"=>$_POST['tel'],
    "gender"=>$_POST['gender'],
    "class"=>$_POST['class'],
    "src"=>$filename
];
$arr[$index] = $myarr;//修改json数组中的那一项
file_put_contents('./student.json',json_encode($arr));
echo '编辑成功';
header('refresh:1;url=list.php');

你可能感兴趣的:(lxl-php第五天)