2017-06-05 4 views
1

Ich habe versucht, einen Select-Option Wert bei Änderung mit klassischen ASP erstellen, aber es hat nicht funktioniert. Kein Fehler, aber wenn ich sehe, erscheint nichts von der zweiten Auswahl.Wählen Sie/Option/Wert bei Änderung mit Classic ASP

Ich möchte Student Name aus der ersten Auswahlfeld auswählen, wenn es übereinstimmt, dann zeigt das zweite Feld Kursnamen und das dritte Feld zeigt Semester.

Ich möchte Studentennamen und StudentID in DB speichern.

Kann jemand helfen? in Ihrer SQL-Anweisung

Students Tisch

StudentID Firstname Lastname 
------------------------------- 
01   AAA   LN1 
02   BBB   LN2 
03   CCC   LN3 

Klasse Tabelle

Course CourseID StudentID Semester 
------------------------------------- 
History C01  01  Spring 
History C01  01  Summer 
Math  C02  02  Spring 
Math  C02  02  Fall   

-Code

  <%   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 
      %> 
+0

"Subselect" ist kein Standard-HTML-Begriff, daher ist es schwer herauszufinden, was Sie meinen. Könnten Sie bitte die Frage bearbeiten und ein Beispiel für das erwartete HTML bereitstellen? –

+0

Ich habe den Titel geändert. Vielen Dank. –

+0

Möchten Sie das DOM im Browser von einem serverseitigen Skript aus manipulieren? –

Antwort

0

Sie falschen Wert verwenden.

Sie sollten den Namen des ersten Dropdown-Elements verwenden, nicht den Namen des Datenbankfelds.

Verwenden Sie auch Parameter besser, nicht den Wert direkt injizieren, da dies den Benutzer die Kontrolle über Ihre Datenbank und möglicherweise den ganzen Server übernehmen kann. (Um mehr zu erfahren, lesen Sie über SQL-Injection-Angriffe.)

So würde richtige SQL sein:

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 

Achten Sie auf die Linie oRs.Open strSQL, myConn aus dem Code zu entfernen, wenn diese mit. Wie Sie sehen, habe ich Request.Form("StudentID") zu Request.Form("Students") geändert, und jetzt sollte die Abfrage Ergebnisse zurückgeben.