【发布时间】:2015-04-29 18:47:53
【问题描述】:
我正在处理一种目录。一个选择部分有一个用户可以选择他们的状态的地方。下一个选择部分包含 4 个列表值。
当他们选择适当的状态和列表类型时,它应该撤回该状态的列表。
很遗憾,我遇到了 2 个问题。
前 4 种列表类型运行良好。如果您选择加利福尼亚并且前 2 个列表类型之一,所有数据都会返回。但是,如果您选择一个州和清单类型 3 - 4,它会引发我创建的错误“请选择一个州和一个清单类型”。这没有意义,因为第 3 和第 4 个列表类型的代码与第 2 个相同。
我正在使用 switch 命令来触发每个状态的类 >> 功能。我已经提供了这个样子的精简版本,但是我有 600 多行 switch/case 语句,这似乎太过分了。但是不要使用 if/elseif 命令会更多产。
HTML
<form action="" method="post">
<select name="state">
<option>Choose State</option>
<option value="AL">AL</option>
<option value="AK">AK</option>
<option value="AZ">AZ</option>
<option value="AR">AR</option>
</select>
<select name="type">
<option>Type</option>
<option value="location">Location</option>
<option value="hotels">Hotels</option>
<option value="cars">Cents</option>
<option value="trucks">Trucks</option>
</select>
<p><input type="submit" name="submit" value="Search For" /></p>
</form>
PHP
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$state = $_POST['state'];
$accommodation_type = $_POST['accommodation-type'];
if( isset($state) && (isset($accommodation_type)) ) {
if($accommodation_type == 'location') {
require('includes/location.php');
switch($state) {
case $state == 'AL':
$location = new Location();
$location->Alabama_Location();
break;
case $state == 'AK':
$location = new Location();
$location->Alaska_Location();
break;
case $state == 'AZ':
$location = new Location();
$location->Arizona_Location();
break;
}
}
elseif($accommodation_type == 'hotels') {
require('includes/hotels.php');
switch($state) {
case $state == 'AL':
$hotel = new Hotels();
$hotel->Alabama_Hotels();
break;
case $state == 'AK':
$hotel = new Hotels();
$hotel->Alaska_Hotels();
break;
case $state == 'AZ':
$hotel = new Hotels();
$hotel->Arizona_Hotels();
break;
}
} else {
echo "Please choose a state and an accommodation type";
}
} else {
} } else {}
所以我需要一种方法来简化这一点,因为我已经浓缩了这一点,当你统计 50 个州 x 4 个类别时,你会得到 200 个案例陈述。显得过分了。
此外,我仍然不明白为什么它会为前 2 个选项加载正确的数据,而不是最后 2 个,因为我所做的只是复制工作代码并使用不同的数据重复它。
另外,它不会检查是否同时选择了状态和类型。它仅在未选择状态时向用户显示警告。
有什么想法吗?感谢您的帮助。
【问题讨论】:
-
为什么每个类别的每个状态都有一个对象?为什么不是
$hotel = new Hotels($state);,然后是$hotel->Hotels();?或者直接修改为$hotel->Hotels($state);。而且您的if语句缺少"cars"和"trucks"的选择器。 -
我认为你需要在你的帖子中获得
$_POST['type']而不是$_POST['accommodation-type']
标签: php forms switch-statement