php实验10

本文介绍了如何使用PHP和AJAX实现Web应用。首先,讲解了传统Web应用的不足,然后通过GET方式创建一个学生成绩查询系统。接着,使用POST方式改进该系统,确保数据提交的安全性。最后,展示了如何利用无刷新技术检查学号的唯一性,提供更好的用户体验。

一、传统Web应用 (文件命名为SY10_1_submit.php) --重新加载整个页面 - 不友好

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
    <title>AJAX Example</title>
</head>
<body>
<form action="">
    学号:<input type="text" name="XH" size="12">
    课程名:<input type="text" name="KCM" size="12">
    <input type="submit" value="查询" name="bt1"><br>
    成绩:<input type="text" name="CJ" size="12" id="CJ">
</form>
<?php
if(isset($_GET['bt1'])){
    $XH=$_GET['XH'];                //取得XH的值
    $KCM=$_GET['KCM'];        //取得KCM的值
    $conn=mysqli_connect("localhost","root","");  //连接MySQL服务器
    mysqli_select_db($conn, "PXSCJ");      //选择PXSCJ数据库
    mysqli_query($conn, "SET NAMES utf8mb4");    //将MySQL字符集设为gb2312

    $sql="select 成绩 from CJB where 学号='$XH' and 课程号=(select 课程号 from KCB where 课程名='$KCM')";
    $result=mysqli_query($conn, $sql);                      //执行SQL语句$sql
    $row=mysqli_fetch_array($result);
    if($row)
        echo "<script> document.getElementById('CJ').value = $row[0]; </script>" ; //嵌入JS在'CJ'输出成绩
    else
        echo "<script> document.getElementById('CJ').value= '".'无此成绩'."' ;   </script>" ;
}
?>
</body>
</html>

二、使用GET方式实现一个简单的服务器请求,通过输入学生学号和课程名,查看学生的成绩(文件命名为SY10_2_main.php、SY10_2_process.php) – GET方式的PHP与AJAX交互 P297

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>AJAX Example</title>
    <script>
        function GetXmlHttpObject(){              //不同的浏览器使用不同的方法
            var XMLHttp=null;                       //来创建XMLHttpRequest对象
            try {
                XMLHttp=new XMLHttpRequest();
            }                                //NetScape等浏览器
            catch(e){
                try {
                    XMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
                }       //IE6以上版本浏览器
                catch(e){
                    XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");}
            }
            return XMLHttp;
        }
        function cj_query(){
            XMLHttp=GetXmlHttpObject();
            //调用函数GetXmlHttpObject()初始化XMLHttpRequest
            var XH=document.getElementById("XH").value;
            //getElementById()返回指定ID的第一个对象的引用
            var KCM=document.getElementById("KCM").value;
            var url="SY10_2_process.php";             //服务器端在SY10_2_process.php中处理
            url=url+"?XH="+XH+"&KCM="+KCM;              //url地址-以GET方式传递
            url=url+"&sid="+Math.random();
            //添加一个随机数,以防服务器使用缓存的文件
            XMLHttp.open("GET", url, true);
            //以GET方式通过给定的url打开XMLHTTP对象
            XMLHttp.send(null);        //向服务器发送HTTP请求-请求内容为空(参数已在url中)
            XMLHttp.onreadystatechange = function(){
                //定义响应处理函数--JS即时定义函数的方法
                if(XMLHttp.readyState==4&&XMLHttp.status==200){
                    //readyState为4--已经传回了所以
                    document.getElementById("CJ").value=XMLHttp.responseText;
                    //信息-可以开始处理--更新页面了
                }
                //innerHTML属性--获取对象的内容
            }
            //或向对象插入内容
        }
        //传回的信息--当字符串使用
    </script>
</head>

<body>
<form action="">
    学号:<input type="text" id="XH" size="12" size="XH">
    课程名:<input type="text" id="KCM" size="12" size="KCM">
    <input type="button" value="查询" onclick="cj_query()"><br>
    <!-- //单击"查询"按钮 调用cj_query函数 -->
    成绩:<input type="text" id="CJ" size="12" id="CJ">
</form>
</body>
</html>

<?php
$XH=$_GET['XH'];  			                //取得XH的值
$KCM=$_GET['KCM'];					//取得KCM的值-不会出现编码(乱码)问题
header('Content-Type:text/html;charset=utf-8');	//发送header-将编码设为gb2312
$conn=mysqli_connect("localhost","root","123456");	//连接MySQL服务器
mysqli_select_db($conn,"PXSCJ");			//选择PXSCJ数据库
mysqli_query($conn,"SET NAMES utf8mb4");			//将mysql字符集设为gb2312

$sql="select 成绩 from CJB where 学号='$XH' and 课程号=(select 课程号 from KCB where 课程名='$KCM')";
$result=mysqli_query($conn,$sql);
$row=mysqli_fetch_array($result);                      //从结果集中逐行获取记录
if($row)
    echo $row['成绩'];			                //输出课程成绩到请求端
else
    echo "无此成绩";
?>

三、使用POST方式实现第二题(文件命名为SY10_3_main_post.php、SY10_3_process_post.php) – POST方式的PHP与AJAX交互

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
    <title>AJAX Example</title>
    <script>
        function GetXmlHttpObject(){              //不同的浏览器使用不同的方法
            var XMLHttp=null;                       //来创建XMLHttpRequest对象
            try {
                XMLHttp=new XMLHttpRequest();
            }
                //NetScape等浏览器
            catch(e){
                try {
                    XMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
                }
                    //IE6以上版本浏览器
                catch(e){
                    XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
            }
            return XMLHttp;
        }
        function cj_query(){
            XMLHttp=GetXmlHttpObject();
            //调用函数GetXmlHttpObject()初始化XMLHttpRequest
            var XH=document.getElementById("XH").value;
            //getElementById()返回指定ID的第一个对象的引用
            var KCM=document.getElementById("KCM").value;
            var url="SY10_3_process_post.php";
            //服务器端在SY10_3_process_post.php中处理
            var poststr="XH="+XH+"&KCM="+KCM;            //要传的参数-以post方式传递

            XMLHttp.open("POST", url, true);
            //以POST方式通过给定的url打开XMLHTTP对象
            XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");  //设置头信息
            XMLHttp.send(poststr);                    //向服务器发送HTTP请求(内容-参数)
            XMLHttp.onreadystatechange = function(){
                //定义响应处理函数--JS即时定义函数的方法
                if(XMLHttp.readyState==4&&XMLHttp.status==200){
                    //readyState为4--已经传回了所以
                    document.getElementById("CJ").value=XMLHttp.responseText;
                    //信息-可以开始处理--更新页面了
                }
                //innerHTML属性--获取对象的内容
            }
            //或向对象插入内容
        }
        //XMLHttp.responseText--传回的信息--当字符串使用
    </script>
</head>

<body>
<form action="">
    学号:<input type="text" name="XH" size="12" id="XH">
    课程名:<input type="text" name="KCM" size="12" id="KCM">
    <input type="button" value="查询" onclick="cj_query();"><br>
    成绩:<input type="text" name="CJ" size="12" id="CJ">
</form>
</body>
</html>
<?php
$XH=$_POST['XH'];  			                //取得XH的值	//取得KCM的值-会出现编码(乱码)问题
$KCM=$_POST['KCM'];           //将UTF-8转换成gb2312字符集
header('Content-Type:text/html;charset=utf-8');	//发送header-将编码设为gb2312
$conn=mysqli_connect("localhost","root","");	//连接MySQL服务器
mysqli_select_db($conn,"PXSCJ");			//选择PXSCJ数据库
mysqli_query($conn,"SET NAMES utf8mb4");			//将字符集设为gb2312

$sql="select 成绩 from CJB where 学号='$XH' and 课程号=(select 课程号 from KCB where 课程名='$KCM')";
$result=mysqli_query($conn,$sql);                             //执行SQL语句$sql
$row=mysqli_fetch_array($result);
if($row)
    echo $row['成绩'];			                //输出课程成绩到请求端
else
    echo "无此成绩";
?>

四、要添加一个学生的信息,用户输入学号,使用无刷新技术判断学号是否存在并输出提示(文件命名为SY10_4_main.php、SY10_4_process.php)。P300

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>AJAX Example2</title>
    <script>
        function GetXmlHttpObject() {
            var XMLHttp=null;
            try{
                XMLHttp=new XMLHttpRequest();
            }
            catch(e){
                try{
                    XMLHttp=new ActiveXObject("Msxml2.XMLHTTP");
                }
                catch(e){
                    XMLHttp=new ActiveXObject("Microsoft.XMLHTTP");
                }
            }
            return XMLHttp;
        }
        function run(){
            XMLHttp=GetXmlHttpObject();
            var XH=document.getElementById("XH").value;   //得到“学号”文本框中输入的值
            var XM=document.getElementById("XM").value;   //得到“姓名”文本框中输入的值
            var url="SY10_4_process.php";       //服务器端在SY10_4_process.php中处理
            var poststr="XH="+XH+"&XM="+XM;         //url地址,以POST方式传递
            XMLHttp.open("POST",url,true);             //以POST方式打开XMLHTTP对象
            XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); //设置头信息
            XMLHttp.send(poststr);                 //向服务器发送HTTP请求(内容-参数)
            XMLHttp.onreadystatechange = function(){     //定义响应处理函数
                if(XMLHttp.readyState==4&&XMLHttp.status==200){
                    if(XH==""){ window.alert("学号未填"); }
                    else{
                        if(XMLHttp.responseText == "1"){
                            document.getElementById("txthint").innerHTML="学号已存在";
                        }
                        else if(XMLHttp.responseText == "0"){
                            document.getElementById("txthint").innerHTML="学号未被使用";
                        }
                    }
                }
            }
        }
    </script>
</head>

<body>
<form>
    <table bgcolor="#CCCCCC" width="280" border="1" align="center" cellpadding="0" cellspacing="0">
        <tr>
            <td width="90">学号:</td>
            <td><input type="text" name="XH" id="XH" size="15">
                <input type="button" name="select" value="检测" onclick="run();"></td>
        </tr>
        <tr>
            <td bgcolor="#CCCCCC" width="90">姓名:</td>
            <td><input name="XM" type="text" size="15" id="XM"></td>
        </tr>
        <tr>
            <td>性别:</td>
            <td><input type="radio" name="XB" value="1"><input type="radio" name="XB" value="0"></td>
        </tr>
        <tr>
            <td align="center" colspan="2"><input type="submit" name="cmdINSERT" value="添加"></td>
        </tr>
    </table>
</form>
<font color="red">
    <div id="txthint" align="center"></div>
</font> <!-- 设置id为"txthint"的div标记,用于显示返回信息 -->
</body>
</html>

<?php
$XH=$_POST['XH'];
$XM=$_POST['XM'];
header('Content-Type:text/html;charset=utf-8');	//发送header-将浏览器编码设为gb2312
$conn=mysqli_connect("localhost","root","");	//连接MySQL服务器
mysqli_select_db($conn,"PXSCJ");			//选择PXSCJ数据库
mysqli_query($conn,"set names utf8mb4");			//将mysql字符集设为gb2312
$sql="select * from XSB where 学号='$XH'";		//查询语句
$result=mysqli_query($conn,$sql);
$row=mysqli_fetch_array($result);                     //从结果集中逐行获取记录
if($row)
    echo "1";
else
    echo "0";
?>

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值