【发布时间】:2016-11-21 16:06:17
【问题描述】:
有人告诉我我之前的帖子不是很清楚,所以我将尝试以不同的方式提问。
我正在编写一本 OOP 食谱书。目前,我正在努力添加食谱。为此,我正在显示测量的下拉列表,当用户选择测量时,我想显示另一个下拉列表,其中包含为该测量 ID 找到的单位。
mysql 上的表是measurement,有id 和name 列,units,有id,name 和measurement_id 列(measurement_id 是units 表的外键)。多个单位将属于一个测量。
为此,我创建了一个测量 php 对象/类。
在 new_recipe.php 中,我包含一个表单,其余列用于添加食谱,我将仅包含我现在正在处理的问题:
注意:在 measure.php 上,Measurement php 对象/类具有以下方法: - display_measurements() --> 只需从测量表中选择所有测量。 - get_units_for_measurement($measurement_id) --> 选择所有具有相同measurement_id 的单位。
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">
(...)
<div class="input_group">
<label for="name" class="required">Name</label>
<input name="name" type="text" value="" />
</div>
<div class="input_group">
<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>
</div>
<div class="input_group">
<label for="units" class="required">Units</label>
<select id="selectUnit" name="units">
<option disabled selected value=""> -- select a unit -- </option>
<?php
if (isset($_POST['measurements'])) {
die('ddddd');
// $units = $measurementObj->get_units_for_measurement($_POST['measurements']);
// foreach ($units as $unit) {
// echo '<option value="' . $unit['id'] . '" ';
// echo '>' . $unit['name'] . '</option>';
// }
}
?>
</select>
</div>
(...)
<button class="submit" type="submit" name="submit">Submit</button>
</form>
您可以在表单中看到两个选择下拉菜单;第一个是我显示测量值的地方,下一个是我有一些注释行的地方,我应该“过滤”在第一个下拉列表中选择的measurement_id以显示所属单位。要做它不会重新加载页面,建议我使用 ajax(我不太熟悉)。这个 ajax 调用一个 js 文件,链接到项目的页脚:
$(document).ready(function() {
$('#newRecipe').on('change','.selectMeasurement', function(){
var selectedMeasurementId = this.value;
$.ajax({
method: 'POST',
url: 'classes/measurement.php',
data: selectedMeasurementId
});
return true;
});
});
或
$(文档).ready(函数() {
$('#newRecipe').on('change','.selectMeasurement', function(){
var selectedMeasurementId = this.value;
$.ajax({
方法:'POST',
url: 'classes/measurement.php',
数据:selectedMeasurementId,
成功:函数(){
警报(selectedMeasurementId);
}
});
});
});
在js文件中,我想到的是关于成功,调用方法对象:
成功:$measurementObj->get_units_for_measurement($_POST['measurements']),我知道,如果我有 ajax 响应,我想获取给定测量的单位,但是,我不能调用PHP 对象在这里。
另外,我尝试在设置测量值时做一些事情。在选择我尝试做的测量之后:
if (isset($_POST['measurements'])) {
//then $measurementObbj->get_units_for_measurement|($_POST['measurements']), but it seems it does not "detect" the measurements has been set.
}
所以我的问题是....我如何执行这个 $measurementObj->get_units_for_measurement(measurement_id selected in the first dropdown),以使 ajax 请求成功?
我希望现在更清楚一点。 谢谢
【问题讨论】:
-
嗯.. 只是理解你的问题很令人困惑。
-
你有一些混合在一起的东西。首先你在这个文件中有什么:
classes/measurement.php?是_测量类_还是负责获取ajax请求并发回ajax请求的数据的文件? -
ohm.... 它是 _measurement 类。我应该以其他方式重命名文件吗?我实际上是在寻找用大写来命名文件是否很常见,作为类,但我没有找到任何东西,所以我只是用类名命名。目前,负责 ajax 请求的文件位于页脚 ^^