1

我目前正在使用一个在 jQuery 和 PHP 的帮助下运行的 Dependable 下拉菜单。这些值正在从 MySQL 数据库中提取。php 是否可以回显可靠下拉菜单的选定值?

例子

HTML/PHP

<form action="" method="post">

        <select name="gender" id="gender" class="update">
            <option value="">Select one</option>
            <?php if (!empty($list)) { ?>
                <?php foreach($list as $row) { ?>
                    <option value="<?php echo $row['id']; ?>">
                        <?php echo $row['name']; ?>
                    </option>
                <?php } ?>
            <?php } ?>
        </select>

        <select name="category" id="category" class="update"
            disabled="disabled">
            <option value="">----</option>
        </select>

        <select name="colour" id="colour" class="update"
            disabled="disabled">
            <option value="">----</option>
        </select>

</form>
4

2 回答 2

3

请添加 jquery.js。你的html代码

    <select name="gender" id="gender" class="update">
        <option value="">Select one</option>
        <?php if (!empty($list)) { ?>
            <?php foreach($list as $row) { ?>
                <option value="<?php echo $row['id']; ?>">
                    <?php echo $row['name']; ?>
                </option>
            <?php } ?>
        <?php } ?>
    </select>

    <select name="category" id="category" class="update" disabled="disabled">
        <option value="">----</option>
    </select>

    <select name="colour" id="colour" class="update" disabled="disabled">
        <option value="">----</option>
    </select>
        //jquery code for source list
    <script type="text/javascript">
        $(document).ready(function(){
            $('#gender').change(function() {
              if ($(this).val()!='') {
                $("#category").load("postfile.php",{gender_id: $(this).val()});
                $("#category").removeAttr('disabled');
              }
            });
            //code on change of sel_source
            $('#category').change(function() {
              if ($(this).val()!='') {
                $("#colour").load("postfile.php",{category_id: $(this).val()});
                $("#colour").removeAttr('disabled');
              }

            });
        });
    </script> 



//postfile.php
//your mysql connection other things goes here
//code for category
$objDb = new PDO('mysql:host=localhost;dbname=dbname', 'ur_username', 'ur_password');
if(isset($_REQUEST['gender_id']) && !empty($_REQUEST['gender_id'])) {

           $sql = "SELECT * FROM `categories` WHERE `master` = ?";
    $statement = $objDb->prepare($sql);
    $statement->execute(array($_REQUEST['gender_id']));
    $list = $statement->fetchAll(PDO::FETCH_ASSOC);

    if(!empty($list)) {
        $output = '<option value="">Select</option>';
        foreach($list as $row) {              
                $output .= '<option value="'.$row['id'].'">'.$row['name'].'</option>';
        }
    } else {
        $output = '<option value="">Select</option>';
    }
    echo $output;
} 
//code for color

if(isset($_REQUEST['category_id']) && !empty($_REQUEST['category_id'])) {
    $sql = "SELECT * FROM `categories` WHERE `master` = ?";
    $statement = $objDb->prepare($sql);
    $statement->execute(array($_REQUEST['category_id']));
    $list = $statement->fetchAll(PDO::FETCH_ASSOC);
     if(!empty($list)) {
        $output = '<option value="">Select</option>';
        foreach($list as $row) {          
                $output .= '<option value="'.$row['id'].'">'.$row['name'].'</option>';
        }
    } else {
        $output = '<option value="">Select</option>';
    }
    echo $output;
} 

希望这会帮助你。

于 2012-07-21T10:12:10.190 回答
1

您将不得不编写一个 JavaScript 函数,从第一个 HTML 选择字段中检索选定的值或选项。此函数通常会写出当前页面的新 URL 路径,并添加一些连接的 Get 变量:

<script type="text/javascript">
getSelectedOptionValue() {
// create some variables to store your know values such as URL path and document
var myPath = " put the URL path to the current document here ";
var currentPage = "currentPage.php";
// get the values of any necessary select fields
var carMake = document.getElementById("carMake").value;

// write out the final URL with the Get Method variables you want using concatnitation
var getMethodURL = myPath + currentPage + "?carMake='" + carMake + "'";

// function refreshes page using the function made URL
window.location.replace( getMethodURL );
}
</script>

由于第二个选择字段依赖于第一个,因此您必须假设用户将从第一个选项中进行选择。这意味着检索主选择字段值的函数必须运行以响应字段选择的更改。例如

<select name="carMake" id="carMake" onchange="getSelectedOptionValue();">

根据您设置数据库的方式,您可能需要选项标签的值或在选项标签之间呈现给用户的字符串......这取决于您要记住如何重新查询信息如果您的原始记录集尚未提取必要的信息来编写第二组选择选项标签。

要使用 php 写出第二个选择字段,只需重复您在第一个中使用的 while 循环。这次用一个新的 SQL 语句替换你的 SQL 语句,使用一个变量,你存储了使用 get 方法从新 URL 检索到的值

<?php

// here I am using the more generic request method although you could use the get as well
$carMake = $_REQUEST['carMake'];

sql_secondSelectField = "SELECT * FROM tbl_carModels WHERE carMake = $carMake";

// Run new query and repeat similar while loop used to write your first select field ?>
于 2012-07-21T09:39:38.477 回答