php / ajax - 根据其他dropwdown中的选定选项填充下拉列表

时间:2016-11-21 13:05:42

标签: php mysql ajax select

我的数据库中有一个名为“测量”的表,另一个用于“单位”;

“测量”表有一个id和name列。 “units”表有一个id,name和measurement_id列。

这个想法是,当用户从下拉列表中选择一个测量值时,它将显示另一个下拉列表,其中包含为该测量值找到的单位。

我想我必须用“ajax”来做。我已经做了一些基础知识,从html文件中检索信息,但我不知道如何将其与从数据库中检索信息联系起来。

关于measurement.php:

  public function display_measurements() {
      include 'includes/db_connection.php';   
          try {

      $sql = "SELECT id, name FROM measurements";

      $results = $conn->prepare($sql);
      $results->execute();
     } catch(PDOException $e) {
        echo 'Error: ' . $e->getMessage() . '<br />';
        return array();
    }
      return $results->fetchAll(PDO::FETCH_ASSOC);
    }

 public function get_units_for_measurement($measurement_id = ':measurement_id') {
       include 'includes/db_connection.php';

       try { 
           $sql = "SELECT measurements.id, units.id, units.name "
               . "FROM measurements "
               . "JOIN units "
               . "ON measurements.id=units.measurement_id WHERE measurements.id=:measurement_id";
           $result = $conn->prepare($sql);
           $result->bindParam(':measurement_id', $measurement_id, PDO::PARAM_INT);
           $result->execute(); 
        } catch(PDOException $e) {
        echo 'Error: ' . $e->getMessage() . '<br />';
        return array();
    }
    return $result->fetchAll(PDO::FETCH_ASSOC);
 }

选择显示测量值:(它是较大表单的一部分,但其余部分无关紧要,因此我添加了表单标记只是为了将您放在我的代码上):

 <form id="newRecipe" method="POST" action="new_recipe.php">   
 .......
     <label for="measurements" class="required">Measurements</label>
    <select name="measurements" class="selectMeasurement">
        <option disabled selected value> -- select a measurement -- </option>
    <?php
        $measurements = $measurementObj->display_measurements();
        foreach ($measurements as $measurement) {
            echo '<option value="' . $measurement['id'] . '" ';
            echo '>' . $measurement['name'] . '</option>';
        }
    ?>
    </select> 

    //display select values based on measurement_id
    <label for="units" class="required">Units</label>
    <select name="units">
        <option disabled selected value> -- select a unit -- </option>
        <?php
        $units = $measurementObj->get_units_for_measurement($measurement['id']);
        foreach ($units as $unit) {
            echo '<option value="' . $unit['id'] . '" ';
            echo '>' . $unit['name'] . '</option>';
        }
    ?>
    </select> 
  ..... 
</form>

然后,在我的脚本上,我有这个来检索所选的值:

$(document).ready(function() {
    $('#newRecipe').on('change','.selectMeasurement', function(){
      var selectedMeasurementId = this.value;
      return selectedMeasurementId;
    });   
});

但是现在.....我不知道该怎么办。目前,我正在返回所选的measurement_id的值,但是如何将该值“发送”到mysql查询?所以,我不想要的是必须发送表单或重新加载页面以显示具有单位id的选择;所以....这就是为什么我认为必须用ajax来完成....对吧?

任何人都可以给我一个关于如何进行的暗示?

谢谢

1 个答案:

答案 0 :(得分:0)

我还有另一个建议:用PHP完全填充所有内容,然后使用javascript监听所选下拉列表的更改并适当更新选项。