2016-07-06 85 views
0

我有两个从MySQL表填充的下拉菜单。在MySQL表中,他们有外键约束,所以表“资产”有一个链接回部门表的列“部门”。所以每个资产都有相关的部门。PHP MySQl链接选择

我的第一个下拉菜单是“部门”,我希望第二个下拉菜单只显示选定部门的结果。

这是我的代码。

​​

和资产:

<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

JavaScript在第一个下拉列表中更改事件。如果发出ajax请求并填写第二个下拉列表。 – Daan

+1

这段代码没有任何内容,因为它可以选择一个部门。所以你必须首先加载空的资产下拉菜单。然后,当使用AJAX选择Dept时,请从单独的PHP脚本请求Asset下拉内容,将Dept_id传递给Dept_id并返回资产,并使用javascript填充Assets DD – RiggsFolly

+0

如果值为HTML作为个人选择。只有大约10个地点,我不能预见,增长... –

回答

-1

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

试试下面的例子来摆脱你的,如果(1),如果(2),如果(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); 
?> 

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

+0

谢谢!谈到PHP时,我有点小气。更好的方法。 –

-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填充在javascript文件中调用的php文件中。

谢谢!

+0

尤达编程。好久不见:-)请查看我的答案,获取更短版本的代码,而无需为每个位置添加if – DKSan