php - 从下拉列表中选择值,第二个下拉列表自动更改

标签 php jquery html mysql drop-down-menu

我的数据库中有一个名为 company 的表,在 company 表中有 3 列名称 Id、Company_Name 和 location。 我有两个下拉列表。第一个下拉列表仅显示公司名称,并且根据公司名称位置将在第二个下拉列表中发生变化。 我做了一些代码,但在第二个下拉菜单中我得到了所有位置名称。

<?php


//$comp=$_POST['Company'];
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "demo_db";


    //open connection to mysql db
    $connection = mysqli_connect($servername,$username,$password,$dbname) or die("Error " . mysqli_error($connection));

    //fetch table rows from mysql db
    $sql = "select * from company";// it displaying all company name in my first drop down list
    $result = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));


if (isset($_POST['Company'])) {

    $name=$_POST['Company'];
    $sql = "select * from company where Company_name=$name";

}
    $result_loc = mysqli_query($connection, $sql) or die("Error in Selecting " . mysqli_error($connection));


    //close the db connection
    mysqli_close($connection);


?>
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
 

    <select onchange='this.form.submit();' name="Company">
            <option value="Select your Location1" disabled selected>Select your company</option>
            <?php while($row = mysqli_fetch_array($result)):;?>
            <option value="<?php echo $row[1];?>"><?php echo $row[1];?></option>
            <?php endwhile;?>
    </select>

 <select>
            <option value="" disabled selected>Select your location</option>
             <?php while($row = mysqli_fetch_array($result_loc)):;?>
            <option value="<?php echo $row[2];?>"><?php echo $row[2];?></option>
        <?php endwhile;?>
 </select>



</body>
</html>

最佳答案

为了帮助您使用 ajax 链接 SELECT 菜单,以下内容可能很有用 - 您应该能够修改它以适合您的数据库结构和命名约定。您可以“按原样”运行此程序以查看结果 - 希望它有用。

<?php
    if( $_SERVER['REQUEST_METHOD']=='POST' && isset( $_POST['action'], $_POST['id'] ) ){

        $action=filter_input( INPUT_POST, 'id', FILTER_SANITIZE_STRING );
        $id=filter_input( INPUT_POST, 'id', FILTER_SANITIZE_NUMBER_INT );

        if( $action && $id && !is_nan( $id ) ){
            $sql='select * from table where id=?';
            /* etc ~ generic sql example only ! */

            /* query db*/

            /* process recordset and build menu data */



            /* 
                demo response sent back to aajx callback
                In reality this would be dynamically generated with
                results from the db query above.
            */
            for( $i=0; $i < 10; $i++ )echo "<option value='Location-$id-$i'>Location-$id-$i";
        }
        exit();
    }
?>
<!doctype html>
<html>
    <head>
        <title>Dependent / Chained SELECT menus</title>
        <script type='text/javascript' charset='utf-8'>
            /* Basic Ajax function */
            function ajax(m,u,p,c,o){
                /*
                    m=Method,
                    u=Url,
                    p=Params,
                    c=Callback,
                    o=Options
                */
                var xhr=new XMLHttpRequest();
                xhr.onreadystatechange=function(){
                    if( xhr.readyState==4 && xhr.status==200 )c.call( this, xhr.response, o, xhr.getAllResponseHeaders() );
                };

                var params=[];
                for( var n in p )params.push(n+'='+p[n]);

                switch( m.toLowerCase() ){
                    case 'post': p=params.join('&'); break;
                    case 'get': u+='?'+params.join('&'); p=null; break;
                }

                xhr.open( m.toUpperCase(), u, true );
                xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
                xhr.send( p );
            }


            /* Callback function to populate second menu */
            function createmenu(r,o,h){
                /*
                    r=response
                    o=options ( sent by ajax function )
                    h=response headers
                */
                o.menu.innerHTML=r;
            }



            function bindEvents(){
                /* Get references to the two dropdown menus */
                var oSelCompany=document.querySelectorAll('select[name="Company"]')[0];
                var oSelLocation=document.querySelectorAll('select[name="Locations"]')[0];

                /* Assign an `onchange` event listener */
                oSelCompany.onchange=function(e){

                    var method='post';
                    var url=location.href;

                    /* the parameters to send to the PHP script */
                    var params={
                        'action':'getmenu',
                        'id':this.options[ this.options.selectedIndex ].value
                    };

                    /* Options to pass to the ajax callback */
                    var opts={
                        menu:oSelLocation
                    };

                    /* make the ajax request */
                    ajax.call( this, method, url, params, createmenu, opts );

                }.bind( oSelCompany );
            }

            document.addEventListener( 'DOMContentLoaded', bindEvents,false );
        </script>
        <style type='text/css' charset='utf-8'>
            select {padding:1rem;width:300px;}
        </style>
    </head>
    <body>
        <form method='post'>
            <select name='Company'>
                <option value=1>One
                <option value=2>Two
                <option value=3>Three
                <option value=4>Four
                <option value=5>Five
            </select>
            <select name='Locations'></select>
        </form>
    </body>
</html>

关于php - 从下拉列表中选择值,第二个下拉列表自动更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40260663/

相关文章:

php - 使用 HTML 表单更新 MySQL

php - Yii2:回显变量两次给出错误的结果

php - 你能从一个 MySQL 查询中得到 2 个不同的结果吗?

php - jquery ajax如何验证数据库中是否存在记录

php - DomPDF 表格固定列宽和打断长文本

php - 检查电子邮件是否已存在于数据库中 jquery +php

javascript - jQuery:传递变量以在成功的 $.get 请求后运行

jquery - 在放大弹出窗口中选择2 : search input cannot be focused

html - 如何使用 css 重新创建 tex 的 over-underbracket

javascript - angularjs 自定义过滤器检查数据数组中的值