美文网首页
PHP -- 数据库10 -- 学生管理小案例

PHP -- 数据库10 -- 学生管理小案例

作者: 潘肚饿兵哥哥 | 来源:发表于2019-09-25 22:25 被阅读0次

\color{rgba(254, 67, 101, .8)}{引入php文件}

如何引入php文件:

once 一次 include包含 require需要

include(文件) / include_once(文件)
require(文件) / require_once(文件)

用法:
include require
include('study.php'); //这样文件就引入了
要引入的文件存在时,两者没有区别
不存在时,require报解析错误 include报警告错误

如果引入的文件和本文件是有相关性的,那么就用include
因为如果出错了,有报错信息可以看到问题所在
如果引入的文件和本文件无交集,只是显示,就用require

include_once / require_once
如果调函数的话,调两次同一个函数,第二次调就会出错,因为函数不能重名
这样就可以用include_once require_once,他就会只调一次
以后都用include_oncerequire_once


\color{rgba(254, 67, 101, .8)}{student\_add.php}


<?php
    error_reporting(E_ALL ^ E_NOTICE);//E_ALL屏蔽所有错误,也可以从php.ini(配置文件)屏蔽,但是那样会屏蔽掉所有的错误,在这里用这个函数只会屏蔽掉这里的错误,后面的^ E_NOTICE表示除了notice错误,其他的错误都报出来

    require_once('db.php');//引入封装好的函数库

    if(!empty($_POST)){//如果post不为空,表示用户点了提交

        $data = $_POST;
        //接收post提交过来的所有数据

        //如果姓名 or 学号为空,就不让用户提交
        if(empty($data['number']) || empty($data['name'])){//判断名字和学号是否空
            die("<script>alert('学号或姓名为空'); history.back();</script>");//如果为空输出提示信息,并回到上一层(前一个url页面),等价于点浏览器的回退,这是JS的browser对象中的history对象
        }


        //区分是添加还是修改
        //这个id是页面中用户提交的信息(此页面最下一行代码)
        //如果大于0,就是修改
        if($data['id'] > 0){
            $sql = "update student set number='{$data['number']}', name ='{$data['name']}', sex ='{$data['sex']}', age ='{$data['age']}' where id={$data['id']}";
        }else{//否则就是添加
            $sql = "insert into student (number, name, sex, age) values ('{$data['number']}', '{$data['name']}', '{$data['sex']}', '{$data['age']}')";
        }
        $ret = execute($sql);
        //调用封装好的函数 execute查询所有数据
        //无论是添加还是修改都是调用这个封装好的函数,区别只是sql语句不同


        if($ret){
            die("<script>alert('操作成功'); location.href='student_list.php';</script>");//操作成功就跳转到student_list.php
        }else{
            die("<script>alert('操作失败'); location.href='student_list.php';</script>");//操作失败也跳转到student_list.php
        }
    }
    $id = $_GET['id'];
    //这里用于接收student_list.php点击修改之后,跳转到这个页面,发送的信息
    //在student_list.php页面点击修改没问题,但是点击添加学生会notice(通知)报错
    //可以用三元运算符检测,也可以直接屏蔽这个错误,在此页面顶部用error_reporting()


        //查询用这个语句,如果是添加就不用这个语句了,所以要先判断一下,然后在下面页面中显示
        //id是自增长的才这样写
        if($id > 0){
        $sql = "select * from student where id=$id limit 1";
        $row = get_row($sql);
    }
    
?> 







<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>添加页面</title>
</head>
<body>
    <h3>添加学生</h3>
    <form action="" method="post">
        <p>学号: <input type="text" name="number" <?php echo $row['id'] > 0?'readonly':''; ?> value="<?php echo $row['number']; ?>"></p> 
        <!-- readonly 只读 disabled 不可用 只能在修改时使用,添加时不能用-->
        <!-- 如果用disable,数据不会带着走,会显示姓名或学号为空 -->

        <p>姓名: <input type="text" name="name" value="<?php echo $row['name']; ?>"></p>
        <p>性别: <input type="radio" name="sex" value="1" <?php if($row['sex']==1){echo 'checked';}?> />男<input type="radio" name="sex" value="2" <?php if($row['sex']==2){echo 'checked';}?>/>女</p>
        <!-- 如果用户输入1,男按钮输出checked,如果用户输入2,女按钮输出checked -->
        <p>年龄: <input type="text" name="age" value="<?php echo $row['age']; ?>"></p>
        <p><button>提交</button></p>
        <input type="hidden" name="id" value="<?php echo $row['id'];?>">
        <!-- 如果点击添加就把要修改列的id带到修改页面去,如果是添加,value就是空的 -->
        <!-- 在上面判断是添加还是修改,就判断这里的值到底是大于0还是空 -->
    </form>
</body>
</html>




\color{rgba(254, 67, 101, .8)}{student\_list.php}

<?php
//header("Content-type:text/html;charset=utf-8");

    
    /* 
     
        如何引入php文件:
        
        //once 一次  include包含 require需要
        
        include(文件) include_once(文件)  
        require(文件) require_once(文件)
     
     用法: 
     include  require
     include('study.php'); //这样文件就引入了
     要引入的文件存在时,两者没有区别
     不存在时,require报解析错误  include报警告错误
     
     
     如果引入的文件和本文件是有相关性的,那么就用include
     因为如果出错了,有报错信息可以看到问题所在
     如果引入的文件和本文件无交集,只是显示,就用require
     
     
     include_once  require_once
     如果调函数的话,调两次同一个函数,第二次调就会出错,因为函数不能重名
     这样就可以用include_once  require_once,他就会只调一次
     以后都用include_once、 require_once
    */ 


    //通过这个文件调用封装好的函数库 db.php
    require_once('db.php');
    $sql = "select * from student";
    $list = get_all($sql);
?>
    
    
    
    
        
<!DOCTYPE html>
<html lang="zh">
<head>
    <title>学生列表</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title></title>
</head>
    <body>
       <h3 align="center">学生列表</h3>
       <p align="center"><a href="student_add.php">添加学生信息</a></p>
       <hr size="10" color="gray" />
       <table align="center" width="1200" border="1" cellspacing="0" cellspadding="3"><!-- cellspacing单元格间距 cellpadding单元格边距 -->
       
       <tr>
           <th>ID</th>
           <th>学号</th>
           <th>姓名</th>
           <th>性别</th>
           <th>年龄</th>
           <th width="80">操作</th>
       </tr>

        <?php
            foreach($list as $v){       
        ?>

        <tr align="center">
            <td><?php echo $v['id'];?></td>
            <td><?php echo $v['number'];?></td>
            <td><?php echo $v['name'];?></td>
            <td><?php echo $v['sex'];?></td>
            <td><?php echo $v['age'];?></td>
            <td><?php 
                switch($v['sex']){
                    case 1: echo '男'; break;
                    case 2: echo '女'; break;
                    default: echo '未知';
                }
            ?></td>
            <td><?php echo $v['age'];?></td>
            <td>
                <a href="student_add.php?id=<?php echo $v['id']; ?>">修改</a><!-- 在student_list.php页面点修改会跳到student_add.php页面,浏览器输入框中会带有id=1 -->
                <!-- 点击修改后,会跳转到添加学生页面修改信息,所以添加学生页面要用$id = $_GET['id'];接收这里传过去的信息 -->
                <a href="student_del.php?id=<?php echo $v['id']; ?>" onclick="return confirm('确定要删除吗?');">删除</a>
            </td>
        </tr>

        <?php
            }
        ?>

       </table>
    </body>
</html>

\color{rgba(254, 67, 101, .8)}{db.php}



<?php
    //自定义的数据库操作函数库
    $link = @mysqli_connect('localhost', 'root', 'root', '180301') or die(mysqli_connect_error());
    mysqli_set_charset($link, 'utf8') or die(mysqli_error($link));

    function execute($sql){
        global $link;
        $result = mysqli_query($link, $sql) or die(mysqli_error($link));
        if($result){
            return mysqli_affected_rows($link);//返回受影响的行数,返回值为0 或者大于0 的数,大于0可以当 真 来用
        }else{
            return false;
        }
        mysqli_close($link);
    }

    //查询多行数据
    function get_all($sql){
        global $link;
        $result = mysqli_query($link, $sql) or die(mysqli_error($link));
        $list = mysqli_fetch_all($result, MYSQLI_ASSOC);
        //mysqli_fetch_all获取所有关联数据,查询多行数据的函数
        //MYSQLI_ASSOC 获取关联下标
        //MYSQLI_both  两种下标都有
        //MYSQLI_NUM   获取数字下标

        mysqli_free_result($result);//释放资源  从结果集中取得行,然后释放结果内存
        return $list;
    }

    //查询一行数据
    function get_row($sql){
        global $link;
        $result = mysqli_query($link, $sql) or die(mysqli_error($link));
        $list = mysqli_fetch_assoc($result);
        //mysqli_fetch_assoc获取一行关联数据,查询一行数据的函数
        //只获取一行数据,就不需要用 MYSQLI_ASSOC 了,这样取出的结果不再是二维数组,而是一维数组

        mysqli_free_result($result);//释放资源  从结果集中取得行,然后释放结果内存
        return $list;
    }


    //查询一个数据
    function get_one($sql){
        global $link;
        $result = mysqli_query($link, $sql) or die(mysqli_error($link));
        $list = mysqli_fetch_row($result);
        mysqli_free_result($result);//释放资源  从结果集中取得行,然后释放结果内存
        return $list[0]; //因为只查一个数据,所以,用mysqli_fetch_row,获取数字下标
        //然后在这里直接拿这个下标,就可以得到数据了
        //因为这个数组就只有一个数据,所以下标就是0,
        //如果用 mysqli_fetch_assoc的话,拿到的数据是关联下标
        //这样如果查询的结果变更了,就全部涉及到这个关联下标的地方都要换,所以就不方便
        //这样用数字下标就无论查什么,下标都是0
    }

?>

\color{rgba(254, 67, 101, .8)}{student\_del.php}

<?php
    require_once('db.php');
    $id = $_GET['id'];
    $sql = "delete from student where id = $id";
    $ret = execute($sql);
    if($ret){
        die("<script>alert('操作成功'); location.href='student_list.php';</script>");//操作成功就跳转到student_list.php
    }else{
        die("<script>alert('操作失败'); location.href='student_list.php';</script>");
    }
?>

相关文章

网友评论

      本文标题:PHP -- 数据库10 -- 学生管理小案例

      本文链接:https://www.haomeiwen.com/subject/rvpwectx.html