前段時間一直在修改該系統的原型,剛開始接觸這個系統的時候,就感覺漏洞百出,首先是使用者權限分配不合理,再者是資料庫設計不合理,且不說用中文命名的習慣不好,該代碼冗餘嚴重。奈何實力有限,只能在其基礎上更改一二!!!
再次列出部分內容,希望各位指點一二...
首先是使用者權限分為四級,各部分各司其所咯,感謝拖鞋先生設計介面!!!
現在回顧這些代碼,有點後怕,因為都是按照自己所設想的一步步修改,根本沒有做過任何分析,
現在其中一個頁面代碼,希望各位可以從資料方面提點建議,
頁面asp.net代碼
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="VerifyFujia.aspx.cs" Inherits="HZU.WQS.web.VerifyFujia" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" ><head runat="server"> <title>審核附加工資</title> <link type="text/css" href="css/default.css" rel="Stylesheet" /></head><body style="background-color:#e1e5e8;"> <form id="form1" runat="server"> <div class="title"></div> <div style="font-size:13px; text-align:center; float:left;"> 姓名:<asp:TextBox ID="SName" runat="server"></asp:TextBox> 部門:<asp:DropDownList ID="ribu" runat="server"><asp:ListItem></asp:ListItem></asp:DropDownList> 添加部門:<asp:DropDownList ID="zt" runat="server"><asp:ListItem></asp:ListItem></asp:DropDownList> <asp:Button ID="btnree" runat="server" Text="尋找" onclick="btnree_Click" /> <asp:GridView ID="gvSH" runat="server" AllowPaging="True" AutoGenerateColumns="False" CellPadding="4" ForeColor="#333333" GridLines="None" DataKeyNames="id" OnRowDeleting="gvSH_RowDeleting" OnPageIndexChanging="gvSH_PageIndexChanged" OnSelectedIndexChanging="gvSH_SelectedIndexChanging" EmptyDataText="暫時沒有需要審核附件工資!" OnRowUpdating="gvSH_RowUpdating" Width="776px" Font-Size="13px"> <RowStyle BackColor="#E3EAEB" /> <Columns> <asp:TemplateField HeaderText="選擇"> <ItemTemplate> <asp:CheckBox ID="check" runat="server" /> </ItemTemplate> </asp:TemplateField> <asp:TemplateField InsertVisible="False" ShowHeader="False"> <ItemTemplate> <asp:Button ID="btnShenHe" CausesValidation="False" CommandName="Update" runat="server" Text="通過" OnClientClick="return confirm('該操作無法撤銷!確認通過嗎?');" /> <asp:Button ID="btnDel" CausesValidation="False" CommandName="Delete" runat="server" Text="拒絕" OnClientClick="return confirm('該操作無法撤銷!確認拒絕嗎?');" /> </ItemTemplate> <HeaderTemplate> 審核 </HeaderTemplate> </asp:TemplateField> <asp:BoundField DataField="編號" HeaderText="編號" /> <asp:BoundField DataField="姓名" HeaderText="姓名" /> <asp:BoundField DataField="部門" HeaderText="部門" /> <asp:BoundField DataField="金額" HeaderText="金額" /> <asp:BoundField DataField="備忘" HeaderText="備忘" /> <asp:BoundField DataFormatString="{0:yyyy-MM}" DataField="年月份" HeaderText="年月份" /> <asp:BoundField DataField="添加部門" HeaderText="添加部門" /> <asp:BoundField DataField="狀態" HeaderText="狀態" /> </Columns> <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" /> <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" /> <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" /> <EditRowStyle BackColor="#7C6F57" /> <AlternatingRowStyle BackColor="White" /> </asp:GridView> <asp:CheckBox ID="checkpz" AutoPostBack="True" runat="server" OnCheckedChanged="checkpz_CheckedChanged" Text="全選" /> <asp:Button ID="Button1" runat="server" Text="全部批准" OnClick="Button1_Click1" OnClientClick="return confirm('該大量操作無法撤銷!確認通過嗎?');" /> <asp:Button ID="Button2" runat="server" Text="全部拒絕" onclick="Button2_Click" OnClientClick="return confirm('該大量操作無法撤銷!確認通過嗎?');"/> </div> </form></body></html>
cs 檔案代碼
using System;using System.Collections;using System.Configuration;using System.Data;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.HtmlControls;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;using System.Text;using HZU.WQS.web.config;using HZU.DBUtility;using System.Globalization;namespace HZU.WQS.web{ public partial class VerifyFujia : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Session["財務管理"] == null) { Response.Redirect("index.aspx"); } if (!IsPostBack) { DataTable dt = DbHelperSQL.Query("select distinct 部門 from 附加工資表").Tables[0]; foreach (DataRow dr in dt.Rows) { ListItem li = new ListItem(dr["部門"].ToString(), dr["部門"].ToString()); ribu.Items.Add(li); } DataTable dd = DbHelperSQL.Query("select distinct 添加部門 from 附加工資表 where 狀態='未審核'").Tables[0]; foreach (DataRow dr in dd.Rows) { ListItem li = new ListItem(dr["添加部門"].ToString(), dr["添加部門"].ToString()); zt.Items.Add(li); } dt.Dispose(); gvDataBind(); } } private void gvDataBind() { DataSet dt1 = DbHelperSQL.Query("select 個人資訊.姓名, 附加工資表.* from 附加工資表,個人資訊 where 附加工資表.編號=個人資訊.編號 and 附加工資表.狀態='未審核'"+ViewState["whereStr"]); gvSH.DataSource = dt1; gvSH.DataKeyNames = new string[] { "id" }; gvSH.DataBind(); } protected void gvSH_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) { gvSH.PageIndex = e.NewSelectedIndex; gvDataBind(); } protected void gvSH_RowDeleting(object sender, GridViewDeleteEventArgs e) { try { string id = gvSH.DataKeys[e.RowIndex].Value.ToString(); DbHelperSQL.ExecuteSql("update 附加工資表 set 狀態='拒絕', 審核時間='" + DateTime.Now + "' where id=" + id); gvDataBind(); } catch (Exception) { AddInfo.AddJsCode(this, "alert('系統出錯!')"); } } protected void gvSH_RowUpdating(object sender, GridViewUpdateEventArgs e) { try { string id = gvSH.DataKeys[e.RowIndex].Value.ToString(); string date = DateTime.Now.ToString("yyyy-MM", DateTimeFormatInfo.InvariantInfo); DateTime day = DateTime.Parse(date.ToString()); DbHelperSQL.ExecuteSql("update 附加工資表 set 狀態='通過',審核時間='" + day + "' where id=" + id); //try //{ object hh = DbHelperSQL.GetSingle("select 編號 from 附加工資表 where id='" + id + "'"); DataRow dr = DbHelperSQL.Query("select 個人資訊.*,附加工資表.金額 from 個人資訊,附加工資表 where 個人資訊.編號='" + hh + "'").Tables[0].Rows[0]; bool ree = DbHelperSQL.Exists("select 編號 from 附加總工資 where 編號='" + dr["編號"].ToString() + "' and 年月份 ='" + day + "'"); if (!ree) { DbHelperSQL.ExecuteSql("insert into 附加總工資(編號,部門,總額,年月份) values('" + dr["編號"].ToString() + "','" + dr["部門"].ToString() + "','" + dr["金額"].ToString() + "','" + day + "') "); } else { float chan = float.Parse(dr["金額"].ToString()); DbHelperSQL.ExecuteSql("update 附加總工資 set 總額=總額+'" + chan + "' where 編號='" + dr["編號"].ToString() + "'"); } //} //catch (Exception ex) //{ // AddInfo.AddJsCode(this, "alert('" + ex + "')"); //} gvDataBind(); } catch (Exception) { AddInfo.AddJsCode(this, "alert('系統出錯!')"); } } protected void gvSH_PageIndexChanged(object sender, GridViewPageEventArgs e) { gvSH.PageIndex = e.NewPageIndex; gvDataBind(); } protected void Button1_Click1(object sender, EventArgs e) { try { for (int i = 0; i < gvSH.Rows.Count; i++) { CheckBox chk = (CheckBox)gvSH.Rows[i].FindControl("check"); if (chk.Checked == true) { string strSql = "update 附加工資表 set 狀態='通過', 審核時間='" + DateTime.Now + "' where id= '" + gvSH.DataKeys[i].Value + "'"; bool p_update = DbHelperSQL.Exists(strSql); if (!p_update) { Response.Write("<script>批准失敗,請重試!</script>"); } } } gvDataBind(); checkpz.Checked = false; } catch (Exception) { AddInfo.AddJsCode(this, "alert('系統出錯!')"); } } protected void checkpz_CheckedChanged(object sender, EventArgs e) { for (int i = 0; i < gvSH.Rows.Count; i++) { CheckBox chk = (CheckBox)gvSH.Rows[i].FindControl("check"); if (checkpz.Checked == true) { chk.Checked = true; } else { chk.Checked = false; } } } protected void Button2_Click(object sender, EventArgs e) { try { for (int i = 0; i < gvSH.Rows.Count; i++) { CheckBox chk = (CheckBox)gvSH.Rows[i].FindControl("check"); if (chk.Checked == true) { string strSql = "update 附加工資表 set 狀態='拒絕', 審核時間='" + DateTime.Now + "' where id= '" + gvSH.DataKeys[i].Value + "'"; bool p_update = DbHelperSQL.Exists(strSql); if (!p_update) { Response.Write("<script>拒絕失敗,請重試!</script>"); } } } gvDataBind(); checkpz.Checked = false; } catch (Exception) { AddInfo.AddJsCode(this, "alert('系統出錯!')"); } } protected void btnree_Click(object sender, EventArgs e) { ViewState["whereStr"] = ""; ViewState["whereStr1"] = ""; string dep = ribu.SelectedValue; string name = SName.Text; string state = zt.SelectedValue; string sqlStr = "select 附加工資表.*,個人資訊.姓名 from 附加工資表,個人資訊 where 附加工資表.編號=個人資訊.編號 and 附加工資表.狀態='未審核'"; if (dep != "") ViewState["whereStr"] = ViewState["whereStr"] + " and 附加工資表.部門='" + dep + "' "; if (name != "") ViewState["whereStr"] = ViewState["whereStr"] + " and 個人資訊.姓名='" + name + "' "; if (state != "") ViewState["whereStr"] = ViewState["whereStr"] + " and 附加工資表.添加部門='" + state + "' "; DataSet ds = DbHelperSQL.Query(sqlStr + ViewState["whereStr"] + ViewState["whereStr1"]); gvSH.DataSource = ds; gvSH.DataBind(); } }}
1,本頁面是工資的審核頁面,我沒有分析過在同一個資料表裡面通過update變更工資的狀態已表示是否通過審核是否合理,卻感覺沒有必要建立另一個資料表格儲存體這些資訊。
2,背景資料查詢,插入,更改語句過多,反覆的對資料庫進行操作,降低了資料載入啟動並執行速度,本人沒有學習LINQ TO SQL ,所以對00 的資料處理方式不是很瞭解,所以在此基礎上行,只能犧牲效率,完成任何,罪過罪過......
3,頁面的生命週期,因為對頁面輸出產生的事件的順序以及作用概念比較模糊,最初將資料繫結放至判斷語句if內,導致在多項審核的過程中,頁面不會自動回傳,頁面內容不改變,而資料已經上傳資料庫處理,得一師兄指導,放至try內,方才解決問題,從這點可以看出對事件的概念的模糊,罪過罪過...
4,使用者的登入,使用者分為四個等級,雖然密碼通過md5加密,頁面登入過程也沒有用cookies儲存任何使用者資訊,因為考慮到沒有這個必要,只是用session,貌似又增加了伺服器端的壓力,暫不考慮這些, 總感覺安全性低,頁面通過session值判斷是否允許開啟,對網路安全這塊的空白,讓我不知所措。
可以說問題還是挺多的,一步一步,一個腳印!!!