php项目学习

github上研究生信息管理系统,重点学习该项目与数据库的交互


首先看该项目数据库结构,共7个表
这里写图片描述这里写图片描述这里写图片描述
这里写图片描述

这里写图片描述
这里写图片描述


  • login.php
    点击登陆之后,首先从表单获取账号和密码,查询成功时为即账号密码正确。接着检查该学生的gm_active,查看是否审核通过,通过后修改数据库中该账号的登陆时间和登陆ip。接着判断该登陆用户的权限,如果为学生账号时进入student_s.php。
if ($_GET['action'] == login) {
    include ROOT_PATH . 'includes/register.func.php';
    if ($_system['needcode'] == 1) {
        _check_code($_SESSION['code'], $_POST['code']);
    }
    $clean = array();
    $clean['num'] = _check_username($_POST['num']);
    $clean['password'] = _check_password($_POST['password']);
    if ($rows = _fetch_array("SELECT gm_num,gm_username,gm_active,gm_level FROM gm_user 
            WHERE gm_num='{$clean['num']}' AND gm_password='{$clean['password']}' LIMIT 1")
    ) {
        if ($rows['gm_active'] == 0) {
            _alert_back('您的资料正在被审核,请耐心等待!');
        } else {
            _query("UPDATE gm_user SET
                                         gm_last_time=NOW(),
                                         gm_last_ip='{$_SERVER["REMOTE_ADDR"]}' 
                                     WHERE
                                         gm_num='{$rows['gm_num']}'");
            //设置session
            $_SESSION['num'] = $clean['num'];
            $_SESSION['username'] = $rows['gm_username'];
            $_SESSION['level'] = $rows['gm_level'];
            //判断权限分配页面
            if ($_SESSION['level'] == 1) {
                _location(null, 'student_s.php');
            } else if ($_SESSION['level'] == 2 or $_SESSION['level'] == 3) {
                _location(null, 'admin.php');
            } else {
                _alert_back('非法操作!');
            }

        }
    } else {
        _alert_back('用户名或密码错误,忘记密码可请管理员重置');
    }
}
  • register.php

注册页面,

if($_GET['action']==register){
    include ROOT_PATH.'includes/register.func.php';
    if($_system['needcode']==1){
        _check_code($_SESSION['code'], $_POST['code']);
    }
    $clean=array();
    $clean['username']=_check_username($_POST['username']);
    $clean['num']=_check_num($_POST['num']);
    $clean['sex']=_check_sex($_POST['sex']);
    _checkdate($_POST['birth_m'], $_POST['birth_d'], $_POST['birth_y']);
    _checkdate($_POST['start_time_m'], $_POST['start_time_d'], $_POST['start_time_y']);
    $clean['birth']=$_POST['birth_y'].'-'.$_POST['birth_m'].'-'.$_POST['birth_d'];
    $clean['start_time']=$_POST['start_time_y'].'-'.$_POST['start_time_m'].'-'.$_POST['start_time_d'];
    $clean['gm_grade']=_time_to_grade($_POST['start_time_y'],$_POST['start_time_m']);
    $clean['contact']=_check_contact($_POST['contact']);
    $clean['address']=_check_address_ex($_POST['address']);
    $clean['subject']=_check_subject($_POST['subject']);
    $clean['type']=_check_type($_POST['type']);   
    $clean['photoname']=_check_photo();
    //判断是否已经注册
    _is_repeat("SELECT gm_num FROM gm_user WHERE gm_num = '{$clean['num']}'",'该学号已经被注册!如有问题请咨询管理员!');
    $newpassword=_check_password($_system['initial_password']);
    if(_query("INSERT INTO gm_user(
                                    gm_username,
                                    gm_num,
                                    gm_password,
                                    gm_reg_time,
                                    gm_last_time,
                                    gm_last_ip) 
                                VALUES(
                                    '{$clean['username']}',
                                    '{$clean['num']}',
                                    '$newpassword',
                                    NOW(),
                                    NOW(),
                                    '{$_SERVER["REMOTE_ADDR"]}')")
    and _query("INSERT INTO gm_stuinfo(
                                    gm_username,
                                    gm_num,
                                    gm_sex,
                                    gm_birth,
                                    gm_start_time,
                                    gm_grade,
                                    gm_contact,
                                    gm_address,
                                    gm_subject,
                                    gm_type,
                                    gm_photoname) 
                                VALUES(
                                    '{$clean['username']}',
                                    '{$clean['num']}',
                                    '{$clean['sex']}',
                                    '{$clean['birth']}',
                                    '{$clean['start_time']}',
                                    '{$clean['gm_grade']}',
                                    '{$clean['contact']}',
                                    '{$clean['address']}',
                                    '{$clean['subject']}',
                                    '{$clean['type']}',
                                    '{$clean['photoname']}')")){
        _location('你的信息已经提交,请耐心等待审核!', 'login.php');
    }else{
        _alert_back('注册失败!有问题请咨询管理员!');
    }
}
  • student_s.php

通过时间降序查询公告和留言的12条数据。

<?php
/**
*2012-8-22  |  By:NaV!
*/
//防止恶意调用
define('IN_GM',true);
//定义个常量,用来指定本页的内容
define('SCRIPT','student_s');
//引入公共文件
require dirname(__FILE__).'/includes/common.inc.php';
//判断登录状态和权限
_login_state(1);
$notice_res=_query("SELECT * FROM gm_notice ORDER BY gm_time DESC LIMIT 12");
$message_res=_query("SELECT * FROM gm_message ORDER BY gm_systime DESC LIMIT 12");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<link href="styles/student_s.css" rel="stylesheet" type="text/css" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<?php 
    require ROOT_PATH.'includes/title_student.inc.php';
?>
</head>

接着打开title_student.inc.php,为了防止页面被恶意调用,这块代码在底下。(不理解为什么可以做到防止恶意调用???)

假设有个人成功登陆,然后浏览器解析这个从服务端返回的页面,开始加载student_s.php,当加载到require 语句,进入title_student.inc.php判断是否被恶意调用。在这个过程中从开始加载student_s.php到加载require 语句,这中间改变IN_GM的值才会触发exit,实在感觉是多余。
问题解决,原来无法直接通过获取http报文来查看php的源代码,php脚本经过解释器解析之后才向客户端返回。。

title_student.inc.php

<?php
/**
*2012-8-22   By:NaV!
*/
//防止恶意调用
if(!defined('IN_GM')){
    exit('Access Defined!');
}
//防止非HTML页面调用
if(!defined('SCRIPT')){
    exit('SCRIPT Error!');
}
global $_system;
?>
  • admin.php

下来的几条查询,通过几个表得到数据

<?php
/**
*2012-7-30  |  By:NaV!
*/
//防止恶意调用
define('IN_GM',true);
//定义个常量,用来指定本页的内容
define('SCRIPT','admin');
//引入公共文件
require dirname(__FILE__).'/includes/common.inc.php';
//判断登录状态和权限
_login_state(2);
//得到审核未通过的学生
$active_num=_num_rows("SELECT gm_id FROM gm_stuinfo WHERE gm_active='0'");
//得到12小时内的消息
$message_num=_num_rows("SELECT gm_id FROM gm_message WHERE (NOW()-gm_systime)<12*3600");
$message_re_num=_num_rows("SELECT gm_id FROM gm_message WHERE gm_replytime is null");
$teacher_mat_num=_num_rows("SELECT gm_id FROM gm_stuinfo WHERE (gm_teacher is null OR gm_teacher='') AND gm_active='1' ");
$funds_num=_num_rows("SELECT gm_fid FROM gm_funds");
$user_num=_num_rows("SELECT gm_id FROM gm_user WHERE gm_active='1'");
$stu_num=_num_rows("SELECT gm_id FROM gm_stuinfo WHERE gm_active='1'");
$message_res=_query("SELECT * FROM gm_message ORDER BY gm_systime DESC LIMIT 8");
$teacher_num=_num_rows("SELECT gm_id FROM gm_teacher");
?>
  • stu_active.php
    首页的小模块共有9个现在看第一个
<?php
/**
*2012-7-31  |  By:NaV!
*/
//防止恶意调用
define('IN_GM',true);
//定义个常量,用来指定本页的内容
define('SCRIPT','stu_active');
//引入公共文件
require dirname(__FILE__).'/includes/common.inc.php';
//判断登录状态和权限
_login_state(2);
//判断是否有学生需要审核
if($num=_num_rows("SELECT gm_active FROM gm_stuinfo WHERE gm_active='0'")){
    //分页模块
    _page($num,$_system['stu_active_pagesize']);
    $res=_query("SELECT gm_active,gm_username,gm_num,gm_sex,gm_grade,gm_subject,gm_type FROM gm_stuinfo WHERE gm_active='0' ORDER BY gm_num LIMIT $pagenum,$pagesize");
}
//开始激活和删除处理
if(!empty($_GET['num']) and !empty($_GET['action'])){
    //判断传过来的学号是否真实存在
    if (_fetch_array("SELECT gm_active FROM gm_stuinfo WHERE gm_num='{$_GET['num']}' LIMIT 1")){
        //激活
        if($_GET['action']==pass){
        if(_query("UPDATE gm_stuinfo SET gm_active='1' WHERE gm_num='{$_GET['num']}'") and _query("UPDATE gm_user SET gm_active='1' WHERE gm_num='{$_GET['num']}'")){
            _location('审核成功!', 'stu_active.php');
        }else{
            _location('审核失败!', 'stu_active.php');
        }
        }
        //删除
        if($_GET['action']==del){
        if(_query("DELETE FROM gm_user WHERE gm_num='{$_GET['num']}'")){
            $r_s=_fetch_array("SELECT gm_photoname FROM gm_stuinfo WHERE gm_num='{$_GET['num']}' LIMIT 1");
            $photoname="photos".$r_s['gm_photoname'];
            chmod($photoname,0777);  
            unlink($photoname);    
            _query("DELETE FROM gm_stuinfo WHERE gm_num='{$_GET['num']}'");
            _location('删除成功!', 'stu_active.php');
        }else{
            _location('删除失败!', 'stu_active.php');
        }
        }
    }
    else{
        _alert_back('要操作的学号不存在!');
    }
}
?>

分页函数

/**
 * _page分页函数
 * @access public
 * @param int $num 总记录数
 * @param int $size 每页显示数
 */
function _page($num,$size){
    //$pagenum,$pagesize作为分页查询的真实参数
    //这里需要用全局变量$pagesize,所以不可以把参数命名为$pagesize
    global $page, $pageabsolute, $pagenum, $pagesize;
    //检测是否传入page,以及判断各种值得异常情况,异常则将分页设为1,否则将page转换成整数
    if(isset($_GET['page'])){
        $page = $_GET['page'];
        if(empty($page) or $page<0 or !is_numeric($page)){
            $page = 1;
        }else {
            $page = intval($page);
        }
    }else{
        $page = 1;
    }
    $pagesize =$size;
    //此句在本页多余,但在其他情况下可能有用
    if($num == 0){
        $pageabsolute=1;
    }else{
    $pageabsolute=ceil($num/$pagesize);
    }
    if($page>$pageabsolute){
        $page = $pageabsolute;
    }
    //此句要放在上面判断语句的下面
    $pagenum = ($page-1)*$pagesize;
}
/**
 * _paging分页选择函数
 * @access public
 * @param $type  1数字分页,2文本分页
 */
function _paging($type){
    global $pageabsolute,$page,$num;
    if($type==1){
        echo '<div id="page_num">';
        echo '<ul>';
            for($i=1;$i<=$pageabsolute;$i++)
                if($page==$i){
                    echo '<li><a href="'.SCRIPT.'.php?page='.$i.'" class="selected">'.$i.'</a></li>';
                }else{
                    echo '<li><a href="'.SCRIPT.'.php?page='.$i.'">'.$i.'</a></li>';
                }       
        echo '</ul>';
        echo '</div>';
    }elseif ($type==2){
        echo '<div id="page_text">';
        echo '<ul>';
            echo '<li>'.$page.'/'.$pageabsolute.' | </li>';
            echo '<li>共有<strong>'.$num.'</strong>条记录 | </li>';
            if($page==1){
                echo '<li>首页 | </li>';
                echo '<li>上一页 | </li>';
            }else{
                echo '<li><a href="'.SCRIPT.'.php">首页</a> | </li>';
                echo '<li><a href="'.SCRIPT.'.php?page='.($page-1).'">上一页</a> | </li>';
            }
            if($page==$pageabsolute){
                echo '<li>下一页 | </li>'; 
                echo '<li>尾页</li>';
            }else{
                echo '<li><a href="'.SCRIPT.'.php?page='.($page+1).'">下一页</a> | </li>';    
                echo '<li><a href="'.SCRIPT.'.php?page='.$pageabsolute.'">尾页</a></li>';
            }           
        echo '</ul>';
        echo '</div>';  
    }
}

php的变量作用域与c、java之类的不同(用起来很别扭,但是php的作用域个人感觉是要比java的要合理)。global原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值