Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/244.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP MySQl链式选择_Javascript_Php_Mysql - Fatal编程技术网

Javascript PHP MySQl链式选择

Javascript PHP MySQl链式选择,javascript,php,mysql,Javascript,Php,Mysql,我有两个从MySQL表填充的下拉列表。在MySQL表中,它们有外键约束,因此表“资产”有一列“部门”,该列链接回department表。因此,每个资产都有一个关联的部门 我的第一个下拉列表是“department”,我希望第二个下拉列表只显示所选部门的结果 这是我的密码 <select id="location" name="location"> <option value="">Select Asset Location</option> <

我有两个从MySQL表填充的下拉列表。在MySQL表中,它们有外键约束,因此表“资产”有一列“部门”,该列链接回department表。因此,每个资产都有一个关联的部门

我的第一个下拉列表是“department”,我希望第二个下拉列表只显示所选部门的结果

这是我的密码

<select id="location" name="location">
    <option value="">Select Asset Location</option>
 <?php
        $pdo = new PDO('mysql:host=localhost;dbname=maintlog', 'root', '*******');
        #Set Error Mode to ERRMODE_EXCEPTION.
        $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

        $stmt = $pdo->prepare('Select id,name from location');
        $stmt->execute();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
        {
            echo "<option value='$row[id]'>$row[name]</option>";
        }
  ?>
</select> 

选择资产位置

我最终到达了那里。最后我使用了一些Javascript和额外的HTML。我还使用jquery.chained使其正常工作

 $(function(){ 
                    $("#asset").remoteChained({
                        parents : "#location",
                        url : "selectData.php?smartload=1",
                        loading : "loading assets....",
                    });
                       });
所以,当加载或选择位置时,它会唤醒另一个PHP脚本,然后使用IF语句以不同的MySQL查询返回值。(下面的例子)


然后用调用的php文件javascript中的响应填充下拉列表“asset”的ID


谢谢

使用全能参数绑定,您可以减少需要编写和维护的代码量

请尝试以下示例以摆脱if(1)、if(2)、if(3)


将参数绑定到查询并执行。无需反复重复代码。

第一个下拉菜单中的Javascript更改事件。在这种情况下,发出ajax请求并填写第二个下拉列表。此代码中的任何内容都不能选择部门。因此,您必须首先将资产下拉列表加载为空。然后,当使用AJAX选择一个部门时,从一个单独的PHP脚本请求资产下拉列表内容,将所选的部门id传递给它,并基于该部门id返回资产,并使用Javascript填充资产DD。如果这些值以HTML作为单独选项,会更容易。只有大约10个地点,我无法预见会有这样的增长……尤达编程。好久不见:-)请检查我的答案,以获得更简短的代码版本,而无需为每个位置添加if谢谢!说到PHP,我有点不在行。好得多。
 $(function(){ 
                    $("#asset").remoteChained({
                        parents : "#location",
                        url : "selectData.php?smartload=1",
                        loading : "loading assets....",
                    });
                       });
<?php

if (isset($_GET["smartload"])) {
    sleep(1);
}

header("Access-Control-Allow-Origin: *");

$response[""] = "--";

/* Locations and asset  details data 
-------------------------------------------------------- */
if (isset($_GET["location"])) {
    if ("1" == $_GET["location"]) {
        $pdo = new PDO('mysql:host=localhost;dbname=********', 'root', '********');
        #Set Error Mode to ERRMODE_EXCEPTION.
        $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

        $stmt = $pdo->prepare('SELECT id,assetcode from assets where location=1');
        $stmt->execute();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
        {
             $response ["$row[id]"]="$row[assetcode]";
        }
    };

    if ("2" == $_GET["location"]) {
        $pdo = new PDO('mysql:host=localhost;dbname=********', 'root', '********');
        #Set Error Mode to ERRMODE_EXCEPTION.
        $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

        $stmt = $pdo->prepare('SELECT id,assetcode from assets where location=2');
        $stmt->execute();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
        {
            $response ["$row[id]"]="$row[assetcode]";

        }
    };

    if ("3" == $_GET["location"]) {
        $pdo = new PDO('mysql:host=localhost;dbname=********', 'root', '********');
        #Set Error Mode to ERRMODE_EXCEPTION.
        $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

        $stmt = $pdo->prepare('SELECT id,assetcode from assets where location=3');
        $stmt->execute();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
        {
             $response ["$row[id]"]="$row[assetcode]";
        }
    };
}

print json_encode($response);
?>
if (filter_input(INPUT_GET, "smartload")) {
    sleep(1);
}

header("Access-Control-Allow-Origin: *");

$response[""] = "--";

/* Locations and asset  details data 
-------------------------------------------------------- */
if (filter_input(INPUT_GET, 'location')) {
    $pdo = new PDO('mysql:host=localhost;dbname=********', 'root', '********');
    #Set Error Mode to ERRMODE_EXCEPTION.
    $pdo->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  

    $stmt = $pdo->prepare('SELECT id,assetcode from assets where location=:getLocation');
    $stmt->bindParam(':getLocation', filter_input(INPUT_GET, 'location'), PDO::PARAM_INT);
    $stmt->execute();
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
    {
         $response ["$row[id]"]="$row[assetcode]";
    }
}
print json_encode($response);
?>