1. 程式人生 > >簡單的成績錄入系統製作與小問題

簡單的成績錄入系統製作與小問題

 

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>