1,首页是每个人的登录页面,需要通过正则表达式验证输入是否为空,需要将用户名和数据库中的密码进行对比,否则无法进入自己的界面;
2,点击首页中的新增记录,跳转第二个页面,选择第n次成绩,录入分数,则往数据库添加某同学的成绩,最后提交,系统询问:无法更改请确认无误,提交之后数据库新增记录,第n次成绩录入完毕;
------------------------------------开始工程---------------------------------------------------------
1,同一个表单存在两个submit,如何使得点击不同的按钮进入不同的页面?<form action="a.html">肯定不行;
所以: <form name="f">
<button onclick="javascript:document.f.action=' a.html ';document.f.submit()">录入成绩</button>
<button onclick="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.onload=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.onload=function(){
document.onkeydown=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.oncontextmenu=function(){
alert("小样不给你看");
return false;
}
}
16,提交表单的时候,
<input type="button" name="name1">
$_get[ "name1" ]
无法获取到值,因为input的类型是button无法通过get, post获取值,get与post只能
获取type为text,password, file, submit等类型;
<!-- 模板文件,利用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>