【365bet亚洲真人】PHP完成类似题库抽题效果

PHP完毕类似题库抽题效果

大家好,作者顾某人又回到了,如今学了一点PHP,然后就想写个大约小例子试试,于是就写了三个好像于从题库抽题的事物,大概就是先输入须要抽题的数据,然后从数据库中任意抽取题目。
愿意各位大佬轻喷。
即使作者以往有诸如此类八个题库:
365bet亚洲真人 1
嗬?为何要用英文?,因为自身,,没解决编码难点。
继而自身来拓展抽题:
365bet亚洲真人 2
365bet亚洲真人 3
诸如此类就肆意抽出了三道难点。


未来的话说自家的思绪,希望各位大佬不吝赐教。
率先要兑现那一个功用,首先自家急需三个页面,三个是用户输入页面input.html,2个是后台处理页面select.php,还有一个是漏洞百出警告页面error.html(假若用户输入为空,或然输入的抽题数量超越了题库的数码那么就报错),然后是数据库,数据库分为两列,一列是question,用来存放标题,另一列是id,用于标识question

下一场对用户的输入举办判断:
365bet亚洲真人 4


input.html页面:

<html>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <form action="select.php" method="get">
        请输入要随机生成的题数:<input type="text" name="input" />
        <input type="submit" name="Submit" value="提交" />
    </form>
</html>

error.html页面:

<html>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <p>您的输入有误,请重新输入!</p>
</html>

select.php页面:

<?php
    header("Content-type:text/html;charset=utf8");
    $connect=new mysqli('localhost','wy','000000','test');
    if(!$connect){
        die("数据库连接失败!");
    }                           //连接数据库
    $sql="select id from test";
    $result=$connect->query($sql);
    $array=array();
    $i=0;
    while($row=$result->fetch_row()){
        foreach($row as $val){
            $array[$i]=$val; 
            $i ++;
        }
    }                          //将题目id存放进一个数组array
    $input=$_GET['input'];    //接受用户的输入
    if(empty($input) || $input>count($array)){  //判断用户的输入是否为空或输入大于题库数量
        header("Location:error.html");    //输入有误重定向到错误提示页面
    }else{
        shuffle($array);    //将存放题目id的数组进行随机排序
        $k=0;               //用于取出rand数组中question时的id
        for($j=0;$j<$input;$j++){
            $rand=array_slice($array,0,$input);     //从数组的第一个数开始,取出用户输入数量个id存放进一个数组
            $sql2="select * from test where id='{$rand[$k]}'";  //查找rand数组中每一个id对应的question
            $result2=$connect->query($sql2);    //存放mysql语句返回的结果集
            while($row2=$result2->fetch_assoc()){
                echo $row2['question'];     //返回question对应的内容
                echo '<br />';
            }
            $k++;
        }
        $result2->free();   //释放内存
    }
    $result->free();        //释放内存
    $connect->close();      //关闭连接
?>

诸君大佬,如若你们不介意的话,作者只想要一点流量(私家博客)。

2)、生成核心

能够清楚为题库

1、设置mysql的root密码

tcexams须求mysql的root密码不可以为空,所以先安装mysql的root密码。

mysqladmin -u root password "newpassword";

”newpassword” 是您指定的mysql的root密码

1.关于为何不行使贰个问卷的试题是单身存储的案由?

伍,运营有关服务

#设置mysql服务
chkconfig mysqld on
service mysqld start

#设置apache服务
chkconfig httpd on
service httpd start

#设置memcached服务
chkconfig memcached on
service memcached start

一,设置邮件验证

亟需修改shared/config/tce_email_config.php

  #管理员的邮件地址
  $emailcfg['AdminEmail'] = '[email protected]';

  #smtp服务器
  $emailcfg['Host'] = 'smtp.163.com';

  #smtp服务端口
  $emailcfg['Port'] = 25; (端口默认是25)

  #邮箱的用户名
  $emailcfg['Username'] = '[email protected]';

  #邮箱的密码
  $emailcfg['Password'] = '123456';

  #是否开启高度模式
  $emailcfg['SMTPDebug'] = false;

2.既然独立修改如此费力,为何不选拔具有的问卷的考题独立存放在?
(1)倘诺有为数不少问卷引用了一部分均等的标题,会促成大批量冗余。而且只要从任何试卷已部分题材中导入难点,一样会很麻烦。
(2)没有艺术落到实处关系修改,很难改变1个地点,完结三个试卷的改变。

1、修改selinux配置文件

vim /etc/selinux/config
#修改SELINUX=enforcing
SELINUX=disabled

保存退出

肆,修改网站的log

暗中认同的图标文件放在./images目录下,文件名为logo_tcexam_118x25.png
图像的轻重为118*25,格式为png

3.填空题
填空题若是是,依照值取范围来得分好在说,本质上得以视作选用题。统计分的时候用Java代码完成得分逻辑即可。

2、设置相关目录的属主和权限

find . -exec chown -R apache:apache {} \;
find . -type f -exec chmod 544 {} \;
find cache/ -type f -exec chmod 644 {} \;
find cache/backup -type f -exec chmod 644 {} \;
find cache/lang -type f -exec chmod 544 {} \;
find admin/log/ -type f -exec chmod 644 {} \;
find public/log/ -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

陆,tcexam配置文件表明

自然,那是自家日前的想法,采纳了试卷对于试题是豪门引用的,作者去落实了,有坑。

肆,修改网站的log

默许的图标文件放在./images目录下,文件名为logo_tcexam_118x25.png
图像的轻重为118*25,格式为png

2、安装lamp

yum install -y  gd curl ImageMagick   texlive  zbar mysql-server php httpd php-mysql libdbi-dbd-mysql php-gd php-curl memcached

考题类型的难处是层级结构,层级结构接纳的是充实一个pid字段来代表,父子关系
接下来增加多个varchar类型的path方便查询,path会记录从顶层节点,到该节点的门路。
在询问直接子节点是用where pid = xxx即可

2)、系统管理配置文件

这有些配置文件存放位置为 ./admin/config目录下

文件名 说明
tce_auth.php 管理模块的访问级别配置
tce_config.php 管理面板通用配置

3、修改导出PDF设置并安装粤语字体

系统默许的安装导出的PDF文件内容为乱码,因而要求修改shared/config/tce_pdf.php
先上网下载Drod Sans Fallback-PHP字体文件
把压缩包的多少个公文droidsansfallback.php、droidsansfallback.z以及droidsansfallback.ctg.z
解压到fonts目录下

#修改PDF的主标题
define ('PDF_HEADER_TITLE', "主标题");

#修改PDF的副标题(可以设置三个副标题)
define ('PDF_HEADER_STRING', "副标题1\n副标题2\n副标题3");

#设置PDF的log,默认的图标文件放置在images目录下
define ('PDF_HEADER_LOGO', 'logo.png');

#设置默认字体
define ('PDF_FONT_NAME_MAIN', 'stsongstdlight');

define ('PDF_FONT_NAME_DATA', 'stsongstdlight');

5.新增问卷
新建一份问卷,须要填写基本音讯、新建试题、为课题增添选项、新增结果标签。
还在新建试题的时候,由于需要实时呈现已经添加的课题,与试题的选项。
要呈现已经添加的事物有二种方法
(1)将曾经增加的课题、选项存储在前者的报表里面什么的,然后在保留问卷的时候,再先存储问卷,取得问卷id,然后将试题,取得试题id,然后将试题与问卷关联,然后再存选项,然后再填写选项的问卷id和课题id。
(2)初叶新建问卷的时候就,保存多少个问卷的笔录到数据库,然后新建难点的时候,已经有问卷id了,然后直接存试题,取得试题id然后,添加问卷-试题关联,然后已经拉长的试题就可以经过查表显示出来了,选项同理。
而是如此有五个弱点,假若用户点进来,就甩掉编辑,你要么建立了1个问卷的记录,不过裁撤按钮是不可以发送壹个音讯去删除数据库的笔录的,即便可以,用户也只怕去点右上角的×从而退出。
(3)选用分页
把二个很大的新建问卷页面拆分成若干页面。第多个页面,只有问卷的骨干消息,当用户挑选保存了才会新建一条问卷记录并跳转到下三个页面。
那样对于问卷,确实有三个封存并跻身下一步才会真正暴发2个问卷记录,用户体验会好过多。

3)、公共区域布局文件
文件名 说明
tce_auth.php 公共模块的访问级别配置
tce_config.php 公共区域驱通用配置

四、关闭主机的selinux 并清空iptabels

我的leader给了我2点原因

2、安装lamp

yum install -y  gd curl ImageMagick   texlive  zbar mysql-server php httpd php-mysql libdbi-dbd-mysql php-gd php-curl memcached
2)、导入初叶数据
mysql -uroot -p tcexam < mysql_db_structure.sql
mysql -uroot -p tcexam < db_data.sql

独立实施每一条语句并回车,按提醒输入密码

7.修改履历表
以此模块紧如果对此每一个改动(增、删、改)都举行记录。
本身的想法是,
(1)根据用户的经验进行记录
比如用户创设1个问卷,在内部有开创了一道题,并且创办了五个挑选。
此地有着都会记录。
然则删除二个问卷,即便还要也删除了难题记录和抉择,可是只会记录删除了问卷
从3个问卷导入若干题材,也只会记录导入题
(2)全数的改动都以存放在在varchar里面的。不过在拼接那个动作的时候假设一向将一切讲话拼接,会很麻烦。所以本人动用的章程是分别问卷、试题、选项一个级别,给多少个接口,填入不一致的参数,来分歧操作人,操作方式(新增、编辑、删除)。
而且额外提供二个向来书写整个讲话的接口,以便于事后伸张记录一些卓殊操效能。
比如调整三个问卷中的五个课题的各种那些动作。

六、安全方面的装置

听从合法的文档,安装到位后需要开展以下操作,来增强程序的安全性。

七、tcexam配置

还要分数与选用是逐一对应的,而就终于同一道题,相同的选项,在差其余问卷中,分数也说不定不一致,提供这么灵活性是有必不可少的。

一,设置邮件验证

亟需修改shared/config/tce_email_config.php

  #管理员的邮件地址
  $emailcfg['AdminEmail'] = 'lzl001@163.com';

  #smtp服务器
  $emailcfg['Host'] = 'smtp.163.com';

  #smtp服务端口
  $emailcfg['Port'] = 25; (端口默认是25)

  #邮箱的用户名
  $emailcfg['Username'] = 'lzl001@163.com';

  #邮箱的密码
  $emailcfg['Password'] = '123456';

  #是否开启高度模式
  $emailcfg['SMTPDebug'] = false;

一,修改selinux配置文件

vim /etc/selinux/config
#修改SELINUX=enforcing
SELINUX=disabled

封存退出

如果选取由试题完全控制,那么一旦三个题,标题一样,选项不均等,就要算作三个题,若是将挑选再加上问卷的区分,能够提供更大的灵活性。

2)、导入早先数据
mysql -uroot -p tcexam < mysql_db_structure.sql
mysql -uroot -p tcexam < db_data.sql

单独实施每一条语句并回车,按提醒输入密码

1)、tcexam紧要的布局文件全部放置在./shared/config目录下,以tce_ 开头, .php 结尾
文件名 说明
tce_cas.php CAS认证中心配置
tce_config 系统通用设置
tce_db_config.php 数据库配置
tce_email_config.php 电子邮件配置
tce_general_constants.php 系统通用常量配置
tce_latex.php LaTeX公式配置
tce_ldap.php LDAP 配置
tce_mime.php MIME 文件扩展名关联
tce_paths.php 配置系统内的文件及文件夹
tce_pdf.php PDF文件导出设置
tce_radius.php RADIUS 配置
tce_user_registration.php 用户注册配置

波及到的关键难点
1.是因为问卷相当于是引用试题库的考题,若是中间一个问卷修改了如故去除了某些试题影响其余问卷怎么处理?
(1)由于问卷是引用的考题,所以从问卷中删除试题,只是删除关联表中的记录,试题自己并不会被物理删除。当然由于选项是独立问卷+试题独立存储的,应该删去。
(2)关于修改的处理。给出二种接口
壹,关联修改。修改以往,全体引用了这么些难题的地点都会被联合修改。
二,独自修改。修改之后一定于是新建了多少个课题,并且原本的选项也会复制,并且关系到新建的试题上。

发表评论

电子邮件地址不会被公开。 必填项已用*标注