PHP MySQl链式选择

时间:2016-07-06 10:10:31

标签: javascript php mysql

我有两个从MySQL表填充的下拉列表。在MySQL表中,它们具有外键约束,因此表"资产"有专栏"部门"链接回部门表。因此每个资产都有一个相关的部门。

我的第一次下拉是"部门"我希望第二个下拉列表仅显示所选部门的结果。

这是我的代码。

<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> 

和资产:

<select id="asset" name="asset">
    <option value="">Select Asset</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,assetcode from assets');
        $stmt->execute();
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) 
        {
            echo "<option value='$row[id]'>$row[assetcode]</option>";
        }
  ?>
</select> 

我不知道从哪里开始,我已经完成了javascript链接选择,但没有使用mysql / php。

由于

2 个答案:

答案 0 :(得分:-1)

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

 $(function(){ 
                    $("#asset").remoteChained({
                        parents : "#location",
                        url : "selectData.php?smartload=1",
                        loading : "loading assets....",
                    });
                       });

因此,当加载或选择位置时,它会唤醒另一个PHP脚本,然后使用IF语句返回具有不同MySQL查询的值。 (以下示例)。

<?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);
?>

然后是下拉资产的ID&#34;资产&#34;填充了调用的php文件javascript中的响应。

谢谢!

答案 1 :(得分:-1)

使用所有强大的参数绑定,您可以减少必须编写和维护的代码量。

尝试以下示例来删除if(1),if(2),if(3).....

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);
?>

将参数绑定到查询并执行。无需一遍又一遍地重复您的代码。