Seleccione del menú desplegable que completa la segunda categoría
Frecuentes
Visto 1,079 equipos
0
Tengo una mesa llamada tbl_Teacher
con datos como:
Teacher_ID Lastname Firstname Department
1 aaa Joe Math
2 bbb Jenny History
3 ccc Mark Math
Creé un ASP SELECT
. Si selecciono "aaa, Mark" de la lista desplegable, entonces "Coincidencia" se seleccionará automáticamente en la segunda lista desplegable. Sin embargo, no toma ningún valor después de seleccionar Apellido y Nombre; muestra No se encontró ningún departamento.
¿Qué hice mal? ¿Alguien puede ayudar?
Muchas gracias.
Aquí está el código:
<% 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 %>
1 Respuestas
0
Sería mucho mejor utilizar el teacher_id
que un nombre o código:
<%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
Sin embargo, tiene otro problema en el siguiente fragmento de código, basado en lo que está recuperando de la base de datos. Recomendaría repensar su diseño, ya que se está confundiendo aquí y abriendo su código a una multitud de errores más adelante. Trate de separar su Departments
en una lista sucinta de valores en su propia tabla; esto evitará que nadie ingrese a departamentos no deseados o mal escritos más adelante. Entonces necesitaría lo siguiente para reemplazar lo que tiene...
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 %>
SIN EMBARGO... Aquí hay un gran problema con la seguridad de SQL: el código anterior lo deja abierto a Ataques de inyección SQL, y debe ser considerado cuidadosamente.
Respondido 07 Oct 14, 15:10
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas select asp-classic or haz tu propia pregunta.
Funcionó a las mil maravillas. Es una intranet, así que no te preocupes por los ataques de inyección SQL. Muchas gracias. - Jenny Tran
Solo hay un problema. El "seleccionado" no se selecciona cuando se completa el segundo menú desplegable. Por ejemplo, cuando selecciono "aaa, Joe", entonces el departamento de "Matemáticas" selecciona en la segunda selección. Sin embargo, "Seleccione un departamento" aparece en el primer Select, en lugar de "aaa, Joe". ¿Cómo lo cambio para mantener el valor seleccionado después de que se complete la segunda selección? Gracias. - Jenny Tran
@JennyTran: ¿Quieres decir cuando la primera
select
puebla? Si es así, entonces esto es mucho más complicado e involucra JavaScript... - PaulQuiero decir DESPUÉS de que se complete el segundo SELECCIONAR. El primer SELECCIONAR debe mantener el valor que seleccioné previamente. - Jenny Tran
Me lo imaginé. Agregué Trim(request.Form("teacherId")) y funcionó. Gracias. - Jenny Tran