首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于搜索数据库的多个选择框

用于搜索数据库的多个选择框
EN

Stack Overflow用户
提问于 2014-03-25 07:53:35
回答 2查看 858关注 0票数 0

我用选择框将代码更改为以下内容:

代码语言:javascript
复制
<html>

<head>
<script type="text/javascript">

function loadXMLDoc() {
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
} else {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

xmlhttp.onreadystatechange=function() {
    if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.frm.modelSelection.innerHTML=xmlhttp.responseText;
    }
}

var makevalue=document.frm.makeSelection.value;

xmlhttp.open("GET","http://www.autodeal.co.za/newsite/model-selection?ajaxmake="+‌​makevalue,true);
xmlhttp.send();
}

</script>
</head>

<body>

<?php 

$dbName = "F:/Domains/autodeal/autodeal.co.za/wwwroot/newsite/db/savvyautoweb.mdb";

// Throws an error if the database cannot be found
if (!file_exists($dbName)) {
    die("Could not find database file.");
}

// Connects to the database
// Assumes there is no username or password
$conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', '');

?>

<form action="index.php?option=com_content&view=article&id=99" method="post" name="frm">

<select name="makeSelection" onchange="loadXMLDoc()">

<?php
//Loads the Makes from the database into a dropdown
$resultMake = odbc_exec($conn, "SELECT DISTINCT Make FROM Vehicle ORDER BY Make") or die (odbc_errormsg());
while ($rowMake = odbc_fetch_array($resultMake)) {
    echo "<option value='$rowMake[Make]'>$rowMake[Make]</option>";

}

?>
</select><br />

    <select name="modelSelection">

    </select><br />

    <select name="yearSelection">
        <option>2004</option>
        <option>2005</option>
        <option>2006</option>
        <option>2007</option>
        <option>2008</option>
        <option>2009</option>
        <option>2010</option>
        <option>2011</option>
        <option>2012</option>
        <option>2013</option>
        <option>2014</option>
    </select><br />

    <select name="priceSelection">
        <option>< 5000</option>
        <option>5000 - 20 000</option>
        <option>20 000 - 50 000</option>
        <option>50 000 - 100 000</option>
        <option>100 000 - 200 000</option>
        <option>200 000 - 300 000</option>
        <option>300 000 - 400 000</option>
        <option>400 000 - 500 000</option>
        <option>50 000 - 1 000 000</option>
        <option>> 1 000 000</option>
    </select>

<input type="submit" name="submit" value="Go">
</form>

</body>
</html>

嗨,

我已经更新了代码以反映下面的答案,但是现在,当您进行第一个选择时,模型选择框仍然是空的。

modelSelection.php

代码语言:javascript
复制
<?php
        $dbName = "F:/Domains/autodeal/autodeal.co.za/wwwroot/newsite/db/savvyautoweb.mdb";

        // Throws an error if the database cannot be found
        if (!file_exists($dbName)) {
            die("Could not find database file.");
        }

        $conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', '');
        //loads the models based on the makes selection into a dependant dropdown
        if (isset($_REQUEST['ajaxmake'])) {

            $resultModel = odbc_exec($conn, "SELECT Model FROM Vehicle WHERE Make = '".$_REQUEST['ajaxmake']."'") or die (odbc_errormsg());

                while ($rowModel = odbc_fetch_array($resultModel)) {

                    echo "<option value='$rowModel[Model]'>$rowModel[Model]</option>";
                    die(); //I'm not sure where to put this because I assume this is the reason why this selection must be first
                }

        }

?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-25 09:26:12

据我所见,问题是在select按钮中加载整个请求响应文本。我看过您的请求响应,它用加载的模型响应整个页面,因此基本上是获取所有选项并将它们加载到模型选择框中,因为您要在模型选择框中插入整个页面。

这里有多个选项:您可以创建一个只加载模型选项的页面,因此有一个只有以下部分的文件:

代码语言:javascript
复制
            $dbName = "F:/Domains/autodeal/autodeal.co.za/wwwroot/newsite/db/savvyautoweb.mdb";

            // Throws an error if the database cannot be found
            if (!file_exists($dbName)) {
                die("Could not find database file.");
            }

            $conn = odbc_connect("Driver={Microsoft Access Driver (*.mdb)};Dbq=$dbName", '', '');
            //loads the models based on the makes selection into a dependant dropdown
            if (isset($_REQUEST['ajaxmake'])) {

                $resultModel = odbc_exec($conn, "SELECT Model FROM Vehicle WHERE Make = '".$_REQUEST['ajaxmake']."'") or die (odbc_errormsg());

                    while ($rowModel = odbc_fetch_array($resultModel)) {

                        echo "<option value='$rowModel[Model]'>$rowModel[Model]</option>";
                    }

            }

并将通过ajax调用的页面更改为指向该页面:

代码语言:javascript
复制
 xmlhttp.open("GET","newpage.php?ajaxmake="+ makevalue,true);

另一个选项,我建议您查看一些javascript库,比如jQuery,它具有简化您的工作的功能。

如果包含jQUery库,将选择名称添加为id="makeSelection“和id="modelSelection”,则可以编写如下所示的javascript函数:

代码语言:javascript
复制
jQuery(document).ready(function(){
     jQuery("#makeSelection").change(function(){
         jQuery("#modelSelection").load("?ajaxmake="+ makevalue + #modelSelection option");
     });
 });

顺便说一下!请注意,您的sql查询可能存在巨大的安全性问题,因为人们可以通过ajaxmake变量攻击您,并截断/删除您的表或其他任何内容。我建议您对来自您的请求的数据进行消毒和验证,特别是如果您在互联网上发布了一些敏感数据,如数据库表!如果您想了解更多关于SQL注入(如何调用此安全性问题)的信息:如何防止PHP中的SQL注入?

票数 1
EN

Stack Overflow用户

发布于 2014-03-25 09:21:26

我不知道为什么ajax处理文件中包含了html。通常,您只保留一个由php代码组成的.php文件,然后您可以确保没有包含html或脚本代码(这目前正在您的页面中进行)。

首先,尝试将model下拉代码更改为:

代码语言:javascript
复制
    <?php
            //loads the models based on the makes selection into a dependant dropdown
            if (isset($_REQUEST['ajaxmake'])) {

                echo "<select name='modelSelection'>"; //select tag placed here
                $resultModel = odbc_exec($conn, "SELECT Model FROM Vehicle WHERE Make = '".$_REQUEST['ajaxmake']."'") or die (odbc_errormsg());

                    while ($rowModel = odbc_fetch_array($resultModel)) {

                        echo "<option value='$rowModel[Model]'>$rowModel[Model]</option>";
                    }

                    echo "</select><br>";
                    die(); //<-- the die placed here will not execute the rest of
                           //the code and also all the options will be populated

            }
    ?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22628400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档