你不能因为用户是选择第一个下拉的时间与普通的PHP为此,PHP已经完成了对服务器端的工作。你将需要JavaScript,我总是推荐jQuery。
对于MySQL查询,我使用的是我为自己创建的PHP PDO类,我习惯于(不必担心这一点),但实质上,只需获取PHP查询如何知道最好,并确保您不会对SQL注入开放。你将需要谷歌和阅读AJAX和PHP使用jQuery。这是快速,肮脏和未经测试,所以如果你有问题,请在评论中打我。这里所说:
<label><span>Choose a Car:</span>
<select name="car" id="car" class="validate[required] longtext" onchange="getCarModels();">
<option value="">-------Make a Selection------</option>
<?php
try{
$carCount = DB::getDB("mysql", 1, array("carID"))->query("SELECT COUNT(DISTINCT(%s%)) FROM cars")->fetchColumn();
if ($carCount > 0){
$car_sql="SELECT DISTINCT %s% FROM cars";
foreach (DB::getDB("mysql", 1, array("carID", "carName"))->query($car_sql) as $row){
echo '<option value="'.$row[carID].'">'.$row[carName].'</option>';
}
}
}catch(PDOException $e){
print "SQL Error: " . $e->getMessage() . "<br/>";
exit();
}
?>
</select>
</label>
<label id="carModelsBox" style="display:none;">
<span>Select Model:</span>
<select name="carmodel" id="carmodel" class="validate[required] longtext">
</select>
</label>
和JavaScript
function getCarModels(){
var carID = $('#car option:selected').val();
if (carID == "") {
$('#carModelsBox').slideUp("fast");
}
$.getJSON("ajax.carmodels.php", {carID:carID}, function(data){
if (data.success){
$('#carmodel').html(data.models);
}else{
$('#carModelsBox').append("<p>There are no models</p>");
}
$('#car').blur();
$('#carModelsBox').slideDown("fast"); $('#carmodel').focus();
});
}
此JavaScript文件将通过AJAX调用PHP文件。这个文件是ajax.carmodels.php,它将通过GET接收carID。下面的代码片段:
if ($carID!=''){
try {
$carModelCount = DB::getDB("mysql", 1, array("carmodel.id"))->query("SELECT COUNT(DISTINCT(%s%)) FROM cars, carmodel WHERE carmodel.id = cars.id")->fetchColumn();
if ($carModelCount > 0){
$model_sql="SELECT DISTINCT %s% FROM cars, carmodel WHERE carmodel.id = cars.id";
foreach (DB::getDB("mysql", 1, array("model", "modelname"))->query($model_sql) as $row){
$models .= '<option value="'.$row[model].'">'.$row[modelname].'</option>';
}
$return['models'] =$models;
$return['success'] =true;
}
}catch(PDOException $e){
print "SQL Error: " . $e->getMessage() . "<br/>";
exit();
}
}else{
$return['success'] =false;
}
echo json_encode($return);
而最重要的是,别忘了提供jquery本身。将其放入您的初始PHP 页面。
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
我不确定这会对Patrick有帮助。他显然需要自动填充的链接下拉框,但他的问题在他的意义上是错误的。 – Cogicero 2011-04-13 17:00:05
@Cogicero:我同意你的观点,如果OP希望结果集由选定的第一个下拉值或OP是否需要所有模型驱动。问题是小小的问题 – Chandu 2011-04-13 17:02:26
没错,Op说明了这个问题真的令人困惑。我们中的任何一个都可能是正确的,但是由于OP的这一部分(我的重点),我假定它是“第二次drodown中的值取决于使用SQL QUERY的第一个下拉列表的值”。但我猜测OP不知道SQL无法实现预期的目标。 – Cogicero 2011-04-14 16:49:35