Jquery Coldfusion下拉查询

Jquery Coldfusion下拉查询,jquery,sql,coldfusion,coldfusion-9,Jquery,Sql,Coldfusion,Coldfusion 9,因此需要根据用户选择的内容进行查询。带有学校、EID、校长和书籍的下拉菜单作为选项列出。当选择或单击学校时,它将在sql server数据库上进行查询,并插入另一个下拉列表供用户选择学校的所有值。我的英语不是很好,所以这就是我的意思 下拉菜单->如果选择了学校->将填充数据库中的kogod、SIS、人文研究、沃顿商学院等。->如果点击沃顿商学院,它将显示表格。因此,它就像一个基于所选内容的级联下拉列表 那你怎么做呢?密码请给我密码。谢谢 <cfform method="POST" acti

因此需要根据用户选择的内容进行查询。带有学校、EID、校长和书籍的下拉菜单作为选项列出。当选择或单击学校时,它将在sql server数据库上进行查询,并插入另一个下拉列表供用户选择学校的所有值。我的英语不是很好,所以这就是我的意思

下拉菜单->如果选择了学校->将填充数据库中的kogod、SIS、人文研究、沃顿商学院等。->如果点击沃顿商学院,它将显示表格。因此,它就像一个基于所选内容的级联下拉列表

那你怎么做呢?密码请给我密码。谢谢

<cfform method="POST" action=""> <select name="one" required="yes" onchange="this.form.submit()">
<option>Select Type</option>
  <option value="school">School</option>
  <option value="EID">Electronic ID</option>
  <option value="prinical">Principal's Name</option>
  <option value="books">Books Used</option>
</select>
</cfform>

<cfquery name="schoollist" datasource="xxyyzz" dbtype="ODBC">
          select school_title, 
                      from DATABASENAME order by school_title
        </cfquery>

<cfif one.school is "selected?" from the first DROPDOWN then another drown down will pop up with the list of schools >

救命啊。。。请

我写了一个快速的解决方案,你应该能够很容易地扩展到几个层次。目前,它只处理第一层,您可以从第一个下拉列表中选择一个值,并显示下一个值,但您可以多次应用相同的概念

<cfif structKeyExists(form, "one") and form.one neq "">
    <cfswitch expression="#form.one#">
        <cfcase value="school">
            <cfquery name="schoollist" datasource="xxyyzz" dbtype="ODBC">
              select school_title, 
              from DATABASENAME order by school_title
            </cfquery>

            <select name="schoollist" required="yes" onchange="this.form.submit()">
                <cfoutput query="schoollist">
                    <option value="#schoollist.school_title#">#schoollist.school_title#</option>
                </cfoutput>
            </select>
        </cfcase>

        <cfcase value="EID">
            <cfquery name="eidlist" datasource="xxyyzz" dbtype="ODBC">
              select eid, 
              from DATABASENAME order by eid
            </cfquery>

            <select name="eidlist" required="yes" onchange="this.form.submit()">
                <cfoutput query="eidlist">
                    <option value="#eidlist.eid#">#eidlist.eid#</option>
                </cfoutput>
            </select>
        </cfcase>

        <cfcase value="principle">
            <cfquery name="principle" datasource="xxyyzz" dbtype="ODBC">
              select principle, 
              from DATABASENAME order by principle
            </cfquery>

            <select name="principleList" required="yes" onchange="this.form.submit()">
                <cfoutput query="principle">
                    <option value="#principle.principle#">#principle.principle#</option>
                </cfoutput>
            </select>
        </cfcase>

        <cfcase value="books">
            <cfquery name="books" datasource="xxyyzz" dbtype="ODBC">
              select books, 
              from DATABASENAME order by books
            </cfquery>

            <select name="books" required="yes" onchange="this.form.submit()">
                <cfoutput query="books">
                    <option value="#books.books#">#books.books#</option>
                </cfoutput>
            </select>
        </cfcase>
    </cfswitch>
<cfelse>
    <cfform method="POST" action="#cgi.script_name#"> 
        <select name="one" required="yes" onchange="this.form.submit()">
          <option>Select Type</option>
          <option value="school">School</option>
          <option value="EID">Electronic ID</option>
          <option value="prinical">Principal's Name</option>
          <option value="books">Books Used</option>
        </select>
    </cfform>
</cfif>
您也可以通过这样做来简化代码,但我目前没有能力对其进行测试,因此您可能需要使用它才能使其正常工作:

    <cfif structKeyExists(form, "dropdown") and form.dropdown neq "">
    <!--- prevent sql injection, also serves to convert text in the database to valid table and column names for the next query--->
    <cfset sanitizedString = rereplacenocase(form.dropdown,'[^a-z_]','','all')>
    <!--- get data for drop down based on user selection --->
    <cfif structKeyExists(form, "rootType")>
        <cfset tableName = rereplacenocase(form.rootType,'[^a-z_]','','all')>
        <cfquery name="getInfo" datasource="mysql">
            SELECT * 
            FROM #tableName#
            WHERE #tableName# = <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#form.dropdown#">
        </cfquery>

        <cfif getInfo.recordCount gt 0>
            <cfdump var="#getInfo#">
        <cfelse>
            No records were found.
        </cfif>
    <cfelse>
        <cfquery name="getDropDownData" datasource="mysql">
          select #sanitizedString#
          from #sanitizedString# order by <cfqueryparam cfsqltype="CF_SQL_VARCHAR" value="#form.dropdown#">
        </cfquery>

        <cfform method="POST" action="#cgi.script_name#">
            <input type="hidden" name="rootType" value="<cfoutput>#form.dropdown#</cfoutput>">
            <select name="dropdown" required="yes" onchange="this.form.submit()">
                        <option value="">Select Value</option>
                <cfoutput query="getDropDownData">
                    <cfset val = getDropDownData["#sanitizedString#"]>
                    <option value='#val#'>#val#</option>
                </cfoutput>
            </select>
        </cfform>
    </cfif>
    <!--- redisplay the form --->

<cfelse>
    <cfform method="POST" action="#cgi.script_name#"> 
        <select name="dropdown" required="yes" onchange="this.form.submit()">
          <option>Select Type</option>
          <option value="school">School</option>
          <option value="EID">Electronic ID</option>
          <option value="principal">Principal's Name</option>
          <option value="books">Books Used</option>
        </select>
    </cfform>
</cfif>

这和你的上一个问题有什么不同?丹说,我看不出有任何明显的区别。具体来说:请给我代码-不。堆栈溢出不是代码编写服务!回滚更改以保留接受答案的上下文。如果你有一个新问题,请打开一个新的线程。你可能想在发帖前读一读,我知道上面只是一个例子,但是。。最好不要在sql中使用原始客户机值,即使在示例中也是如此。不熟悉web应用程序或CF的人可能会按原样使用该示例,但没有意识到他们刚刚使用以下命令将其db暴露于sql注入:select form.one from DATABASENAME order by form.one。更新了答案的第二部分,以更好地防止sql注入。Jason,我了解了第一层。你怎么做第二层。例如如果沃顿被选中,它将做另一个查询,并给出学校的所有细节。你能帮帮我吗。我正在学习CF,但它对我来说没有什么影响。我修改了答案的第二部分,使之更深入一些。它会做出一些假设,比如您的表名与第一个选择框中的值相同,并且您要查找的信息也包含在同一个表中。例如,如果您选择沃顿,它将执行select*FROM SHOOL WHERE FAILE='WARTON'。你做的越复杂,这种解决方案就越不适合。我建议通过ajax调用函数来实现这一点,该函数可以得到您想要的结果,正如问题顶部链接的答案所示。