老婆使用說明書——注冊系統的邏輯與結構


QQ交流群:13033480

【品名】妻子
【俗稱】媳婦兒
【通用名】老婆
【英文名】wife
【化學名稱】已婚女性
【成分】水、蛋白質、脂肪、核糖核酸、碳水化合物以及少量礦物質,氣味幽香。
【理化性質】酸性;可分為一價(嫁)、二價(嫁)、三價(嫁)……n價(嫁)。易溶於密語、甜言;遇鑽石、名車、豪宅熔點降低,難溶於白丁。
【性狀】本品為可樂狀凹凸異性片,表面光潔,塗有各種化妝品、對鑽石、鉑金有強烈的親和力;害羞時泛紅,生氣時泛綠,隨時間推移表面會出現黃斑,起皺,但不影響繼續使用。
【功能主治】主治單身恐懼症,對失戀者和相思病有明顯效果,亦可用於燒淘洗買、帶孩子。
【副作用】氣管炎、耳根軟、視疲勞、行為受阻等。嚴重不良反應者,可致皮肉損傷。
【用法用量】一生一片。
【禁忌症】公開服用兩片或兩片以上
【注意事項】
1、腎功能不全者慎用
2、請控制每日用量,如身體出現不適應症狀應適當控制頻次;
3、服用本品時如同時服用其他葯品請咨詢生產企業,否則后果自負;
【規格】幾十千克志幾百千克,片重超標不影響使用,一般以45kg為最佳。
【貯藏】常溫下保存。避免與成年女性、單獨帥哥相處。嚴禁在外過夜,應放到男人不易接觸到的位置保存。
【包裝】各種時裝、鞋帽、首飾、手袋,隨季節變化更換。
【有效期】終生有效。
【批准文號】見鑽石購買發票號碼
【生產日期】同身份證出生年月日
【生產企業】岳父岳母(僅針對於岳父岳母作風正派)。
本產品質量三包,如出現質量問題請與當地民政局聯系。

 

這是網上非常熱的一個博文,看完以后,我拍案驚起,這TMD才是真正的面向對象的思想嘛......

這,才是真正地“搞對象”嘛......

人家敢於面對、勇於面對、以娛樂的精神面對慘淡的對象嘛......

人家知道,搞對象,最重要的,是把對象干什么用的先搞清楚嘛......

人家知道,先把對象玩爛了,就沒有搞不好的對象嘛......

我絕對想象不出來,不遠的將來,這個對象,不能給他創造個人“類”出來....

 

我想,作者這家伙,不學編程,那是相當的可惜了…

 

前面注冊的代碼,很多網友看后都生氣了,后果很嚴重,都急吼吼地要來Sql注入了。

很多小盆友,包括本大人,N小時前,也不知道還有注入一說。感謝網友們的不吝賜教,本大人現學現賣,科普一下吧,講最簡單的,你在用戶名文本框中輸入1' or '1'='1 ,密碼隨意,所謂的登錄系統,就形同虛設……

 

解決這個問題的方法有很多,其中,一個重要的方法,就是參數化查詢。

 

參數化查詢就是在訪問數據庫時,在需要填入數值或數據的地方,使用參數 (Parameter類) 來給值。在使用參數化查詢的情況下,數據庫服務器不會將參數的內容視為SQL指令的一部份來處理,而是在數據庫完成SQL指令的編譯后,才套用參數運行,因此就算參數中含有指令,也不會被數據庫運行。

Parameter這么厲害?想不想討來做老婆?幫你看看家門,河東獅吼,嚇退十萬注入客??

還是讓我們先附庸風雅,寫一個SqlParameter使用說明書吧:

【家住何方(程序集名稱)】system.data.dll

【姓甚(命名空間)】System.Data.SqlClient
【名誰(名稱)】SqlParameter
【祖父母】System.Object
【父母】System.MarshalByRefObject

【主要功能】可單獨或做成數組,存放、傳遞SqlCommand的參數或參數組,當然是防止駭客Sql注入
【主要缺點】不能生育,無法繼承此類
【備注】參數名稱不區分大小寫

【生產日期】new的那一刻
【有效期】招之即來,揮之即去,用完自動消失
【使用方法】參考下面示例程序

 

protected void btnRegist_Click(object sender, EventArgs e)
{
    string strConnection = ConfigurationManager.ConnectionStrings["NetShopConnString"].ConnectionString;
    string cmdText = "INSERT INTO Users(Username,Password,Name,Sex,Age,Phone,Email,QQ) values(@Username,@Password,@Name,@Sex,@Age,@Phone,@Email,@QQ)";

    string username = txtUserName.Text;
    string password = txtPassword.Text;
    string name = txtName.Text;
    string sex = radlSex.SelectedValue;
    int age = int.Parse(txtAge.Text);
    string phone = txtPhone.Text;
    string email = txtEmail.Text;
    string qq = txtQQ.Text;

    SqlParameter[] parms ={
        new SqlParameter("@UserName", SqlDbType.VarChar, 20),
        new SqlParameter("@Password", SqlDbType.VarChar, 20),
        new SqlParameter("@Name", SqlDbType.VarChar, 20),
        new SqlParameter("@Sex", SqlDbType.VarChar, 2),
        new SqlParameter("@Age", SqlDbType.Int),
        new SqlParameter("@Phone", SqlDbType.VarChar, 20),
        new SqlParameter("@Email", SqlDbType.VarChar, 50),
        new SqlParameter("@QQ", SqlDbType.VarChar, 20)};

    parms[0].Value = username;
    parms[1].Value = password;
    parms[2].Value = name;
    parms[3].Value = sex;
    parms[4].Value = age;
    parms[5].Value = phone;
    parms[6].Value = email;
    parms[7].Value = qq;


    SqlCommand cmd = new SqlCommand();
    SqlConnection conn = new SqlConnection(strConnection);
    try
    {
        if (conn.State != ConnectionState.Open)
            conn.Open();

        cmd.Connection = conn;
        cmd.CommandType = CommandType.Text;
        cmd.CommandText = cmdText;

        foreach (SqlParameter parm in parms)
            cmd.Parameters.Add(parm);

        cmd.ExecuteNonQuery();
    }
    catch
    {
        Response.Redirect("ErrorMessage.aspx");
    }
    finally
    {
        conn.Close();
    }

    Response.Redirect("Login.aspx");
}

 

這段代碼,使用邏輯,您熟悉吧?

實現邏輯,就一句話,把注冊界面輸入的參數接收下來,插入到數據庫的表格Users中,然后跳轉到登錄界面;

除了SqlParameter類,沒發現太陌生的面孔吧?

 

認識、熟悉、掌握和使用一個類,最主要的,就是掌握這個類是干什么的,和怎么使用,而這兩點中,類是干什么的,又是最最重要的,當你知道這個類是干什么的時候,怎么使用,往往就是不言而喻了…

 

聲明一點吧:現在這段代碼,因為主要是學習最基本的數據庫訪問技術,所在,在界面上能省即省,沒有加驗證控件,大家拍磚,別往這兒拍哈……

版權所有©2012,WestGarden.歡迎轉載,轉載請注明出處.更多文章請參閱博客http://www.cnblogs.com/WestGarden/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM