【发布时间】:2018-04-23 12:58:36
【问题描述】:
我有一个项目要做,我需要制作一个搜索表单,用户从第一个下拉列表中选择一个项目,然后根据他的选择,在第二个下拉列表中选择与第一个选择相关的项目将显示,依此类推。我在this site上找到了一个例子,我跟着一个使用php和mysql的例子,但我遇到了一些问题。
成功连接数据库后,我有如下代码。
Javascript:
function reload(form){
var val=form.cat.options[form.cat.options.selectedIndex].value;
self.location='search.php?inputCar=' + val ;
}
PHP:
@$cat=$_GET['cat'];
echo $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;
};
$query_car="SELECT DISTINCT marque_name,marque_id FROM vehicule_marque order by marque_name";
if(isset($cat) and strlen($cat) > 0){
$quer="SELECT DISTINCT modele_name FROM vehicule_modele where marque_id=$cat order by modele_name";
} else {
$query_modele="SELECT DISTINCT modele_name FROM vehicule_modele order by modele_name";
};
HTML:
<div class="form-group col-4">
<label for="inputCar">Choose Car</label>
<select name="cat" id="inputCar" class="form-control" onchange="reload(this.form)">
<option value=''>Choose one...</option>
<?php
foreach ($conn->query($query_car) as $noticia2) {
if($noticia2['marque_id']==@$cat){echo "<option selected value='$noticia2[marque_id]'>$noticia2[marque_name]</option>"."<BR>";
} else {
echo "<option value='$noticia2[marque_id]'>$noticia2[marque_name]</option>";
}
};
?>
</select>
</div>
<div class="form-group col-4">
<label for="inputModele">Choose Model</label>
<select name="imputModele" id="inputModele" class="form-control">
<option>Choose one...</option>
<?php
foreach ($conn->query($quer) as $noticia) {
echo "<option value='$noticia[modele_name]'>$noticia[modele_name]</option>";
};
?>
</select>
</div>
我在使用此代码时遇到的问题是,当我选择第一项时,它不会自动重新加载,也不会在 url 中设置选定的值。但是,如果我手动编写 ?inputCar= + val ,它会重新加载并显示第一个下拉列表。我得到的控制台错误是reload is not defined。
我尝试寻找解决方案,但尽管就该主题提出了多个问题,但我似乎无法为我的特定问题找到解决方案。我对这一切都很陌生,所以我尝试用这种方式来代替使用 Ajax,这对我来说仍然相当复杂。如果有人能看到我做错了什么并指出我正确的方向,我将不胜感激。
【问题讨论】:
-
我假设你在某处有一个
<form>标签 -
您在使用之前实际上并没有检查
$_GET['cat']是否存在!因此使用@ -
不幸的是,我认为你偶然发现了一个糟糕的例子。我很想重新开始。
-
简单规则如果你必须使用
@错误抑制你做错了什么 -
是的,我确实有一个
<form>标签,我只是复制了无效的相关代码,我深表歉意。你是对的,如果我删除@,我会收到一个未定义的错误。
标签: javascript php mysql