Я попытался создать значение параметра выбора при изменении с помощью классического ASP, но это не сработало. Нет ошибки, но когда я смотрю, ничего не всплывает со второго выбора.
Мне нравится выбирать имя студента из первого окна выбора, если оно совпадает, а затем второе поле показывает название курса, а в третьем поле отображается семестр.
Мне нравится хранить имена студентов и StudentID в DB.
Может ли кто-нибудь помочь?
Стол для студентов
StudentID Firstname Lastname
-------------------------------
01 AAA LN1
02 BBB LN2
03 CCC LN3
Таблица классов
Course CourseID StudentID Semester
-------------------------------------
History C01 01 Spring
History C01 01 Summer
Math C02 02 Spring
Math C02 02 Fall
Код
<% Set oRs = Server.CreateObject("adodb.recordset")
strSQL = " SELECT StudentID, Firstname, Lastname FROM Students Where StudentID = '" & Request.ServerVariables("LOGON_Student") & "'"
oRs.Open strSQL, myConn
sName = oRs("Lastname") & ", " & oRs("Firstname")
if not oRs.eof then %>
<select name="Students" id="selectStudent" onChange="this.form.action='default.asp';this.form.submit();">
<option value="<%= oRs(0) %>" <% if trim(request.Form("Students")) = trim(oRs(0)) then response.write " selected "end if %>><%= sName %></option>
<option value="<%= oRs("StudentID") %>" hidden></option>
</select>
<% end if
%>
<% if request.Form("Students") <> "" then
strSQL = " SELECT Course FROM Class WHERE StudentID = '" & request.Form("StudentID") & "'"
Set oRs = Server.CreateObject("adodb.RecordSet")
oRs.Open strSQL, myConn
if not oRs.eof then %>
<select name="Class" id="selectClass" onChange="this.form.action='default.asp';this.form.submit();">
<% do until oRs.eof %>
<option value="<%= oRs(0) %>" <% if trim(request.Form("Class")) = trim(oRs(0)) then response.write " selected "end if %>><%= oRs(0) %></option>
<% oRs.MoveNext
loop %>
</select>
<% end if
end if
%>
<% if request.Form("Class") <> "" then
strSQL = " SELECT Semester FROM Class WHERE Course = '" & request.Form("Course") & "'"
Set oRs = Server.CreateObject("adodb.RecordSet")
oRs.Open strSQL, myConn
if not oRs.eof then %>
<select name="Class" id="selectClass" onChange="this.form.action='default.asp';this.form.submit();">
<% do until oRs.eof %>
<option value="<%= oRs(0) %>" <% if trim(request.Form("Class")) = trim(oRs(0)) then response.write " selected "end if %>><%= oRs(0) %></option>
<% oRs.MoveNext
loop %>
</select>
<% end if
end if
%>
Вы используете неправильное значение в своей инструкции SQL.
Вы должны использовать имя первого выпадающего элемента, а не имя поля базы данных.
Кроме того, вы действительно лучше используете параметры, а не вводите значение напрямую, так как это может позволить пользователю взять под контроль вашу базу данных и, возможно, весь сервер. (Чтобы узнать больше, читайте об атаках SQL Injection.)
Итак, правильный SQL:
strSQL = "SELECT Course FROM Class WHERE StudentID = ?"
Set oCommand = Server.Createobject("ADODB.Command")
Set oCommand.ActiveConnection = myConn
oCommand.CommandText = strSQL
oCommand.Parameters.Append(oCommand.CreateParameter("StudentID", 3, , , Request.Form("Students")) )
Set oRS = oCommand.Execute
Обязательно удалите строку oRs.Open strSQL, myConn
из вашего кода при ее использовании.
Как вы видите, я изменил Request.Form("StudentID")
на Request.Form("Students")
, и теперь запрос должен вернуть результаты.