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