【发布时间】:2017-07-15 04:11:34
【问题描述】:
对不起,如果这个问题可能很愚蠢,但我对编程比较陌生。我的网站中有一个预订功能,我创建了自己的表单验证 (MY_Form_validation) 来检查一天中的特定时间是否占用了一个时段。用户选择他们想要开始预订的时间以及他们想要结束预订的时间,如下所示。
基本上,预订时间为上午 10:00 至凌晨 1:00。在表格中,小时的值如下:10:00 = '10', 11:00 = '11', 12:00 = '12', 1:00 = '13', 2:00 = ' 14' ... 1:00 = '25'
我创建了一个数组,该数组将在预留时间时用作开关。我所做的是创建一个 foreach 来获取具有特定日期的所有行,并创建一个 while 循环来“切换”数组以模拟一个小时的占用时间。发生的情况是 foreach 循环只读取第一行,因此数组只被第一行修改,而不是其他行。
例子:(参考上面的sql表) 如果我保留开始值为 17 和结束值为 19 的小时数,则验证有效并返回“时间表已被预订”消息,因为它是第一行。但是,如果我保留起始值为 11 且结束值为 14(第二行)的小时数,则验证不起作用,并且保留通过。 我该如何正确地做到这一点?非常感谢!
表单验证函数:
function unique_reserve_clubhouse()
{
$reservedate = $this->CI->input->post('datepick');
$reservestart = $this->CI->input->post('reservestart');
$reserveend = $this->CI->input->post('reserveend');
$checkstart = $this->CI->db->get_where('clubhouse_reservation', array('reservation_date' => $reservedate, 'reservation_start' => $reservestart, 'reservation_status' => 1), 1);
$checkresult = $this->CI->db->get_where('clubhouse_reservation', array('reservation_date' => $reservedate, 'reservation_status' => 1));
$resultreserve = $checkresult->result();
$tdX = array(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);
foreach($resultreserve as $result)
{
while($result->reservation_start < $result->reservation_end)
{
$tdX[$result->reservation_start] = 1;
$result->reservation_start++;
}
}
if($checkstart->num_rows() > 0 || $tdX[$reservestart] == 1 || $tdX[$reserveend] == 1) {
$this->set_message('unique_reserve_clubhouse', 'This time schedule is already booked.');
return FALSE;
}
return TRUE;
}
【问题讨论】:
-
现在修复它,愚蠢的错误。我将查询结果限制为仅 1 行,并没有注意到它。谢谢大家。
标签: php arrays codeigniter foreach