2014-10-07 177 views
0

選擇我有一個表稱爲tbl_Teacher數據爲:從下拉列表填充第二類

Teacher_ID Lastname Firstname Department 
1    aaa   Joe   Math 
2    bbb   Jenny  History 
3    ccc   Mark  Math 

我創建了一個ASP SELECT。如果從下拉列表中選擇「aaa,標記」,則會在第二個下拉列表中自動選擇「匹配」。然而,在我選擇Last和Firstname後它沒有任何價值;它顯示沒有找到部門。

我做錯了什麼?誰能幫忙?

非常感謝。

下面是代碼:

<% Set rsSelect = Server.CreateObject("adodb.recordset") 
    strSQL = "SELECT Lastname, Firstname, Teacher_ID FROM tbl_Teacher;" 
    rsSelect.Open strSQL, strCon 
    Dim strID 
    strID = Request.QueryString("Teacher_ID") 
    if not rsSelect.eof then %> 
     <select name="Name" onChange="this.form.action='Teacher.asp';this.form.submit();"> 
      <option value="1">Select a Teacher</option> 
      <% do until rsSelect.eof %> 
       <option value="<%= rsSelect(0) %>" <% if trim(request.Form("Name")) = trim(rsSelect(0)) then response.write " selected "end if %>><%= rsSelect("Lastname") %>, <%= rsSelect("Firstname") %></option> 
       <% rsSelect.MoveNext 
      loop  %> 
     </select> 
     <% end if 

    if trim(request.Form("Name")) <> "" then 
     strSQL = "SELECT Department FROM tbl_Teacher WHERE Teacher_ID = '" & Request.Form("strID") & "';" 
     Set rsSelect = Server.CreateObject("adodb.RecordSet") 
     rsSelect.Open strSQL, strCon 
     if not rsSelect.eof then %> 
      <select name="Department"> 
       <% do until rsSelect.eof  %> 
        <option value="<%= rsSelect("Department") %>"><%= rsSelect("Department") %></option> 
        <% rsSelect.MoveNext 
       loop %> 
      </select> 
      <% else %> 
       <i>No Department found</i> 
      <% end if 
     else 
      response.write "<i>Select a Department</i>" 
     end if %> 

回答

0

你會好得多利用teacher_id比一個名稱或代碼:

<%Set rsSelect = Server.CreateObject("adodb.recordset") 
strSQL = "SELECT Teacher_ID, Lastname, Firstname FROM tbl_Teacher;" 
rsSelect.Open strSQL, strCon, 1, 1 
Dim strID 
strID = Request.QueryString("Teacher_ID") 
if not rsSelect.eof then %> 
    <select name="Name" onChange="this.form.action='Teacher.asp';this.form.submit();"> 
     <option value="1">Select a Teacher</option> 
     <% do until rsSelect.eof %> 
      <option value="<%= rsSelect(0) %>" <% if request.Form("teacherId") = rsSelect(0) then response.write " selected "end if %>><%= rsSelect("Lastname") %>, <%= rsSelect("Firstname") %></option> 
      <% rsSelect.MoveNext 
     loop  %> 
    </select> 
    <% end if 

你確實有在下面的代碼段的另一個問題但是,基於你從數據庫中恢復的東西。我會建議重新考慮你的設計,因爲你在這裏會讓自己感到困惑,並在以後將代碼打開到大量的錯誤。嘗試將您的Departments分隔成自己表格中簡潔的值列表;這將防止任何人稍後輸入不想要的或拼寫錯誤的部門。然後你需要下面來代替你有什麼...

if request.Form("teacherId")) <> "" then 
    Set rsSelect = Server.CreateObject("adodb.RecordSet") 
    strSQL = _ 
     "SELECT " & _ 
      "tbl_department.departmentId, " & _ 
      "tbl_department.departmentName, " & _ 
      "tbl_teacher.department " & _ 
     "FROM " & _ 
      "tbl_departments " & _ 
      "LEFT JOIN " & _ 
      "tbl_teacher " & _ 
       "ON tbl_departments.departmentId = tbl_teacher.department AND " & _ 
        "tbl_teacher.teacherId = " & request.Form("teacherId") 
    rsSelect.Open strSQL, strCon 
    if not rsSelect.eof then %> 
     <select name="Department"> 
      <% do until rsSelect.eof  %> 
       <option <%if rsSelect("department")&""<>"" then response.write(" selected ")%> value="<%= rsSelect("Department") %>"><%= rsSelect("Department") %></option> 
       <% rsSelect.MoveNext 
      loop %> 
     </select> 
     <% else %> 
      <em>No Department found</em> 
     <% end if 
    else %> 
     <em>Select a Department</em> 
    <% end if %> 

無論其...沒有與此SQL安全性相當一個問題 - 上面的代碼讓你大開SQL injection attacks,並應要慎重考慮。

+0

它像魅力一樣工作。它是內聯網,所以不用擔心SQL注入攻擊。非常感謝。 – 2014-10-07 15:21:16

+0

只有一個問題。第二個下拉列表填充時未選擇「選定」。例如,當我選擇「aaa,Joe」時,然後「數學」部門選擇第二個選擇。但是,「選擇部門」顯示在第一個選擇上,而不是「aaa,Joe」。如何在第二次選擇填充後將其更改爲保持選定值?謝謝。 – 2014-10-07 15:40:05

+0

@JennyTran:你的意思是當第一個'select'填充?如果是這樣,那麼這是更復雜,涉及JavaScript ... – Paul 2014-10-08 07:54:49