Coldfusion Dropdown Query

0

Поэтому нужно сделать запрос на основе того, что выбрано пользователем. Выпадающее меню со Школой, EID, Principal и Books указывается в качестве параметров. Когда выбрано или щелкнуло "Школа", он выполнит запрос в базе данных sql-сервера и бросит в другой раскрывающийся список, чтобы пользователь мог выбрать все ценности школы. Мой английский не настолько велик, так что я имею в виду

Dropdown → Если выбрана школа → kogod, SIS, Гуманные исследования, Школа бизнеса Whartons и т.д. (Из базы данных). → Если щелкнуть Wharton, он отобразит таблицу. Так что это похоже на каскадное раскрывающееся меню, основанное на том, что выбрано.

Итак, как вы это делаете? Код, пожалуйста, дайте мне код. Благодаря

<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 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 >

Помоги пожалуйста

  • 3
    Чем это отличается от вашего последнего вопроса?
  • 0
    Что сказал Дэн, я не вижу никакой очевидной разницы с последним вопросом . И конкретно: «Пожалуйста, дайте мне код» - Нет. Переполнение стека не является службой написания кода!
Показать ещё 1 комментарий
Теги:
coldfusion
coldfusion-9

1 ответ

0
Лучший ответ

Я написал быстрое решение, которое вы должны иметь возможность расширить до нескольких уровней достаточно глубоко. В настоящее время он просто обрабатывает первый слой, в котором вы выбираете значение из первого раскрывающегося списка, и оно показывает вам следующее, но вы можете применить одну и ту же концепцию несколько раз.

<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 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 Name</option>
          <option value="books">Books Used</option>
        </select>
    </cfform>
</cfif>
  • 1
    Я понимаю, что выше это только пример, но .. лучше не использовать необработанные значения клиента в SQL, даже в качестве примера. Кто-то, незнакомый с веб-приложениями или CF, может использовать пример «как есть», не понимая, что он только что выставил свою БД на SQL-инъекцию, используя: select #form.one# from DATABASENAME order by #form.one# .
  • 0
    Обновлена вторая часть ответа для лучшей защиты от SQL-инъекций.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню