简单的成绩录入系统制作与小问题

 

1,首页是每个人的登录页面,需要通过正则表达式验证输入是否为空,需要将用户名和数据库中的密码进行对比,否则无法进入自己的界面;

2,点击首页中的新增记录,跳转第二个页面,选择第n次成绩,录入分数,则往数据库添加某同学的成绩,最后提交,系统询问:无法更改请确认无误,提交之后数据库新增记录,第n次成绩录入完毕;

 

------------------------------------开始工程---------------------------------------------------------

1,同一个表单存在两个submit,如何使得点击不同的按钮进入不同的页面?<form action="a.html">肯定不行;

所以: <form name="f">  

  <button οnclick="javascript:document.f.action=' a.html ';document.f.submit()">录入成绩</button>

  <button οnclick="javascript:document.f.action=' b.html ';document.f.submit()">查询我的</button>

2,如何使得背景图片充满整个屏幕,且不重复,放大缩小时不会变化:

.body{

position:fixed;

top:0;

left:0;

background:url( ) no-repeat ;

background-size:cover;

}

3,要么直接禁止网页缩放:

移动端:

<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no" id="viewport" name="viewport">

网页端:

<script>
var zoom=function(e){ 
      var e = e || window.event; 
      if(e.wheelDelta && event.ctrlKey){
           event.returnValue = false
      }else if(e.detail){
           event.returnValue = false;
      } 
}  
if(document.addEventListener){ 
    document.addEventListener('DOMMouseScroll' , zoom , false); 
}
window.onmousewheel = document.onmousewheel = zoom;
</script>

3,首先对于input判断:

判断xuehao栏,密码栏是否为空;判断密码栏和确认密码栏值是否相同

用js就行:

if(value){

return ture;

}else {return false;}  //只有return ture 才能把数据提交到数据库;

 

4,开始注册,首先判断是否注册过这个学号:

从php获得input的值:

<input name="xuehao">

$xuehao1=$_get['xuehao'];

连接数据库:

$aa=mysqli_connect('locahost', 'root', '123456', 'web001');

设置查询语句(将input中的值拿来在数据库中做查找):

$sql1="select  xuehao from zhuce  where  xuehao='$xuehao1' ";

$result=mysqli_query($aa,$sql1);

$len=mysqli_num_rows($result);  //返回结果集中的行数;

判断返回的长度是否>0,若大于0则说明数据库中已经注册过这个学号了

if($len>0){

echo 'this  have been already  registered!';

exit;  //退出php,不再执行下面的录入数据库程序;

}

4,其中有一个问题:当输入用户名为数字时能够正常判断,但是用户名若为字母,则每次显示都是已经注册过!

5,若未曾被注册过,则将数据录入系统:

 $bb="insert zhuce values('$xuehao','$password')";
    mysqli_query($aa,$bb);

6,但是要解决一个问题:就是如果学号已经被注册过,如何在本页面提示,而不跳转,如果把php写在本页是不行的,因为本来html下写php已经是嵌套,如果再在php中调用script会报错;只能在外部引用php验证注册。那么就让页面跳转以后自己跳回来,

将action仍然指向php,在php中添加语句:echo  '<script>window.οnlοad=function(){  history.back()  }</script>' 页面就会自动跳转回来了;同理得,如果注册成功,返回两页:history.go(-2);  注意是go是back,back只能返回一页;

7,下面是登录验证:

这个验证和注册的时候一样:

获得输入的xuehao值:

$xuehao=$_get['xuehao1'];

$password=$_get['password1']

连接数据库,查询学号为$xuehao那行的值,并query得到result;

$all=mysqli_fetch_assoc($result);   //保留获得的值;
    $it=$all['password'];     //选择那行中的password值

if($it==$password){ }; //判断从数据库获得的密码和input的是否一样;

7,但是问题又来了,作为button=录入 ,它既要求点击验证密码是否正确,又要点击后进入录入成绩系统页面,两个action如何分配?首先,在submit中用js实现onclick判断用户名是否为空,若为空return false;

不为空则执行:document.f.action='first.php';document.f.submit();即跳转到检验用户名和密码是否一致的php页面;在php页面如果一致则插入js代码跳转到目标html:echo  '<script> window.onload.href="dynamic.html"</script>';

如果不一致返回到登录页面:history.back();

7,还要问题:验证密码的时候,如果你注册过学号,数据库里面有你的用户名和密码,所以进行密码比较的时候,因为能通过select * from tb2 where xuehao="$xuehao"得到你的原始密码,所以可以将数据库中的密码与你输入的进行比较;问题是:我没有注册过,所以数据库中没有我的用户名和密码,当我随便输入一个用户名,不输入密码时,因为从数据库检索出来的结果也是空,所以两者相同;所以不要忘记验证用户名是否在数据库中存在。如何验证一个数据在数据库中是否存在:

$sql="select * from tb2 where  xuehao='$xuehao'";

$result=mysqli_query($aa,$sql);

$all=mysqli_fetch_assoc($result);

$is=all['xuehao"];

if(!$is){ echo   '<script>alert("请先注册!");history.back();</script>';}

8,已经完成登录注册密码查错,下面开始成绩录入与查询:

成绩输入完毕,点击提交submit,数据传入数据库;

    $users=$_GET['users'];
    $math=$_GET['math'];
    $chinese=$_GET['chinese'];
    $pass=$_GET['password'];
    $path=$_GET['path'];
    $aa=mysqli_connect('localhost','root','654321','web002');
    $bb="insert tb2 values('$users','$pass','$math','$chinese','$path')";
    mysqli_query($aa,$bb);

然后录入完毕以后,设置一个选项用于查询所有的成绩并显示在 表格中:

利用:

<?php
         $va=mysqli_connect('127.0.0.1','root','654321','web002');
         $vb="SELECT * FROM tb2";
         $result=mysqli_query($va,$vb);  //引入数据库数据;

echo '<table><tr><th>姓名</th><th>学号</th><th>第N次作业</th><th>成绩</th><th>阅卷者</th><tr>'; //html代码输出表格形式

while($row = mysqli_fetch_assoc($result)){
echo '<tr><td>'.$row['name'].'</td></tr>';
}          //开始循环表格输出值;
echo '</table>';          //一定放在循环体之外;

?>

9,基本完毕,发现input具有记忆功能很麻烦,用autocomplete="off",放在每个表单form中可以把整个表单的记忆功能都取消掉,因为autocomplete是浏览器的内置控件,所以没法用css或者js修改;

10,在登录完毕,跳转到输入成绩页面时候,如果学生录入别人成绩的时候,如果没有一套体制制约,录入别人的成绩的时候就可以非常随意,所以如果在成绩录入页面直接获取到登录页面的用户名,那就可以知道是谁改的了,所以问题来了,登录页面是dynamic_first.html,提交表单的时候,action值指向first.php验证密码是否正确,然后first.php输出js,window.location.href指向录入页面dynamic.html,所以如何在两个html页面传输值呢?

方案一:首先我想,因为first.php页面有一个变量:$xuehao=$_get['xuehao1']刚好是我需要的变量,可不可以使用

echo  '<script>window.location.href="dynamic.html?"+$xuehao;</script>'  ;

然后在dynamic.html页面:

<script>

var  xuehao=window.location.search;

</script>来获取值呢?

但是报错,因为php中嵌套了js,js不能调用php中的$xuehao变量,所以href那句话格式错误!方案一不可以!

方案二:

既然php不可以传值给html,那我用dynamic_first.html和dynamic.html之间传值,

<script>

var m=$("input:eq(3)").val();

window.location.href="dynamic.html?"+m;

</script>

但是很要命的是,我忽略了php是要跳转到dynamic.html页面的,php中也有一句话:

echo '<script>window.location.href="dynamic.html";</script>';

这就很,因为html还要跳转到php,所以php后执行,dynamic.html中的搜索传递值的语句将会是空值;

方案二凉了;

方案三:

利用cookie:让cookie记录用户名,由于这几个页面用的是同一个域,所以cookie是同一个值,可以每次登录的时候都更新cookie,然后在dynamic.html页面调用cookie!

在dynamic_first.html页面js代码:

var m=$("input:eq(3)").val();

document.cookie="name="+m;

在dynamic.html页面js代码:

var  n=document.cookie.substring(5,6);

$("input[name='you']").val(n);

html:设置为不可更改

<input type="text" name="you" disabled>

但是 name='you'的value值却不能传到数据库,原来是属性为disabled的,它的值不能被传递,把disabled改成readonly就行了;

11,在输入框输入汉字,传输到数据库以后显示乱码:不要慌,修改数据类型为utf8:

alter table from "表名"  change "列名" "列名"  varchar(45) character set  utf8 ;

12,数据中的汉字提取到网页上显示???:

我查询了一天的百度,告诉我在php头部加header("Content:text/html; charset="utf-8"”),告诉我把数据表,数据库的编码方式都改为utf8,包括修改配置文件my.ini,   db.opt都没有用,后来请教学长帮我看php代码,大佬帮我改好了:

源码顺序问题:

$bb="SELECT * FROM tb2";
     $result=mysqli_query($aa,$bb);

          $cc="SET NAMES UTF8";
    mysqli_query($aa,$cc);
     $dd="set character_set_client=utf8";
    $ee="set character_set_results=utf8";
   

后来大佬给我调了以下顺序ok了:

$cc="SET NAMES UTF8";
    mysqli_query($aa,$cc);
     $dd="set character_set_client=utf8";
    $ee="set character_set_results=utf8";

 

$bb="SELECT * FROM tb2";
     $result=mysqli_query($aa,$bb);

我他妈!!

13,然后开始开启正则表达式验证学号的格式:

var  reg=/^16221070(32|31|42|41)(0[1-9]|[1-3][0-9])$/;

var m=$("input").val();

if(!reg.test(m)){

alert("学号格式不正确");

}

其中,test()函数返回匹配结果的布尔值;

/^     $/中的为正则表达式内容的开头结尾;

16221070表示必须匹配:

32|31|42|41表示可以选择32,31,42,41;

【1-9】表示可以用1-9;

后来进行验证的时候发现,匹配这个格式的学号总是写不进数据库,后来发现是因为定义学号这个变的长度是int(10),最多只能有10位小数;后来改成int(20)还是不行,应该是int最大只有10,所以改成了bigint(20),然后解决了;

14,页面布局问题:

手机上的像素值和电脑上的不一样,最好利用媒体查询分别写前端页面;

15,屏蔽代码:

有四种查看源码的方式:

  1,右击

  2,F12

  3,ctrl+u

  4,ctrl+shift+i;

window.οnlοad=function(){
        document.οnkeydοwn=function(){
            var e=window.event||arguments[0];
            if(e.keyCode==123){
                alert("小样你想干嘛?");
                return false;
            }else if((e.ctrlKey)&&(e.shiftKey)&&(e.keyCode==73)){
                alert("还是不给你看。。");
                return false;
            }else if((e.ctrlKey)&&(e.keyCode==85)){//追加

        return false;
       }
        };
        document.οncοntextmenu=function(){
            alert("小样不给你看");
            return false;
        }
    }

16,提交表单的时候,

<input  type="button" name="name1">

$_get[  "name1" ] 

无法获取到值,因为input的类型是button无法通过get, post获取值,get与post只能

获取type为text,password, file,  submit等类型;

17,php和html的混合使用:

 

 

 

 

 

 

 



 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

<!-- 模板文件,利用HTML代码展示数据 -->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>比赛列表</title>
</head>
<body>

<table>
    <tr>
        <th>ZX_id</th><th>ZX_name</th><th>ZX_fenlei</th><th>ZX_zuozhe</th><th>更新时间</th><th>浏览次数</th><th>发布状态</th>
    </tr>
    <?php foreach($shujuku->result as $row) : ?>
    <tr>
        <td><?php echo $row[0];?></td>
        <td><?php echo $row[1];?></td>
        <td><?php echo $row[2];?></td>
        <td><?php echo $row[3];?></td>
        <td><?php echo $row[4];?></td>
        <td><?php echo $row[5];?></td>
        <td><?php echo $row[6];?></td>
    </tr>
    <?php endForeach;?>
</table>
</body>
</html>

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值