Php 代码点火器-Foreach仅返回1行

Php 代码点火器-Foreach仅返回1行,php,arrays,codeigniter,foreach,Php,Arrays,Codeigniter,Foreach,很抱歉,如果这个问题可能很愚蠢,但我对编程比较陌生。我在我的网站上有一个预订功能,我创建了我自己的表单验证(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' 我创建了一个数组,它将在保留小时后用作开关。我

很抱歉,如果这个问题可能很愚蠢,但我对编程比较陌生。我在我的网站上有一个预订功能,我创建了我自己的表单验证(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;
}
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'=>$reservedstart',reservation_status'=>1),1);
$checkresult=$this->CI->db->get_where('clubhouse_reservation',array('reservation_date'=>$reservedate',reservation_status'=>1));
$resultreserve=$checkresult->result();
$tdX=数组(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)
{
而($result->reservation\u start<$result->reservation\u end)
{
$tdX[$result->预订\开始]=1;
$result->reservation_start++;
}
}
如果($checkstart->num_rows()>0 | |$tdX[$reservestart]==1 | |$tdX[$reserveend]==1){
$this->set_message('unique_reserve_clubhouse','此时间表已预订');
返回FALSE;
}
返回TRUE;
}

尝试查看多行

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), 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 $key => $value)
{
   echo $key.''.$value; //Here i have put echo so that you can check it here only.
}

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;
}

请尝试查看多行

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), 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 $key => $value)
{
   echo $key.''.$value; //Here i have put echo so that you can check it here only.
}

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;
}
尝试以下方法:

$condition = "reservation_date ='" .$reservedate . "'";
$this -> db -> select('*');
$this -> db -> from('clubhouse_reservation');
$this -> db -> where($condition);
foreach( $query -> result() as $record){
 if($record->reservation_start >= $reservestart && $record->reservation_end <= reserveend){
    //Has someone reserved      
    break;
 }
}
$condition=“reservation\u date=”$reservedate。"'";
$this->db->select('*');
$this->db->from('clubhouse_reservation');
$this->db->where($condition);
foreach($query->result()作为$record){
如果($record->reservation\u start>=$reservestart&&$record->reservation\u end尝试以下方法:

$condition = "reservation_date ='" .$reservedate . "'";
$this -> db -> select('*');
$this -> db -> from('clubhouse_reservation');
$this -> db -> where($condition);
foreach( $query -> result() as $record){
 if($record->reservation_start >= $reservestart && $record->reservation_end <= reserveend){
    //Has someone reserved      
    break;
 }
}
$condition=“reservation_date=”$reservedate.“;
$this->db->select('*');
$this->db->from('clubhouse_reservation');
$this->db->where($condition);
foreach($query->result()作为$record){
如果($record->reservation\u start>=$reservestart&&$record->reservation\u end1),您可以使用查询结果集进行检查。需要使用result\u array()检查结果集查询返回的确切内容(是返回所有行还是仅返回一行)。if可以了解有关您的查询的更多详细信息,请将其放在查询语句后的行下方

echo $this->CI->last_query(); die; echo$this->CI->last_query();die; 它会给你精确的查询,通过查询你会知道你哪里出错了

2) 如果它返回所有行,那么您需要使用foreach循环进行检查,

1)您可以只使用查询结果集进行检查。需要使用result\u array()检查查询结果集返回的确切内容(是返回所有行还是仅返回一行)。如果您想了解有关您的查询的更多详细信息,请在您的查询语句后的行下方输入

echo $this->CI->last_query(); die; echo$this->CI->last_query();die; 它会给你精确的查询,通过查询你会知道你哪里出错了


2) 如果它返回所有行,那么您需要检查foreach循环,并且

我尝试用上面的代码替换我的代码,但它仍然推送:/I尝试用上面的代码替换我的代码,并且它仍然推送:/t尝试上面的代码,保留仍然推送:/t尝试上面的代码,保留仍然推送hes通过:/SELECT*FROM
clubhouse_reservation
WHERE
reservation_date
='02/24/2017'和
reservation_status
=1这是显示的内容是的,所以只需检查您的查询是否返回所有行即可?您可以使用$checkresult->result_array()进行检查;如果返回所有行,则需要使用循环进行检查。从
clubhouse_reservation
WHERE
reservation_date
='02/24/2017'和
reservation_status
=1中选择*,这就是显示的内容YUP,因此只需检查您的查询是否返回所有行即可。您可以使用$checkresult->result_array()进行检查;如果返回所有行,则需要使用循环进行检查。立即修复,愚蠢的错误。我将查询结果限制为仅1行,但没有注意到。谢谢各位。立即修复,愚蠢的错误。我将查询结果限制为仅1行,但没有注意到。谢谢各位。