Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

注册案例CRUD文档 #141

Open
zhengwei1949 opened this issue Jun 2, 2018 · 0 comments
Open

注册案例CRUD文档 #141

zhengwei1949 opened this issue Jun 2, 2018 · 0 comments

Comments

@zhengwei1949
Copy link
Owner

注册案例(CRUD 增删改查四大功能做出来)

查询

  • 把练习素材拷贝到文件夹当中
  • 打开list.html页面进行分析
    • 使用索引数组来描述,数组中的每一项是一个关联数组
    • 数据结构描述如下
[
    {
        "id":1,
        "name":"张三1",
        "nickname":"张三昵称",
        "age":20,
        "phone":"13000000000",
        "class":"黑马一期",
        "gender":"",
        "src":"./upload/monkey.png"
    },
    {
        "id": 2,
        "name": "张三2",
        "nickname": "张三昵称",
        "age": 20,
        "phone": "13000000000",
        "class": "黑马一期",
        "gender": "",
        "src": "./upload/monkey.png"
    },
    {
        "id": 3,
        "name": "张三3",
        "nickname": "张三昵称",
        "age": 20,
        "phone": "13000000000",
        "class": "黑马一期",
        "gender": "",
        "src": "./upload/monkey.png"
    },
    {
        "id": 4,
        "name": "张三4",
        "nickname": "张三昵称",
        "age": 20,
        "phone": "13000000000",
        "class": "黑马一期",
        "gender": "",
        "src": "./upload/monkey.png"
    },
    {
        "id": 5,
        "name": "张三5",
        "nickname": "张三昵称",
        "age": 20,
        "phone": "13000000000",
        "class": "黑马一期",
        "gender": "",
        "src": "./upload/monkey.png"
    }
]
  • list.html页面 --> 修改扩展名 list.php
  • 使用file_get_contents 读取student.json文件,并使用json_decode转换成二维数组
header('content-type:text/html;charset=utf-8');
$str = file_get_contents('./student.json');
$arr = json_decode($str,true);
  • 使用foreach遍历渲染
<tbody>
    <?php foreach($arr as $key=>$value){?>
    <tr>
        <td><?php echo $value['id'] ?></td>
        <td><?php echo $value['name'] ?></td>
        <td><?php echo $value['nickname'] ?></td>
        <td><?php echo $value['age'] ?></td>
        <td><?php echo $value['phone'] ?></td>
        <td><?php echo $value['gender'] ?></td>
        <td><?php echo $value['class'] ?></td>
        <td><img src="<?php echo $value['src'] ?>"></td>
        <td>
            <a href="#">编辑</a>
            <a href="#">删除</a> 
        </td>
    </tr>
    <?php } ?>
</tbody>

删除

  • 修改list.php文件的删除的超链接为<a href="delete.php?id=<?php echo $value['id'];?>">删除</a>
  • 创建delete.php文件
  • 使用$_GET接收id值
header('content-type:text/html;charset=utf-8');
print_r($_GET);
  • 使用file_get_contents读取stduent.json
$str = file_get_contents('./student.json');
$arr = json_decode($str,true);
  • 对二维数组进行遍历,判断每一项的id值是否和$_GET['id']相等
header('content-type:text/html;charset=utf-8');
// print_r($_GET);
$id = $_GET['id'];
$str = file_get_contents('./student.json');
$arr = json_decode($str,true);
foreach ($arr as $key => $value) {
    if($value['id'] == $id){
        echo '找到了要删除的项';
        break;
    }
}
  • 使用array_splice删除这一项
header('content-type:text/html;charset=utf-8');
// print_r($_GET);
$id = $_GET['id'];
$str = file_get_contents('./student.json');
$arr = json_decode($str,true);
foreach ($arr as $key => $value) {
    if($value['id'] == $id){
        // echo '找到了要删除的项';
        array_splice($arr,$key,1);
        break;
    }
}
  • 把删除了一项的数据重新写回student.json文件当中
header('content-type:text/html;charset=utf-8');
// print_r($_GET);
$id = $_GET['id'];
$str = file_get_contents('./student.json');
$arr = json_decode($str,true);
foreach ($arr as $key => $value) {
    if($value['id'] == $id){
        // echo '找到了要删除的项';
        array_splice($arr,$key,1);
        file_put_contents('./student.json',json_encode($arr));
        break;
    }
}
  • 使用header函数跳转回列表页
header('content-type:text/html;charset=utf-8');
// print_r($_GET);
$id = $_GET['id'];
$str = file_get_contents('./student.json');
$arr = json_decode($str,true);
foreach ($arr as $key => $value) {
    if($value['id'] == $id){
        // echo '找到了要删除的项';
        array_splice($arr,$key,1);
        file_put_contents('./student.json',json_encode($arr));
        echo '删除成功';
        header('refresh:2;url=list.php');
        break;
    }
}

新增

  • 把register.html变成register.php
  • 给form标签添加action,method,enctype
    • <form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post" enctype="multipart/form-data">
  • 使用$_POST,$_FILES接收数据
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    print_r($_POST);
    print_r($_FILES);
}
  • 上传文件
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // print_r($_POST);
    // print_r($_FILES);
+    if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
+        $file = $_FILES['photo'];
+        $name = time().rand();
+        $ext = strrchr($file['name'],'.');
+        $fileName = './upload/'.$name.$ext;
+        move_uploaded_file($file['tmp_name'],$fileName);
    }
}
  • 使用file_get_contents读取student.json,转换成二维数组
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // print_r($_POST);
    // print_r($_FILES);
    if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
        $file = $_FILES['photo'];
        $name = time().rand();
        $ext = strrchr($file['name'],'.');
        $fileName = './upload/'.$name.$ext;
        move_uploaded_file($file['tmp_name'],$fileName);
+        $str = file_get_contents('./student.json');
+        $arr = json_decode($str,true);
        
    }
}
  • 构建当前添加新的数组的id
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // print_r($_POST);
    // print_r($_FILES);
    if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
        $file = $_FILES['photo'];
        $name = time().rand();
        $ext = strrchr($file['name'],'.');
        $fileName = './upload/'.$name.$ext;
        move_uploaded_file($file['tmp_name'],$fileName);
        $str = file_get_contents('./student.json');
        $arr = json_decode($str,true);
        $myid = $arr[count($arr) - 1]['id'] + 1;//思考一下为什么要这样写
        echo $myid;
    }
}
  • 把新数组添加到之前二维数组
header('content-type:text/html;charset=utf-8');
if($_SERVER['REQUEST_METHOD'] == 'POST'){
    // print_r($_POST);
    // print_r($_FILES);
    if(isset($_FILES['photo']) && $_FILES['photo']['error'] == 0){
        $file = $_FILES['photo'];
        $name = time().rand();
        $ext = strrchr($file['name'],'.');
        $fileName = './upload/'.$name.$ext;
        move_uploaded_file($file['tmp_name'],$fileName);
        $str = file_get_contents('./student.json');
        $arr = json_decode($str,true);
        $myid = $arr[count($arr) - 1]['id'] + 1;//思考一下为什么要这样写
        // echo $myid;
        $arr[] = [
            "id"=>$myid,
            "name"=>$_POST['username'],
            "nickname"=>$_POST['nickname'],
            "age"=>$_POST['age'],
            "phone"=>$_POST["tel"],
            "class"=>$_POST['class'],
            "gender"=>$_POST['gender'],
            "src"=>$fileName
        ];
        print_r($arr);
    }
}
  • 把新的二维数组重新写回student.json
file_put_contents('./student.json',json_encode($arr));
  • 使用header跳转到列表页
echo '新增成功';
header('refresh:2;url=list.php');

编辑

显示编辑页面

  • 把list.php中的编辑的超链接换成edit.php?id=
  • 创建edit.php这个文件
  • 在edit.php中使用$_GET接收id值
  • 通过file_get_contents读取student.json ---> json_decode转换成二维数组
  • 对这个二维数组进行遍历 --> 找到和$_GET['id']值一样的这个数据
  • 对edit.php中的表单文本域添加value默认值
    • checkbox --> checked
    • select --> selected
  • 接收用户提交的数据 --> 我们就发现了一个问题,我们如果想要修改数据,必须要用一个东西叫id
  • 在form表单里面添加一个隐藏域 把id传进去 <input type="hidden" name="id" value="<?php echo $data['id'];?>">

处理编辑提交的数据

  • 创建edit_do.php页面,处理表单提交的数据
  • 通过$_POST拿到所有的数据
  • 所谓的修改就是找到我们对应二维数组中的这个对象,数据进行覆盖
  • 万一用户进行文件上传,他肯定是想要用新的图片做头像
    • 如果用户没有上传 ---> 用旧的图片做头像
    • 如果用户上传了 --> 用新的图片做头像
  • 使用file_get_contents读取json文件 --> 转换为二维数组
  • 把对应这个索引的数据替换掉 变成一个新的二维数组
  • 重新写入json文件
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant