我有两个从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。
由于
答案 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);
?>
将参数绑定到查询并执行。无需一遍又一遍地重复您的代码。