Javascript 三分之一下拉列表使用mysql创建冲突

Javascript 三分之一下拉列表使用mysql创建冲突,javascript,php,mysql,select,foreign-keys,Javascript,Php,Mysql,Select,Foreign Keys,好的,以下是我的表格: departments associates +--------+------------------+--------------+ +---------+------------------+-----------+------------+ | dep_id | dep_name | date_added | | asso_id | ass

好的,以下是我的表格:

departments                                         associates
+--------+------------------+--------------+        +---------+------------------+-----------+------------+
| dep_id | dep_name         | date_added   |        | asso_id | asso_name        | dep_id    | date_added |
+--------+------------------+--------------+        +---------+------------------+-----------+------------+
|  1     | Pick a Department| Date         |        |   1     | A Associate      | 2         |  Date      |
|  2     | Department A     | Date         |        |   2     | B Associate      | 3         |  Date      |
|  3     | Department B     | Date         |        |   3     | C Associate      | 4         |  Date      |
|  4     | Department C     | Date         |        |   4     | D Associate      | 5         |  Date      |
|  5     | Department D     | Date         |        |   5     | A Associate 2    | 2         |  Date      |
+--------+------------------+--------------+        +---------+------------------+-----------+------------+

key_list                                    key_log
+--------+------------+--------------+      +------+--------------+------------+-------------+----------------+
| key_id | key_name   | date_added   |      | id   | key_assigned | key_status | assigned_to | assigned_by    |
+--------+------------+--------------+      +------+--------------+------------+-------------+----------------+
|  1     |  Key 1     | Date         |      |  1   |    Key 1     | 0          | A Associate | logged in name |
|  2     |  Key 2     | Date         |      |  2   |    Key 4     | 0          | B Associate | logged in name |
|  3     |  Key 3     | Date         |      |      |              |            |             |                |
|  4     |  Key 4     | Date         |      |      |              |            |             |                |
|  5     |  Key 5     | Date         |      |      |              |            |             |                |
+--------+------------+--------------+      +------+--------------+------------+-------------+----------------+  
因此,我试图创建一个密钥日志,在其中可以存储密钥名称和关联名称,以及密钥是否已注销或登录。我的第一个问题是试图链接部门和同事的下拉菜单。我了解到您不会将comas用于连接,有人建议您直接使用多个查询。
因此,经过一些研究后,我这样做:

<?php
$dbhost_name = "localhost"; 
$database = "db_name";
$username = "user_name";    
$password = "password";

try {
$dbo = new PDO('mysql:host='.$dbhost_name.';dbname='.$database, $username, $password);
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
<!DOCTYPE html>
<html>
<head>
<script>
function reload(form)
{
var val=form.cat.options[form.cat.options.selectedIndex].value;
self.location='dd.php?cat=' + val ;
}

</script>
</head>

<body>

<?Php

@$cat=$_GET['cat']; // Use this line or below line if register_global is off
if(strlen($cat) > 0 and !is_numeric($cat)){ // to check if $cat is numeric data or not. 
echo "Data Error";
exit;
}
$quer3="SELECT DISTINCT key_name, key_id FROM key_iv order by key_name";

$quer2="SELECT DISTINCT category,cat_id FROM category order by category"; 

if(isset($cat) and strlen($cat) > 0){
$quer="SELECT DISTINCT subcategory FROM subcategory where cat_id=$cat order by subcategory"; 
}else{$quer="SELECT DISTINCT subcategory FROM subcategory order by subcategory"; } 

echo "<form method=post name=f1 action='dd-check.php'>";
    //   Starting of first drop down
echo "<select name=key_names><option value=''>Select Key</option>"; // list box select command

foreach ($dbo->query($quer3) as $row){//Array or records stored in $row

echo "<option value=$row[id]>$row[key_name]</option>"; 

/* Option values are added by looping through the array */ 

}

 echo "</select>";// Closing of list box


echo "<select name='cat' onchange=\"reload(this.form)\"><option value=''>Select one</option>";
foreach ($dbo->query($quer2) as $noticia2) {
if($noticia2['cat_id']==@$cat){echo "<option selected value='$noticia2[cat_id]'>$noticia2[category]</option>"."<BR>";}
else{echo  "<option value='$noticia2[cat_id]'>$noticia2[category]</option>";}
}
echo "</select>";
// This will end the first drop down list

//     Starting of second drop downlist 
echo "<select name='subcat'><option value=''>Select one</option>";
foreach ($dbo->query($quer) as $noticia) {
echo  "<option value='$noticia[subcategory]'>$noticia[subcategory]</option>";
}
echo "</select>";
//  This will end the second drop down list 

echo "<input type=submit value=Submit>";
echo "</form>";
?>
</body>
</html>

函数重载(表单)
{
var val=form.cat.options[form.cat.options.selectedIndex].value;
self.location='dd.php?cat='+val;
}

我认为您第二次尝试的问题是,您从查询中获取了key\u name和key\u id,但在其中,您在引用key\u name和id(而不是key\u id)的选项中写出了值:


卡洛斯,您可能想尽快更改密码,因为您不小心将其粘贴在了第二个示例的顶部:)您可能也应该选择一个更安全的密码。创建易于记忆且相当安全的密码。谢谢@JonKloske,我一定会这么做,谢谢你的网站。我不太担心这个问题,因为我正在本地系统上使用mamp进行测试。我很抱歉响应太晚,Jon,我正在研究printf vs echo,我正在研究htmlentities以及何时使用它们。我已经利用了你的答案,它是有效的。当我把下拉列表放在开头时,我也明白了为什么我的第二种方法会出现问题。不知何故,我的查询$db有一个额外的字母,所以它不是$db而是$dbo,这引起了很多混乱。无论如何,我的下一个任务是创建一个条目,以便在每次向员工注销密钥时存储信息,并检查密钥是否已注销。谢谢。不用担心,希望上面的内容有更广泛的帮助,即使最初的问题是打字错误!:)如果你不关心历史记录,简单地拥有一个可空的“checkedOutBy”字段可能是最简单的方法。如果您确实关心历史记录,则可以使用另一个表,其中包含keyid、checkedoutby、checkoutdate和checkindate。要检查某个键是否可用,请确保该键在第二个表中没有checkindate为null的条目(您可以使用左连接、按keyid分组和SUM(chekindate为null)作为未完成项,且未完成项=0。
<?php
$db = new mysqli('localhost', 'carlos', 'Security5', 'testing');
$query = "SELECT dep_id, dep_name FROM department";
  $result = $db->query($query);

  while($row = $result->fetch_assoc()){
    $categories[] = array("id" => $row['dep_id'], "val" => $row['dep_name']);
  }

  $query = "SELECT ass_id, dep_id, ass_name FROM associates";
  $result = $db->query($query);

  while($row = $result->fetch_assoc()){
    $subcats[$row['dep_id']][] = array("id" => $row['ass_id'], "val" => $row['ass_name']);
  }

  $jsonCats = json_encode($categories);
  $jsonSubCats = json_encode($subcats);


?>
<!docytpe html>
<html>

  <head>
    <script type='text/javascript'>
      <?php
        echo "var categories = $jsonCats; \n";
        echo "var subcats = $jsonSubCats; \n";
      ?>
      function loadCategories(){
        var select = document.getElementById("categoriesSelect");
        select.onchange = updateSubCats;
        for(var i = 0; i < categories.length; i++){
          select.options[i] = new Option(categories[i].val,categories[i].id);          
        }
      }
      function updateSubCats(){
        var catSelect = this;
        var catid = this.value;
        var subcatSelect = document.getElementById("subcatsSelect");
        subcatSelect.options.length = 0; //delete all options if any present
        for(var i = 0; i < subcats[catid].length; i++){
          subcatSelect.options[i] = new Option(subcats[catid][i].val,subcats[catid][i].id);
        }
      }
    </script>

  </head>

  <body onload='loadCategories()'>
  <?php
    $quer3="SELECT DISTINCT key_name, key_id FROM key_list order by key_name";
  echo "<select name=key_names><option value=''>Select Key</option>"; // list box select command

foreach ($dbo->query($quer3) as $row){//Array or records stored in $row

echo "<option value=$row[id]>$row[key_name]</option>"; 

/* Option values are added by looping through the array */ 

}

 echo "</select>";// Closing of list box
 ?>

  <select id='categoriesSelect'>
    </select>

    <select id='subcatsSelect'>
    </select>

  </body>
</html>
<?php
    $quer3="SELECT DISTINCT key_name, key_id FROM key_list order by key_name";
    echo "<select name=key_names><option value=''>Select Key</option>"; // list box select command
    foreach ($dbo->query($quer3) as $row){//Array or records stored in $row
        echo "<option value=$row[id]>$row[key_name]</option>"; 
        /* Option values are added by looping through the array */ 
    }
    echo "</select>";// Closing of list box
?>
<?php
    $querykeys = "SELECT DISTINCT key_name, key_id FROM key_list order by key_name";
    printf("<select name='key_names'>\n");
    printf("<option value=''>Select Key</option>\n");
    foreach ($dbo->query($querykeys) as $row) {
        printf("<option value='%s'>%s</option>",
            htmlentities($row['key_id'], ENT_QUOTES),
            htmlentities($row['key_name'], ENT_QUOTES)
        );
    }
    echo "</select>\n";
?>