【问题标题】:Populate HTML/PHP Dropdown Based on First Dropdown Selection根据第一个下拉选择填充 HTML/PHP 下拉列表
【发布时间】:2014-05-10 03:46:45
【问题描述】:

我有 1 个用于类别(食物、饮料等)的下拉菜单

在我的 MYSQL 表 (t_menu_category) 我有:

+----+---------------+-------------------+----------------------+
| ID | category_name | sub_category_name | category_description |
+----+---------------+-------------------+----------------------+
|  1 | Food          | Curries           | Spicy Curries        |
|  2 | Food          | Meat              | Lamb, Pork, Chicken  |
|  3 | Drinks        | Alcohol           | Fine Tasting Lager   |
|  4 | Desserts      | Cakes             | Chocolate Cake       |
+----+---------------+-------------------+----------------------+

我有第一个下拉菜单显示“category_name”的值,但我想要的是当我选择食物时,我希望第二个下拉框更新并且只显示第一个选择的“sub_category_name”的值,例如。 “Food”等于数据库中的“Food”。

所以如果我在第一个下拉框中选择“食物”,第二个下拉框将只显示“咖喱”和“肉类”。

HTML:

<form method="post" action="<?php $_SERVER['PHP_SELF'] ?>"> 

    <p> 
        <label for="item_name">Item Name</label>
        <input id="item_name" name="item_name" required="required" type="text" placeholder="Item Name" />
     </p>
     <p>
        <label for="item_description">Item Description</label>
        <textarea rows="3" cols="100%" required="required" name="item_description">Item Description</textarea>
    </p>
    <p>
        <label for="item_category">Item Category</label>
        <select id="item_category" name="item_category" required="required">
            <option selected="selected">-- Select Category --</option>
            <?php 
            $sql = mysql_query("SELECT category_name FROM t_menu_category");
            while ($row = mysql_fetch_array($sql)){
            ?>

            <option value="<?php echo $row['category_name']; ?>"><?php echo $row['category_name']; ?></option>

            <?php
            // close while loop 
            }
            ?>
        </select>
    </p>

    <p class="center"><input class="submit" type="submit" name="submit" value="Add Menu Item"/></p>
</form>

任何帮助都将受到高度赞赏:)

【问题讨论】:

  • 一种方法是将您的 PHP 放在另一个文件(网络服务)中,并在第一次选择中完成选择时使用 AJAX 调用它。
  • 您能否详细说明您正在寻找哪种类型的解决方案?你希望这发生在浏览器中的 javascript 中吗?或者您是否希望用户提交表单,然后使用现在呈现的第二个下拉菜单重新加载页面?
  • 我在这里回答了一个类似的问题:stackoverflow.com/questions/22728170/…,它具有根据发送的值重新加载保管箱的代码。事实上,正如@MamaWalter 所说,你需要 AJAX
  • 我想要它,所以第二个下拉列表被禁用,然后当用户从第一个下拉列表中选择一个选项时,它会立即使用与第一个下拉列表对应的值启用。我在这个网站上看到了很多例子,但没有任何工作。
  • 我知道你只能看到 1 个 HTML 下拉列表,因为我把它省略了所以有人可以告诉我怎么做我尝试使用获取 id 然后将其发送到 'ajax.php?value =Food' 但没有任何反应,所以如果有人能提供帮助,我将不胜感激。

标签: javascript php jquery html mysql


【解决方案1】:

您可以使用请求创建一个 PHP 文件并使用 AJAX 调用它。

getSubCategory.php

<?php
$category = "";
if(isset($_GET['category'])){
    $category = $_GET['category'];
}

/* Connect to the database, I'm using PDO but you could use mysqli */
$dsn = 'mysql:dbname=my_database;host=127.0.0.1';
$user = 'my_user';
$password = 'my_pass';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

$sql = 'SELECT sub_category_name as subCategory FROM t_menu_category WHERE category_name = :category';
$stmt = $dbh->prepare($sql);
$stmt->bindValue(':category', $category);
$stmt->execute();

return  json_encode($stmt->fetchAll());

并添加一些 jquery 以在选择类别时捕获并询问服务器相应的子类别:

<script>
    $(document).ready(function () {
        $('#item_category').on('change', function () {

            //get selected value from category drop down
            var category = $(this).val();

            //select subcategory drop down
            var selectSubCat = $('#item_sub_category');

            if ( category != -1 ) {

                // ask server for sub-categories
                $.getJSON( "getSubCategory.php?category="+category)
                .done(function( result) {    
                    // append each sub-category to second drop down   
                    $.each(result, function(item) {
                        selectSubCat.append($("<option />").val(item.subCategory).text(item.subCategory));
                    });
                    // enable sub-category drop down
                    selectSubCat.prop('disabled', false);                
                });

            } else {                
                // disable sub-category drop down
                selectSubCat.prop('disabled', 'disabled');
            }
        });    

    });
</script>

还为您的第一个选项添加一个值:

<option value="-1" selected="selected">-- Select Category --</option>

【讨论】:

    【解决方案2】:

    我有一个简单的解决方案来根据国家/地区 php/javascript/mysql 选择州

    MySQL 表

    country 
          country_code varhar(5)
          country_name varchar(100)
    
    state
          country_code varhar(5)
          state_code   varchar(5)
          country_name varchar(100)
    

    main.php 文件中的国家/州选择

    <html>
       <body> 
         Country
                <?php
                    $sql="SELECT * FROM country order by country_name";
                    $rs=$conn->Execute($sql);
                    echo '<select  value="'.$country_code.'"  name="country_code"  id="country_list"   onChange="stateList(this.value);" />';
                    echo  '<option value="">--Select--</option>';
                    $rs->MoveFirst();
                    while (!$rs->EOF) {
                        echo  '<option value="'.$rs->fields['country_code'].'"';
                        if  ($rs->fields['country_code'] == $country_code) {echo " selected";}
                        echo  '>'.$rs->fields['country_name'].'</option>';
                        $rs->MoveNext();
                    }
                    echo '</select>';
                ?>
    
         State
                <?php
                    $sql="SELECT * FROM state where contry_code = '$country_code' order by state_name";
                    $rs=$conn->Execute($sql);
                    echo '<select   value="'.$state_code.'"  name="state_code" id="state_list"   />';
                    echo  '<option value="">--Select--</option>';
                    $rs->MoveFirst();
                    while (!$rs->EOF) {
                        echo  '<option value="'.$rs->fields['state_code'].'"';
                        if  ($rs->fields['state_code'] == $state_code) {echo " selected";}
                        echo  '>'.$rs->fields['state_name'].'</option>';
                        $rs->MoveNext();
                    }
                    echo '</select>';
                ?>
       </body>
    </html>
    

    Java 脚本

    <script type="text/javascript">
    function stateList(val) {
       var select = document.getElementById( "state_list" );
       var url    = "get_statelist.php?country_code="+val;
       $.ajax({
          type: "GET",
          url: url,
          data:'',
          success: function(data){
             $("#state_list").html(data);
          }
       });
    }
    

    get_stataelist.php

    <?php
    session_start();
    $country_code = $_GET['country_code'];
    $conn        = connect_db()  //Make your own connection entry conn with Server,DB User ID, DB Password and DB Name
    
    if  ($country_code  !=  "") {
        $sql="SELECT * FROM state where coutry_code = '$country_code'  order by state_name";
        $rs=$conn->Execute($sql);
    
        echo  '<option value="">--Select--</option>';
    
        $rs->MoveFirst();
        while (!$rs->EOF) {
            echo  '<option value="'.$rs->fields['state_code'].'">'.$rs->fields['state_name']."</option>";
            $rs->MoveNext();
        }
    }
    
    ?>
    

    【讨论】:

      猜你喜欢
      • 2012-01-04
      • 1970-01-01
      • 1970-01-01
      • 2017-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多