この質問がばかげているかもしれないが、私はプログラミングが比較的新しいです。私は自分のウェブサイトに予約機能を持っていて、自分のフォーム検証(MY_Form_validation)を作成して、その日の特定の時間帯にスロットが使用されているかどうかを確認しました。ユーザーは、予約を開始する時間と、以下に示すように終了する時間を選択します。 Codeigniter - Foreachが1行だけを返す
基本的に、予約は朝の午前10時から午前1時までです。 10:00 = '10'、11:00 = '11'、12:00 = '12'、1:00 = '13'、2:00 = '時間の値は次のようになります。 14 '... 1:00 =' 25 '
時間が予約されているときはいつでもスイッチとして機能する配列を作成しました。私がしたことは、特定の日付を持つすべての行を取得するforeachを作成し、1時間に撮影されたスロットをシミュレートするために配列を '切り替える' whileループを作成することでした。 foreachループは最初の行のみを読み取るため、配列は最初の行でのみ変更され、他の行では変更されません。
例:(上記のSQLテーブルを参照してください) 開始値が17、終了値が19の時間を予約すると、検証が機能し、「タイムスケジュールはすでに予約されています」というメッセージが返されます。これは最初の行であるためです。ただし、開始値が11、終了値が14(2行目)の時間を予約すると、検証が機能せず、予約がプッシュされます。 これを正しく行うにはどうすればよいですか?どうもありがとう!
フォーム検証機能:
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行に限定しており、それに気付かなかった。みんなありがとう。 – coderszx