我有一个搜索表单,它使用Javascript根据所选内容更改输入法。所以如果你有"姓名"选择你得到一个文本框,但如果你有"评级"选中后,您将获得1-5的下拉列表。
<form method="GET" action="results_sample.php">
<p>Search by: <!-- Dropdown list allows users to search by different elements -->
<select id="searchtype" name="searchtype" onchange="changeview()"> <!-- onchange calls changeview() every time the dropdown value is changed. Allows ratings to be seen -->
<option value="School">School</option>
<option value="Name">Name</option>
<option value="Rating">Rating</option>
<option value="Class Location">Class Location</option>
<option value="Subject">Subject</option>
</select>
</p>
<span id="standard" style="display:inline">Search Query: <input type="text" name="query"></span>
<span id="locationsearch" style="display:none"> (Longitude-Lattitude pair) <input type="number" id="longitude" step="any"> - <input type="number" id="latitude" step="any"> </span>
<span id="ratevalue" style="display:none"> Choose rating:
<select id="ratings">
<option value=1>1</option>
<option value=2>2</option>
<option value=3>3</option>
<option value=4>4</option>
<option value=5>5</option>
</select>
</span>
<p><input type="submit"></p>
</form>
results_sample.php中的相关代码是:
<?php
if (isset($_GET['searchtype'])) {
if (!empty($_GET['query'])) {
$search = $_GET['query'];
} elseif (!empty($_GET['ratings'])) {
$search = $_GET['ratings'];
} elseif (!empty($_GET['longitude']) || isset($_GET['latitude'])) {
$search = 'more to come...';
}
echo '<p>Entries containing "', $search, '" in "', $_GET['searchtype'], '"</p>';
}
?>
我有两个问题:
1)如果我在搜索查询中键入文本,然后切换到评级,并尝试按评级搜索,它仍然在后台隐藏文本框,并使用该信息。
2)如果文本框为空并且我想按经度 - 纬度进行搜索,则评级仍设置为默认值1(在后台不可见)并且它将获取该值。
答案 0 :(得分:1)
一种选择是检查$_GET['searchtype']
值并根据它选择另一个$_GET
变量,例如:
switch ($_GET['searchtype']) {
case 'Name':
$search = $_GET['query'];
break;
case 'Rating':
$search = $_GET['ratings'];
break;
case 'Class Location':
$search = 'other value';
break;
// add more cases as you wish
}
其他选项可以在您更改#searchtype
时使用javascript清除其他字段的值,但在这种情况下,select#ratings
仍会发送到服务器。