iT邦幫忙

0

關於JS與AJAX在MVC中button按了沒反應問題

  • 分享至 

  • xImage

先上code
前端

<label>借用編號</label>
<input class="number" type="text" value="@DN" id="DN" disabled />
<label>租借使用者</label>
<input class="inputname" type="text" value="@username()" id="username" disabled />
<label>租借日期</label>
<input class="expire" type="text" value="@DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")" id="today" disabled />
<label>歸還日期</label>
<input class="inputname" type="date" id="lenddate" />
<label>租借用途</label>
<input class="text-bg-danger" type="text" id="reason" />
<button class="buy" onclick="sendData()">提交申請</button>

<script type="text/javascript">
    function sendData() {
        var DN = document.getElementById('DN').value;
        var username = document.getElementById('username').value;
        var today = document.getElementById('today').value;
        var lenddate = document.getElementById('lenddate').value;
        var reason = document.getElementById('reason').value;
        var SQLCommand = "insert into MIS_Lend_table values ('"today + "','" + DN + "','" + lenddate + " 17:00:00','" + username + "'," + "null,null,null,'" + reason + "')";
        $.ajax({
            type: 'POST',
            url: '/Home/LendSQL',
            data: { SQLCommand: SQLCommand },
            success: function (result) {
                console.log(result);
            }
        });
    }
</script>

後端

//HomeController
[HttpPost]
public IActionResult LendSQL(string SQLCommand)
{
    SQLs(SQLCommand);
    return Redirect("MIS");
}

public void SQLs(string SQLCommand)
{
    SqlConnection dataConnection = new SqlConnection();
    SqlCommand mySqlCmd = new SqlCommand(SQLCommand, dataConnection);
    try
    {
        dataConnection.ConnectionString = Resources.SqlConnectionString;
        dataConnection.Open();
        mySqlCmd.ExecuteNonQuery();
        dataConnection.Close();
    }
    catch (Exception e)
    {
    }
    finally
    {
        mySqlCmd.Cancel();
        dataConnection.Close();
        dataConnection.Dispose();
    }
}

想請教各位我是不是哪個地方邏輯理解錯誤
還是語法使用錯誤
懇請指教感謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

1
allenlwh
iT邦高手 1 級 ‧ 2022-12-20 13:16:30
最佳解答
  1. 在public IActionResult LendSQL(string SQLCommand) 設中斷點,
    看看有沒有進來執行,再逐一往下執行;如果沒有,表示前端的呼叫沒有成功;
    如果有,看看往下是哪一行發生錯誤了。

2.直接把sql command寫在前端,這要考慮安全性的問題。

目前是發現沒有執行。所以焦點還是在前端的部分不知道哪裡寫錯...
安全性的話我最近才剛開始寫網站的前後端交互,想請益如何寫比較能保證安全性?

笑死原來是js中SQLCommand 的string 中today前面少一個 +
媽耶

froce iT邦大師 1 級 ‧ 2022-12-20 13:43:40 檢舉

哇!直接開放SQL injection,這個屌。

  1. 一般來說,都是只傳參數到後端,然後後端藉由參數化查詢去避免組合字串,避開SQL injection。
  2. 真的要開放的話,通常會限制使用者能存取的權限,讓使用者只能用select並且只有某幾份表可以用。
1
poison3804
iT邦新手 4 級 ‧ 2022-12-20 14:19:23

SQL語法基本上是不會放在前端來組,
因為這樣使用者可以隨意更改你的語法,
等同於你的資料庫跟裸奔是沒什麼兩樣。

如果你已經掌握了可以傳資料到後端,
那SQL這部分你就可以改成只傳username、日期等等的參數到後端,
語法就只在後端組,就會多一點安全性了。

題外話,從程式看起來你是有使用jquery的樣子

//js原始寫法
var DN = document.getElementById('DN').value;
var username = document.getElementById('username').value;

//jquery寫法
var DN = $('#DN').val();
var username = $('#username').val();

練習寫原本的js也滿不錯的,不過如果有用jquery的話,
用jquery的語法寫會快速很多,也滿值得練習的。

了解,我去練習看看,我是直接把問題給Chat.OpenAI寫code再去改的

我要發表回答

立即登入回答