今天來講登入的部分,
首先這是昨天的登入頁
假如登入失敗的畫面
重新輸入資料
假如登入成功的畫面(因為只有文字而已,就不截圖了)
登入成功
這是登入的前端頁面
@{
ViewBag.Title = "Login";
Layout = null;
}
@Styles.Render("~/Content/css")
@Scripts.Render("~/bundles/modernizr")
<form style="margin-left:10px;" method="post" action="">
<h1>請輸入帳號及密碼</h1>
<div>
<span style="color:red">@ViewBag.Msg</span>
</div>
<div class="form-group">
<label for="exampleInputEmail1">帳號</label>
<input type="text" class="form-control" id="Account" name="account" placeholder="輸入帳號" value="">
<small id="emailHelp" class="form-text text-muted">請輸入英數字</small>
</div>
<div class="form-group">
<label for="exampleInputPassword1">密碼</label>
<input type="password" class="form-control" id="Password1" name="password" placeholder="輸入密碼" value="">
</div>
<button type="submit" class="btn btn-primary">登入</button>
<button type="button" class="btn btn-warning" onclick="register()">註冊</button>
</form>
<script>
function register()
{
location.href = "/Home/Index";
}
</script>
這是登入的驗證方式
[HttpPost]
public ActionResult Login(FormCollection post)
{
string account = post["account"];
string password = post["password"];
//驗證密碼
if(db.CheckUserData(account, password))
{
Response.Redirect("~/Home/Home");
return new EmptyResult();
}
else
{
ViewBag.Msg = "登入失敗...";
return View();
}
}
如果登入失敗,留在原頁面,成功則轉到另外一個頁面
這是登入的驗證函式
public bool CheckUserData(string account, string password)
{
try
{
Connect();
string strSQL = "SELECT 1 FROM `userdata` WHERE `account` = '" + account + "' AND `password` = '" + password + "';";
MySqlCommand cmd = new MySqlCommand(strSQL, conn);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
if (reader.Read())
return true;
}
return false;
}
catch(Exception ex)
{
string error = ex.ToString();
return false;
}
finally
{
Disconnect();
}
}
但是這個程式有兩個問題,
1.SQL Injection
2.如果不經過登入頁,也可以直接到 登入成功 畫面
這就是最後兩天要介紹的部分
欲知後事如何,請待下回分解~
--
小弟不才,
如果有謬誤或是要補充的,
都歡迎一起來討論!