php mysql 在线考试系统

 更新时间:2016年11月25日 15:52  点击:1727

一款简单的php教程 mysql教程考试系统,实例方法是判断题目数组是否为空,为空则从题库中随机取出12道题 id

 

<?php
include './inc/header.php';
if($_session['arr'] == ''){                #判断题目数组是否为空,为空则从题库中随机取出12道题 id
        $sql = 'select * from an';
        $select = $db->select($sql);
        for($i=0;$i<count($select);$i++){
                $aid .= $select[$i]['id'].',';
        }
        $arr = explode(',',substr($aid,0,strlen($aid)-1));
        shuffle($arr);
        $_session['arr'] = array_slice($arr,0,12);
}
$array = $_session['arr'];
if($_server['request_method'] == "post"){
        if($_session['arr1'] == ""){                #arr1存的是已答题的id       
                $ary = $array;
                array_shift($ary);                                #每答完一道题后,删除数组第一位
                $_session['arr1'] = $ary;
        }else{
                $ary = $_session['arr1'];
                array_shift($ary);
                $_session['arr1'] = $ary;
        }
        $id = $_post['id'];
        $answer = $_post['answer'];
        $sqq = 'select * from an where id='.$id.' and answer="'.$answer.'"';
        $qus = mysql_query($sqq);
        $rows = @mysql_num_rows($qus);
        if($rows){
                $_session['right'] .= $id.',';                #将答对题id存到session['right']
                $rightarr = explode(',',substr($_session['right'],0,strlen($_session['right'])-1));                #判断对题数
                if(count($rightarr) < 10){                        #如果小于10则继续答下一题
                        $sql2 = 'select * from an where id='.$ary[0];
                        $sel = $db->select($sql2);
                }elseif(count($rightarr) == 10){                #如果等于10则跳出此次问答
                        $time = time();
                        $_session['jiang'] = md5($time);
                        #echo '<script>location.href="right.php?uid='.$time.'";</script>';
                        $success = array('second'=>'3','url'=>'right.php?uid='.$time,'title'=>'答对十题','right'=>'恭喜你,你已连续答对十道题,将跳转到兑奖页面。');
                        $smarty->assign('msg',$success);
                        $smarty->display('success.html');
                        exit();
                }
        }else{
                $_session['error'] .= $id.',';                #将答错题id存到session['error']
                $errorarr = explode(',',substr($_session['error'],0,strlen($_session['error'])-1));  #判断错题数
                if(count($errorarr) < 2){                       
                        $sql2 = 'select * from an where id='.$ary[0];
                        $sel = $db->select($sql2);
                }elseif(count($errorarr) == 2){                #如果答错两题,则重新计数
                        unset($_session['right']);
                        unset($_session['error']);
                        unset($_session['arr1']);
                        unset($_session['arr']);
                        unset($_session['num']);
                        session_destroy();
                        #echo '<script>location.href="index.php";</script>';
                        $success = array('second'=>'3','url'=>'index.php','title'=>'答错两题','error'=>'对不起,你已连续答错两题,将重新计算');
                        $smarty->assign('msg',$success);
                        $smarty->display('success.html');
                        exit();
                }
        }
        echo 'right:'.$_session['right'].'<br        />';
        echo 'error:'.$_session['error'].'<br        />';
}else{
        $sqll = 'select * from an where id='.$array[0];
        $sel = $db->select($sqll);
}
if(isset($_session['num'])){                        #目前答第几题
        $num = $_session['num'] + 1;
        $_session['num'] = $num;
        #echo $_session['num'].'<br        />';
        #echo $num;
}else{
        $num = 1;
        $_session['num'] = $num;
}
$smarty->assign('num',$num);
$smarty->assign('ob',$sel);
$smarty->display('index.html');

方法很简单PHP字符串int是很容易,只要在变量前面加个(int)就成了,转换成字符也一样的哦。

$str = "10";  
$num = (int)$str;

//
 $str = "10";
 $num = (int)$str;
 if ($str === 10) echo "string";
 if ($num === 10) echo "integer";
 
 /*
 结果为
 integer
 */
 
 echo gettype($str); //string
 echo gettype($num); //integer
 

//session.inc.php教程文件:定义session的文件存储,session解决方案,就是要提供在php脚本中定义全局变量的方法,使得这个全局变量在同一个session中对于所有的php脚本都有效。上面我们提到了,session不是一个简单的时间概念,一个session中还包括了特定的用户和服务器。因此更详细地讲,在一个session定义的全局变量的作用范围,是指这个session所对应的用户所访问的所有php。   例如a用户通过session定义了一个全局变量$user=“wind”中,而b用户通过session定义的全局变量$user=“jane”。那么在a用户所访问的php脚本中,$user的值就是wind。php如何创建session
  开始介绍如何创建 session。非常简单,真的。   启动 session 会话,并创建一个 $admin 变量:   // 启动 session   session_start();   // 声明一个名为 admin 的变量,并赋空值。   $_session["admin"] = null;   ?>   如果你使用了 seesion,或者该 php 文件要调用 session 变量,那么就必须在调用 session 之前启动它,使用 session_start() 函数。其它都不需要你设置了,php 自动完成 session 文件的创建。   执行完这个程序后,我们可以到系统临时文件夹找到这个 session 文件,一般文件名形如:sess_4c83638b3b0dbf65583181c2f89168ec,后面是 32 位编码后的随机字符串。用编辑器打开它,看一下它的内容:   admin|n;

<?php


//定义一个超全局数组

$_session = array();

//定义文件句柄

$fp = null;


//用户自定义的开启session函数

function session_file_start() {

 

//1. 首先判断浏览器有没有发送cookie值

if (isset($_cookie['fileid'])) {

 

//2. 接收cookie值

$filename = $_cookie['fileid'];


//3. 打开文件,用于读写

if (file_exists($filename)) {

$globals['fp'] = fopen($filename, 'r+');

} else {

$globals['fp'] = fopen($filename, 'w+');

}


} else {

 

//2. 设置一个文件,并把该文件名放到cookie中

$filename = date('ymdhis');

setcookie('fileid', $filename, time()+60*60*24);


//3. 打开文件,用于读写

$globals['fp'] = fopen($filename, 'w+');


} //end of if-else


//4. 把文件中的数据存储到超全局数组$_session中

while (!feof($globals['fp'])) {

//读取文件中的一行

$buffer = fgets($globals['fp']);

//处理所读取的这一行

$tmparr = explode('=', trim($buffer, 'rn'));


//添加到session数组中

if (count($tmparr) == 2) {

$globals['_session'][$tmparr[0]] = $tmparr[1];

}

} //end of while


} //end of session_file_start()


//注册会话变量的函数

function session_file_register($key, $val) {

 

//设定session变量

$globals['_session'][$key] = $val;


//把该变量放到文件中

fseek($globals['fp'], 0, seek_end);

fwrite($globals['fp'], "$key=$valrn");


} //end of session_file_register()


//结束会话变量

function session_file_destroy() {

 

//1. 关闭文件指针

fclose($globals['fp']);

$fp = null;


//2. 设置session数组为空

$globals['_session'] = array();


} //end of session_file_destroy()

//测试代码文件:1.php
<?php

//确定编码格式

header('content-type: text/html; charset=utf-8');


include("session-file.php");


//测试函数:

//开启会话

session_file_start();


//注册会话变量

$key = 'username';

$val = 'lsl';

session_file_register($key, $val);


session_file_register('username', 'lisa');


//打印session数组

echo $_session['username'];

 


?>

<a href="2.php">下一页</a>


//测试文件:2.php
<?php

//确定编码格式

header('content-type: text/html; charset=utf-8');


include("session-file.php");


//测试函数:

//开启会话

session_file_start();


echo $_session['username'];


?>

分页的就是根据符合条件的总记录除上每页显示的记录就等页数,原理相当简单了公式为 $total = ceil($toalRecord / $perpageNum);

function outpege($ps教程,$page)
{
// $ps 累计信息数 $page 当前page数 $max 列表的最大数 $min 列表的最小值
$max      = ($page >= 5)? $page+5:10;
if($max > $ps)$max =$ps;
$min      =($page-5);
if($min<1) $min =1;
if($page>1)$pagelist = "<a href="?page=1">首页</a>";
for($i=$min;$i<=$max;$i++){
  $pagelist.= ($i!=$page)? "<a href="?page={$i}">{$i}</a>":"<a href="#">{$page}</a>";
}
$pagelist.= ($page>=$ps)?'':"<a href="?page={$ps}">尾页</a>";
return $pagelist;
}

分页代码二

// 分页, {总记录数,每页显示数,当前页,最多显示多少页,分页url}

function page($toalrecord, $perpagenum, $curpage, $url) {
        $total = ceil($toalrecord / $perpagenum);
        $pagearr = array_slice(range(1, $total), max(0, $curpage - ~~($perpagenum / 2)), $perpagenum);
        if($pagearr[0] != 1) {
                array_unshift($pagearr, sprintf("<a href='{$url}%s'><<</a>", $pagearr[0] - 1));
        }
        if($pagearr[count($pagearr)-1] != $total) {
                array_push($pagearr, sprintf("<a href='{$url}%s'>>></a>", $pagearr[count($pagearr)-1] + 1));
        }
        foreach ( $pagearr as $i => &$v ) {
                $v = is_numeric($v) ? "<a href='{$url}{$v}'>{$v}</a>" : $v;
        }
        return "<a href='{$url}'>首页</a>" . implode('', $pagearr) . "<a href='{$url}" . $total . "'>尾页</a>";
}

调用

page(99/*总记录*/, 9/*每页显示数*/, page/*当前页,从1开始*/, 'http://www.111cn.net/?page='/*url前缀*/);

关于文件上传我们讲了很多,这只是一款最基本的简单的文件上传功能,同时本教程也介绍了关于上传的原理以及各种函数的使用与file的参数说明,以及php.ihi设置上传文件大小配置等。

1  如果实现小文件的上传(2mb)一下是不需要对php教程.ini 中的配置进行修改的,如果要是大文件的上传就必须进行配置的修改

2 修改php.ini 中的内容有:

       post_max_size 指php通过表单post所能接收的最大值

       upload_max_filesize 指允许上传文件的最大值 

3 上传表单的设置

       <form  method=”post”  action=””  enctype=”multipart/form-data”>

          <input  name=”upfile”  type=”file”>

          <input  type=”hidden”  name=”max_file_size”  value=”1024000”>

       </form>

      解释: 1首先上传时entype属性必须设为multipart/form-data

             2 表单中最好加上 hidden隐藏域 name值为max_file_size  ,该隐藏域的作用不是真正去限制上传文件大小的,而是为了避免用户误传大文件而陷入无尽的等待中。 真正限制大小的还是刚才php.ini 中的两个修改项。

4 预定义变量$_files

         首先他是一个二维的数组,

          $_files[‘upfile’][‘name’]  上传文件的文件名

          $_files[‘upfile’][‘size’]   上传文件的大小

          $_files[‘upfile’][‘tmp_name’]  文件上传时,文件首先被保存为临时文件,改文件是临时文件名

          $_files[‘upfile’][‘type’]   上传文件的类型

          $_files[‘upfile’][‘error’]   错误代码

 

注意 $_files[‘upfile’][‘name’]  这里的upfile 是与表单<input  name=”upfile”  type=”file”> 的name对应,千万别错


5 具体实现 

 

  <?

     $filename=$_files['upfile']['name'];

        $tmp=$_files['upfile']['tmp_name'];

        $error=$_files['upfile']['error'];

        $path="./images/";

        if($error==0){

            if(is_uploaded_file($tmp)){

                  if(move_uploaded_file($tmp,$path.$filename)){

                          echo "上传成功!";

 

                     }else{

                          echo "<script> alert('文件不合法');history.go(-1);</script>";

 

                     }

 


               }else{

                  echo "<script> alert('非法操作!');history.go(-1);</script>";

 

               }


        }else{

 

               echo"<script> alert('上传错误,错误类型:".$error."');history.go(-1);</script>";

 

        }

 

?>

 

 

[!--infotagslink--]

相关文章

  • MySQL性能监控软件Nagios的安装及配置教程

    这篇文章主要介绍了MySQL性能监控软件Nagios的安装及配置教程,这里以CentOS操作系统为环境进行演示,需要的朋友可以参考下...2015-12-14
  • 源码分析系列之json_encode()如何转化一个对象

    这篇文章主要介绍了源码分析系列之json_encode()如何转化一个对象,对json_encode()感兴趣的同学,可以参考下...2021-04-22
  • 详解Mysql中的JSON系列操作函数

    新版 Mysql 中加入了对 JSON Document 的支持,可以创建 JSON 类型的字段,并有一套函数支持对JSON的查询、修改等操作,下面就实际体验一下...2016-08-23
  • php中去除文字内容中所有html代码

    PHP去除html、css样式、js格式的方法很多,但发现,它们基本都有一个弊端:空格往往清除不了 经过不断的研究,最终找到了一个理想的去除html包括空格css样式、js 的PHP函数。...2013-08-02
  • 深入研究mysql中的varchar和limit(容易被忽略的知识)

    为什么标题要起这个名字呢?commen sence指的是那些大家都应该知道的事情,但往往大家又会会略这些东西,或者对这些东西一知半解,今天我总结下自己在mysql中遇到的一些commen sense类型的问题。 ...2015-03-15
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • index.php怎么打开?如何打开index.php?

    index.php怎么打开?初学者可能不知道如何打开index.php,不会的同学可以参考一下本篇教程 打开编辑:右键->打开方式->经文本方式打开打开运行:首先你要有个支持运行PH...2017-07-06
  • python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
  • mysql的3种分表方案

    一、先说一下为什么要分表:当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。根据个人经验,mysql执行一个sql的过程如下:1...2014-05-31
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • Centos5.5中安装Mysql5.5过程分享

    这几天在centos下装mysql,这里记录一下安装的过程,方便以后查阅Mysql5.5.37安装需要cmake,5.6版本开始都需要cmake来编译,5.5以后的版本应该也要装这个。安装cmake复制代码 代码如下: [root@local ~]# wget http://www.cm...2015-03-15
  • BootStrap栅格系统、表单样式与按钮样式源码解析

    这篇文章主要为大家详细解析了BootStrap栅格系统、表单样式与按钮样式源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-23
  • 用VirtualBox构建MySQL测试环境

    宿主机使用网线的时候,客户机在Bridged Adapter模式下,使用Atheros AR8131 PCI-E Gigabit Ethernet Controller上网没问题。 宿主机使用无线的时候,客户机在Bridged Adapter模式下,使用可选项里唯一一个WIFI选项,Microsoft Virtual Wifi Miniport Adapter也无法上网,故弃之。...2013-09-19
  • PHP中func_get_args(),func_get_arg(),func_num_args()的区别

    复制代码 代码如下:<?php function jb51(){ print_r(func_get_args()); echo "<br>"; echo func_get_arg(1); echo "<br>"; echo func_num_args(); } jb51("www","j...2013-10-04
  • node.js如何操作MySQL数据库

    这篇文章主要介绍了node.js如何操作MySQL数据库,帮助大家更好的进行web开发,感兴趣的朋友可以了解下...2020-10-29
  • 忘记MYSQL密码的6种常用解决方法总结

    首先要声明一点,大部分情况下,修改MySQL密码是需要有mysql里的root权限的...2013-09-11
  • MySQL数据库备份还原方法

    MySQL命令行导出数据库: 1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录 如我输入的命令行:cd C:/Program Files/MySQL/MySQL Server 4.1/bin (或者直接将windows的环境变量path中添加该目录) ...2013-09-26
  • PHP编程 SSO详细介绍及简单实例

    这篇文章主要介绍了PHP编程 SSO详细介绍及简单实例的相关资料,这里介绍了三种模式跨子域单点登陆、完全跨单点域登陆、站群共享身份认证,需要的朋友可以参考下...2017-01-25
  • 详解为什么现代系统需要一个新的编程模型

    如今高要求的分布式系统的建造者遇到了不能完全由传统的面向对象编程(OOP)模型解决的挑战,但这可以从Actor模型中获益。...2021-05-20
  • Mysql命令大全(详细篇)

    一、连接Mysql格式: mysql -h主机地址 -u用户名 -p用户密码1、连接到本机上的MYSQL。首先打开DOS窗口,然后进入目录mysql/bin,再键入命令mysql -u root -p,回车后提示你输密码.注意用户名前可以有空格也可以没有空格,但是密...2015-11-08