我只需要从数据库中检查 Day is Blocked 是否在选择框中显示为已禁用,如果未在同一选择框中显示接下来的 2 个月的所有日期。 我得到 Closed(Blocked) 天没有问题,但是当我试图让剩下的日子我得到双倍的一切。如果不是其他数组不工作。 结果显示如下所示:
3 月 30 日,星期四, 3月30日星期四 甚至第一个循环的 DISABLED 日在循环后显示双倍。
我的sql
CREATE TABLE `check_availability` (
`id` int(10) NOT NULL,
`Day` varchar(10) NOT NULL,
`Open_hour` varchar(10) NOT NULL,
`Closed_hour` varchar(10) NOT NULL,
`ClosedDays` varchar(10) NOT NULL,
`Blocked` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `check_availability` (`id`, `Day`, `Open_hour`, `Closed_hour`, `ClosedDays`, `Blocked`) VALUES
(1, 'Sunday', '09:00am', '10:00pm', '', 1),
(2, 'Monday', '09:00am', '10:00pm', '', 1);
Mysqli 获取代码
$sqlClosedDays = "SELECT Day FROM check_availability WHERE Blocked ='1'";
$resultClosed = mysqli_query($con, $sqlClosedDays);
$DaysClosed = mysqli_fetch_all($resultClosed,MYSQLI_ASSOC);
我的 for 和 Foreach 循环导致日期显示双倍。
for($i=0;$i<=30;$i++){
//Get the Closed Days
//Display the Days according to limit
$day=date('l,d M',strtotime("+$i day"));
$Nday = date('l',strtotime("+$i day"));
$NdayTrim= substr($Nday, 0, 3);
$InsDay = date('Y-m-d',strtotime("+$i day"));
foreach ($DaysClosed as $rowDaysClosed) {
$dayClosed = $rowDaysClosed['Day'];
$dayClosedTrim= substr($dayClosed, 0, 3);
$dayTrim = substr($day, 0, 3);
//If not Closed set as available
if ($dayTrim === $dayClosedTrim ) {
echo "<option disabled value='$InsDay'>$day</option> ";
//$clDays[] = $day;
} else {
echo "<option name='add_r_date' id='add_r_date' value='$InsDay'>$day</option>";
}
}//EOF FOREACH LOOP
}//EOF FOR LOOP
echo "</select>";
我试过 unset($day);或取消设置($dayClosed);
我试过休息;在循环内,但问题仍然存在。
问题是值显示了 2 次。我只想显示关闭的日子(星期日)和(星期一)并显示休息日正常,以便人们可以选择可用的日期进行预订。
您可以使用 DISTINCT 方法:
$sqlClosedDays = "SELECT DISTINCT Day FROM check_availability WHERE Blocked ='1'";
或者您可以使用 GROUP BY 方法:
$sqlClosedDays = "SELECT Day FROM check_availability WHERE Blocked ='1' GROUP BY Day";