ajax+php+xml 实现在线考试问答系统

 更新时间:2016年11月25日 16:55  点击:1837
这里是一款简单的考试问题系统哦,包括有ajax+php+xml实现的一款哦,下在我们先来看看test.html 文件吧。

<html>
<head>
<title>Ajax应用</title>
<script language="JavaScript" type="text/javascript" src="ajax.js"></script>
<style type="text/css">
<!--CSS样式表用于定义页面的显示外观,将内容和显示分离
#answershow{ border:#E2FAFA; color:#000099; font-size:12px;}
#main{visibility:hidden;}
#begin{
    visibility:visible;
 position:absolute;
 left:135px;
 top:103px;
 width:37px;
 height:16px;
 z-index:1;
}
-->
</style>
</head>
<body>
<div id="begin"><input type="button" id="startq" value="开始"></div>
<h1>简单测试系统</h1><p><b>问题:</b> <span id="question">欢迎使用本考试系统,请单击开始!</span></p>
<div id="main">
<p><b>答案:</b><input type="text" id="answer">
<input type="button" value="Submit" id="submit">
<br><b> 提示:</b><span id="answershow"></span>
</div>
<script language="JavaScript" type="text/javascript" src="manage.js"></script>
</body>
</html>

ajax.js文件

var ajaxreq=false, ajaxCallback;
function ajaxRequest(filename) {
   try {
    ajaxreq= new XMLHttpRequest();
   } catch (error) {
    try {
      ajaxreq = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (error) {
      return false;
    }
   }
   ajaxreq.open("GET",filename);
   ajaxreq.onreadystatechange = ajaxResponse;
   ajaxreq.send(null);
}
function ajaxResponse() {
   if (ajaxreq.readyState !=4) return;
   if (ajaxreq.status==200) {
      if (ajaxCallback) ajaxCallback();
   } else alert("Request failed: " + ajaxreq.statusText);
   return true;
}
是很简单的创建xmlhttp哦,更实用健全的xmlhttp创建方法最好的xmlhttp创建方法

mange.js 文件,

var qn=0,questions,right=0;
function getQuestions() {    //getElementById用于定位到要操作的页面元素
   document.getElementById("main").style.visibility="visible";
   document.getElementById("begin").style.visibility="hidden";
   document.getElementById("answer").focus();
   obj=document.getElementById("question");
   obj.firstChild.nodeValue="正在加载.....";
   ajaxCallback = nextQuestion;
   ajaxRequest("questions.xml");     //从服务器端XML文本加载问题
}
function nextQuestion() {        //显示下一个问题
   questions = ajaxreq.responseXML.getElementsByTagName("ask");
   obj=document.getElementById("question");
   if (qn < questions.length) {
      q = questions[qn].firstChild.nodeValue;
      obj.firstChild.nodeValue=q;
   } else {           //用户回答完使用题时,给予评分
   var anobj=document.getElementById("answershow");     
   anobj.innerHTML="您的分数为:"+right/questions.length*100;
   }
}
function checkAnswer() {       //即时检查用户作答情况
   answers = ajaxreq.responseXML.getElementsByTagName("key");
   a = answers[qn].firstChild.nodeValue;
   answerfield = document.getElementById("answer");
   if(answerfield.value==""){ var anobj=document.getElementById("answershow");//用户没有作答时提示
  var anobj=document.getElementById("answershow");
     anobj.innerHTML="对不起,你还没有回答";
  answerfield.focus();
     return;}
   else if (a.toLowerCase() == (answerfield.value).toLowerCase()) {  //用户答对时的提示
    right++;
    var anobj=document.getElementById("answershow");
     anobj.innerHTML="回答正确!";
   answerfield.focus();
   }
   else {
       var anobj=document.getElementById("answershow");  //用户打错时的提示
      anobj.innerHTML="答案错误,答案应为:"+a;
      answerfield.focus();
    }
   qn = qn + 1;
   answerfield.value="";
   nextQuestion();
}
//下面几行为按钮创建事件处理
obj=document.getElementById("startq");
obj.onclick=getQuestions;
ans=document.getElementById("submit");
ans.onclick=checkAnswer;
这个文件是分析节点,判断答案是否正确的。

questions.php

<?php
 $link=mysql_connect("localhost","root","");
 mysql_select_db("quiz",$link);
 mysql_query("set names gb2312");
 $sql=mysql_query("select * from questions");
 echo "<?xml version='1.0' encoding='gb2312'?><questions>";
 
 while($info=mysql_fetch_array($sql)){
  echo "<ask>".$info[question]."</ask><key>".$info[answer]."</key>";
  };
 echo "</questions>";
?>

questions.xml

<?xml version="1.0" encoding="gb2312" ?>
<questions>
  <ask>传统的web开发模式与Ajax开发模式相比,哪个效率更高?</ask>
  <key>Ajax</key>
  <ask>Ajax技术的核心对象是什么?</ask>
  <key>XMLHttpResponse</key>
  <ask>Ajax技术中使用什么方法来定位你需要操作的元素?</ask>
  <key>getElementById</key>
  <ask>Ajax用来定义显示的是什么技术?</ask>
  <key>CSS</key>
   <ask>服务端对浏览端的响应存储在XMLHttpResponse的哪个属性中(作为xml文档)?</ask>
  <key>responseXML</key>
</questions>

就这么简单哦,下面来看看这款吧。

在很多应用中我们都会用到xml 特别是互动设计的朋友哦flash+xml等,下在我们就来一个实时的php输出xml 文件并进行分页吧。

<?php
    require_once("Inc/Conn.php");//系统配置文件
 $sql = "select *  from ose";
 $result = mysql_query($sql) ;
 $total = mysql_num_rows($result);
 if( $total )
 {
  $pagesize =4;
  $pagecount=($total % $pagesize)?(int)($total / $pagesize)+1:$total/$pagesize;//统计总页面
  $page  =isset($_GET['page'])?$_GET['page']:1;//取得当前页面
  $start =($page>=1 && $page<=$pagecount)?$start=$pagesize*($page-1):$start=1;//取得超始记录
  $sql.="  order by id desc limit $start,$pagesize" ;  
  $result = mysql_query( $sql );
  while( $rs = mysql_fetch_array($result) )
  {   
   $temp .= "<member id="".$rs['id']."" roomname="".$rs['User_Name'].""/>n";   
  }
 }
 else
 {
  die('{result:"false"}');
 }
 //die('bb');
 echo "<?xml version="1.0" encoding="gb2312" ?>n<root>n<page now="$page" count="$pagecount"/>n<roomlist>n",$temp,"</roomlist>n</root>";
 
?>

输出结果为:

载入XML从外部域
       由Kalliban :二零零四年五月十三日
如果您试图载入一个XML的文件,是位于不同的网域您的Flash电影,你最有可能注意到, XML.load ( )函数仅限于XML的文件,都位于相同的网域作为Flash影片。
这意味着你可以不加载XML文件“ http://www.site.com/data.xml ”到Flash影片“ http://www.swfdomain.com/flash.swf ”的XML.load ( )功能。

然而,有一个非常简单的方式解决这个用PHP 。在经历本教程,我建议您看看其他的XML教程在这里kirupa.com 。

好吧,让我们开始吧!

创建的XML
XML的文件我们要利用这个例子将是非常基本的,因为它只是为了演示。虽然,有一件事,绝不能成为包含在XML文件!这是XML声明标记,它看起来像这样:

 <?xml version="1.0" encoding="iso-8859-1"?>

如果该标记是包含在XML文件,它会导致一个PHP解析错误,因为PHP将治疗范围内的一切“ ?和? “作为PHP代码。我将讨论这个问题。
好了,所以XML的文件将是:

<testNode>
  <testChildnode testVar="blah">Test</testChildNode>
</testNode>

只要复制粘贴到记事本,网页或任何其他程序能够编辑XML数据。

将档案储存为test.xml 。


创建的PHP
PHP的文件也将非常简单。我们将利用包括( )函数来加载XML的文件到的PHP脚本。

<?php
include($_GET['xmlsource']);
?>

为了使它有点更具活力,我们将指派路径的XML文件,并使用GET方法。因此,当我们加载PHP的Flash影片,它看起来就像这样:

loadXML.php ? xmlsource = test.xml

保存的PHP脚本作为loadXML.php 。

PHP和AJAX的RSS阅读器

RSS阅读器是用来读取RSS信息

允许快速的RSS浏览新闻和更新




AJAX的RSS阅读器
在AJAX以下例子,我们将展示一个RSS阅读器的内容从RSS是载入网页无需刷新。

在HTML表单
这是HTML网页。它包含一个简单的HTML表格,并链接到一个JavaScript :

<html>
<head>
<script type="text/javascript" src="getrss.js"></script>
</head>
<body>
<form> 
Select an RSS-Feed:
<select onchange="showRSS(this.value)">
<option value="Google">Google News</option>
<option value="MSNBC">MSNBC News</option>
</select>
</form>
<p><div id="rssOutput">
<b>RSS Feed will be listed here.</b></div></p>
</body>
</html>

例如解释-的H TML表单
正如你可以看到, HTML网页上面载有一个简单的HTML表单的下拉框。

作品的形式像这样:

事件触发时,用户选择一个选项在下拉框中
当事件触发的功能要求showRSS ( )被处决。
下面的形式是一个<div>所谓的“ rssOutput ” 。这是作为一个占位符返回的数据showRSS ( )函数。转载请注明来自http://www.111cn.net/wy/yw.html




的JavaScript
JavaScript代码是储存在“ getrss.js ”和相关的HTML文件:

var xmlHttp
function showRSS(str)
 { 
 xmlHttp=GetXmlHttpObject()
 if (xmlHttp==null)
  {
  alert ("Browser does not support HTTP Request")
  return
  }
 var url="getrss.php"
 url=url+"?q="+str
 url=url+"&sid="+Math.random()
 xmlHttp.onreadystatechange=stateChanged 
 xmlHttp.open("GET",url,true)
 xmlHttp.send(null)
 }

function stateChanged() 
 { 
 if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
  { 
  document.getElementById("rssOutput")
  .innerHTML=xmlHttp.responseText 
  } 
 }
function GetXmlHttpObject()
{
var xmlHttp=null;
try
 {
 // Firefox, Opera 8.0+, Safari
 xmlHttp=new XMLHttpRequest();
 }
catch (e)
 {
 // Internet Explorer
 try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
 catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
 }
return xmlHttp;
}

例如解释
该stateChanged ( )和GetXmlHttpObject职能是一样的PHP的AJAX推荐的篇章。

该showRSS ( )函数

每一次的选择是选择在输入外地执行这一职能如下:

界定了网址(档)传送给服务器
添加一个参数( Q )的网址与选定的选项从下拉框中
添加一个随机数字,以防止服务器使用快取档案
吁请GetXmlHttpObject函数创建一个XMLHTTP物件,并讲述了对象执行的功能要求时stateChanged变化是触发
开幕XMLHTTP物件与特定网址。
发送一个HTTP请求到服务器



PHP页面
网页服务器要求的JavaScript代码是一个PHP文件名为“ getrss.php ” :

<?php
//get the q parameter from URL
$q=$_GET["q"];
//find out which feed was selected
if($q=="Google")
 {
 $xml=("http://news.google.com/news?ned=us&topic=h&output=rss");
 }
elseif($q=="MSNBC")
 {
 $xml=("http://rss.msnbc.msn.com/id/3032091/device/rss/rss.xml");
 }
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);
//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')
->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')
->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')
->item(0)->childNodes->item(0)->nodeValue;
//output elements from "<channel>"
echo("<p><a href='" . $channel_link
 . "'>" . $channel_title . "</a>");
echo("<br />");
echo($channel_desc . "</p>");
//get and output "<item>" elements
$x=$xmlDoc->getElementsByTagName('item');
for ($i=0; $i<=2; $i++)
 {
 $item_title=$x->item($i)->getElementsByTagName('title')
 ->item(0)->childNodes->item(0)->nodeValue;
 $item_link=$x->item($i)->getElementsByTagName('link')
 ->item(0)->childNodes->item(0)->nodeValue;
 $item_desc=$x->item($i)->getElementsByTagName('description')
 ->item(0)->childNodes->item(0)->nodeValue;
echo ("<p><a href='" . $item_link
 . "'>" . $item_title . "</a>");
 echo ("<br />");
 echo ($item_desc . "</p>");
 }
?>转载请注明来自http://www.111cn.net/wy/yw.html

PHP XML Expat Parser

内置的外籍分析器能够处理XML文档在PHP 。 
 

XML是什么?
XML是用来描述数据并把重点放在什么样的数据是。一个XML文件描述的结构数据。

在XML中,没有预先确定的标记。你必须定义自己的标记。

如果您想了解更多有关XML ,请访问我们的XML指南。 
 

什么是外籍人士?
要阅读和更新-创建和操纵-一个XM L文件,您需要一个XM L解析器。

有两个基本类型的XML解析器:

树为基础的剖析:这分析器转换XML文件成一个树状结构。分析了整个文件,并提供进入树的内容。例如:文档对象模型( DOM )
基于事件的剖析:观XML文件的一系列活动。当某一特定事件发生时,它要求一个函数来处理它
该外籍分析器是一个基于事件的剖析。

基于事件的解析器重点内容的XML文件,而不是其结构。正因为如此,基于事件的剖析器可以存取数据速度快于树为基础的解析器。

看看下面的XML部分:

<from>Jani</from>

一种基于事件的剖析报告的XML上述一系列三项活动:

开始元素:从
资料,一节开始,价值:贾尼
关闭内容:从
在上述范例的XML包含格式良好的XML 。然而,例如不能有效的XML ,因为没有任何文档类型定义( DTD的)与此相关。

然而,这并没有差异时,使用外籍分析器。外籍人士是一个非验证剖析,并忽略任何DTDs 。

作为一个基于事件的,非验证XML分析器,外籍速度快,小,适合PHP的Web应用。

注: XML文件必须有充分的形成或外籍人士将产生一个错误。




安装
外籍人士的XML解析器职能是PHP核心的一部分。没有安装即可使用这些功能。




一个XML文件
XML档案下文将用于我们的榜样

<?xml version="1.0" encoding="ISO-8859-1"?>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
 

初始化XML解析器
我们要初始化XML解析器在PHP中,确定了不同的处理XML的事件,然后解析XML文件。

例如

<?php
//Initialize the XML parser
$parser=xml_parser_create();
//Function to use at the start of an element
function start($parser,$element_name,$element_attrs)
  {
  switch($element_name)
    {
    case "NOTE":
    echo " Note <br />";
    break; 
    case "TO":
    echo "To: ";
    break; 
    case "FROM":
    echo "From: ";
    break; 
    case "HEADING":
    echo "Heading: ";
    break; 
    case "BODY":
    echo "Message: ";
    }
  }
//Function to use at the end of an element
function stop($parser,$element_name)
  {
  echo "<br />";
  }
//Function to use when finding character data
function char($parser,$data)
  {
  echo $data;
  }
//Specify element handler
xml_set_element_handler($parser,"start","stop");
//Specify data handler
xml_set_character_data_handler($parser,"char");
//Open XML file
$fp=fopen("test.xml","r");
//Read data
while ($data=fread($fp,4096))
  {
  xml_parse($parser,$data,feof($fp)) or 
  die (sprintf("XML Error: %s at line %d", 
  xml_error_string(xml_get_error_code($parser)),
  xml_get_current_line_number($parser)));
  }
//Free the XML parser
xml_parser_free($parser);
?>
 
输出结果如.
 
Note 
To: Tove
From: Jani
Heading: Reminder
Message: Don't forget me this weekend!
 

它的原理就是:

初始化XML分析器与xml_parser_create ( )函数
创建职能,使用不同的事件处理程序
新增xml_set_element_handler ( )函数来指定哪些功能将被处死时,解析器遇到开幕式和闭幕式标签
新增xml_set_character_data_handler ( )函数来指定哪些功能将执行时遇到的分析器字符数据
解析文件“ test.xml ”的xml_parse ( )函数
如果在一个错误,新增xml_error_string ( )函数来转换XML错误的文字说明
呼叫xml_parser_free ( )函数来释放分配的内存与xml_parser_create ( )函数

转载请注明来自:  www.111cn.net/phper/php.html  

 

[!--infotagslink--]

相关文章

  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • python实现学生通讯录管理系统

    这篇文章主要为大家详细介绍了python实现学生通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2021-02-25
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • vue.js 表格分页ajax 异步加载数据

    Vue.js通过简洁的API提供高效的数据绑定和灵活的组件系统.这篇文章主要介绍了vue.js 表格分页ajax 异步加载数据的相关资料,需要的朋友可以参考下...2016-10-20
  • PHP实现今天是星期几的几种写法

    复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; }else if( $da == "2" ){ echo "今天是星期二"; }else if( $da == "3" ){ echo "今天是星期三"; }else if( $da == "4"...2013-10-04
  • 详解为什么现代系统需要一个新的编程模型

    如今高要求的分布式系统的建造者遇到了不能完全由传统的面向对象编程(OOP)模型解决的挑战,但这可以从Actor模型中获益。...2021-05-20
  • BootStrap栅格系统、表单样式与按钮样式源码解析

    这篇文章主要为大家详细解析了BootStrap栅格系统、表单样式与按钮样式源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-01-23
  • 原生js实现fadein 和 fadeout淡入淡出效果

    js里面设置DOM节点透明度的函数属性:filter= "alpha(opacity=" + value+ ")"(兼容ie)和opacity=value/100(兼容FF和GG)。 先来看看设置透明度的兼容性代码: 复制代码 代码如下: function setOpacity(ele, opacity) { if (...2014-06-07
  • JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法

    这篇文章主要介绍了JS基于MSClass和setInterval实现ajax定时采集信息并滚动显示的方法,涉及JavaScript页面元素定时滚动操作及ajax调用实现技巧,需要的朋友可以参考下...2016-04-19
  • 护卫神 主机管理系统使用说明(MSSQL管理)

    护卫神·主机管理系统该版本支持在Windows Server 200320082012,含32位和64位,直接开设配置WEB站、FTP站,以及SQL Server和MySQL,是您开设和管理虚拟主机的绝好帮手。但是对于新用户可能在使用上有一些困难,因此请仔细阅读如下说明文档...2016-01-27
  • jQuery+ajax简单实现文件上传的方法

    这篇文章主要介绍了jQuery+ajax简单实现文件上传的方法,结合实例形式简单分析了jQuery基于ajax的post方法进行文件传输及asp.net后台处理技巧,需要的朋友可以参考下...2016-06-12
  • jquery Ajax实现Select动态添加数据

    这篇文章主要为大家详细介绍了jquery Ajax实现Select动态添加数据的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2017-06-15
  • js实现ajax的用户简单登入功能

    这篇文章主要为大家详细介绍了js实现ajax的用户简单登入功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-19
  • 利用C#修改Windows操作系统时间

    这篇文章主要介绍了利用C#修改Windows操作系统时间,帮助大家更好的利用c#操作系统,感兴趣的朋友可以了解下...2020-12-08
  • Android中用HttpClient实现Http请求通信

    本文我们需要解决的问题是如何实现Http请求来实现通信,解决Android 2.3 版本以后无法使用Http请求问题,下面请看正文。 Android开发中使用HttpClient来开发Http程序...2016-09-20
  • vivo OriginOS新系统如何更新 originos系统更新方法

    vivo新系统更新的步骤是什么?如何更新到vivo的最新系统?vivo的最新系统太亮眼了,不少vivo的用户都在跃跃欲试想体验一下最新的系统。vivo新系统虽然做出来了不过我们想体验的话还是要等待一段时间。到时大家通过下面的方法就可以使用到新系统了...2020-12-08