并且感谢你阅读我的问题。在PHP中使用for循环,我希望在业务的打开和关闭时间之间完成一个时间列表(偏移5分钟)的回显。这个挑战不是编程的问题,我的代码输出了一个巨大的<option>
标签列表,其中每个标签都有成功的时间值(偏移5分钟):
I.E:
<option value="2013-06-06 08:00:00">8:00 am</option>
<option value="2013-06-06 08:05:00">8:05 am</option>
<option value="2013-06-06 08:10:00">8:10 am</option>
.....etc.
但是,我有一个MYSQL表设置,每行中都有一列(以DATETIME格式设置),即开球时间......因为很多人可能知道你不能有多个人预定要立即开球,所以我试图把它放在哪里,如果那个时间(在for循环中)等于从数据库中取出的任何(预定的)时间,该值将不会在该列表中回显。
下面是我的代码,(至少for循环)这是输出<option>
标签的内容:
(同样如你所见,我试图在那里做一个IF声明,说明 $ time 等于 $ tee_times_from_mysql 不回应<option>
...然后继续检查下一个,依此类推。)但是,当我从MYSQL数据库中选择了 $ tee_times_from_mysql 时,它只用了最近预订的开球时间(只有一个)并且排除了......其余的被忽略了(或者根本就没有被取出,不确定)....所以如果有多个预定的开球时间(显然不会超过一个),它就不起作用那个)....我的问题是如何在数据库中的任何时候排除时间。
for ($i=$startHour; $i <= $endHour; $i++)
{
for ($j = 0; $j <= 55; $j+=5)
{
$time_pre = $i.":".str_pad($j, 2, '0', STR_PAD_LEFT);
$time = ''.$time_pre .' '.$day.'';
/////////////////////////////
$time_formated_for_cosmetic = date("g:i a", strtotime("$time"));
$time_formated_for_mysql = date("Y-m-d H:i:s", strtotime("$time"));
if ($time == $tee_times_from_mysql){
$time = '';
}
else{
$time = '<option value="' . $time_formated_for_mysql . '">'.$time_formated_for_cosmetic .'</option>';
}
echo $time;
}
}
$tee_times_from_mysql = "";
$sql = "SELECT * FROM tee_times";
$query = mysqli_query($db_conx, $sql);
while($row = mysqli_fetch_assoc($query)){
$tee_times_from_mysql = $row["date_time"];
$tee_times_from_mysql = date("G:i n/j/y", strtotime("$tee_times_from_mysql"));
}
答案 0 :(得分:1)
您的MySQL提取循环仅将$tee_times_from_mysql
设置为查询返回的最后一次,而不是全部。你需要使用一个数组。此代码创建一个数组,其键是所有时间:
$tee_times_from_mysql = array();
$sql = "SELECT * FROM tee_times";
$query = mysqli_query($db_conx, $sql);
while($row = mysqli_fetch_assoc($query)){
$tee_time = date("G:i n/j/y", strtotime($row["date_time"]));
$tee_times_from_mysql[$tee_time] = true;
}
然后创建选项的代码应如下所示:
if (isset($tee_times_from_mysql[$time])) {
$time = '';
} else {
$time = '<option value="' . $time_formated_for_mysql . '">'.$time_formated_for_cosmetic .'</option>';
}