如何从多个嵌套的if条件中调用json

我正在使用CodeIgniter。 我正在处理批量列表的小项目。 现在如果管理员想要创建批处理列表,那么应该输入开始日期和结束日期以及开始时间和结束时间,然后它将在数据库中检查批处理在相同的日期和时间运行? 如果是,那么它将显示消息,否则它将创建新的批次列表。

如果日期相同,则时间应该不同。

现在我的逻辑是,我将第一个new_start_date与exist_start_date和exist_end_date进行比较,如果在中间找到了日期,那么它将检查时间。

它的工作直到日期比较。 即使它正在检查时间,但从那里如何退出进程并调用JSON? 因为从那里我的JSON无法正常工作。

我添加"echo "time not match";" 从那里我无法调用JSON我在网络选项卡上获得输出。

我得到了输出

 enter 1enter 2{"error":true,"msg":"Batch Created"}time not match 

你能帮助我吗?

  $id = $this->input->post('venue_id'); $venue_id = implode(',',$id); $activity_list_id = $this->input->post('activity_name'); $new_batch_start_date = date('Ym-d',strtotime($this->input->post('start_date'))); $new_batch_end_date = date('Ym-d',strtotime($this->input->post('end_date'))); $new_batch_start_time = $this->input->post('start_time'); $new_batch_end_time = $this->input->post('end_time'); $days = implode(',',$this->input->post('days')); //print_r($days); if($new_batch_start_date >= $new_batch_end_date) { $response['error'] = false; $response['msg'] = "End Date Should be Greater than Start Date"; echo json_encode($response); return false; } //convert in Time Format $new_batch_start_time = strtotime($new_batch_start_time); $new_batch_end_time = strtotime($new_batch_end_time); $venue = $this->input->post('name'); $data = array( 'activity_list_id' => $this->input->post('activity_name'), 'batch_venue_id' => $venue_id, 'batch_name' => $this->input->post('batch_name'), 'start_date' => date('Ym-d',strtotime($this->input->post('start_date'))), 'end_date' => date('Ym-d',strtotime($this->input->post('end_date'))), 'start_time' => $this->input->post('start_time'), 'end_time' => $this->input->post('end_time'), 'total_capacity' => $this->input->post('total_capecity'), 'batch_status' => 1, 'created_by' => trim($this->session->userdata['login_data']['user_id']), 'created_date' => date('dmY h:i:s A'), 'batch_days' => $days ); $get_batch_details = $this->Batch_model->fetchBatches(); if(!empty($get_batch_details)) { foreach ($get_batch_details as $rows) { $exist_batch_start_date = $rows->start_date; $exist_batch_end_date = $rows->end_date; $batch_time1 = strtotime($rows->start_time); $batch_time2 = strtotime($rows->end_time); $batch_venue_id = explode(',',$rows->batch_venue_id); $common_venue_id = array_intersect($id,$batch_venue_id); //print_r($common_venue_id); if($common_venue_id) { echo "enter 1"; //if new batch start date between existing batch start date if($exist_batch_start_date = $new_batch_start_date ){ echo "enter 2"; if($batch_time1  $new_batch_start_time){ $msg = "Other Batch Alredy Running On from Date $batch_start_date to $exist_batch_end_date on Time : $batch_time1 to $batch_time2. Please Change Time Slot or Start And End Date"; $response['error'] = false; $response['msg'] = $msg; echo json_encode($response); exit; } else{ $result = $this->Batch_model->createBatch($data); echo "time not match"; print_r($result); } break; } //if date is different else { $result = $this->Batch_model->createBatch($data); } }else { $result = $this->Batch_model->createBatch($data); } } } //first time creating batch else { $result = $this->Batch_model->createBatch($data); } 

MOBEL

 function createBatch($data){ if($this->db->insert('batch_list',$data)) { $response['error'] = true; $response['msg'] = "Batch Created"; echo json_encode($response); } else { $response['error'] = true; $response['msg'] = "Failed to Create Batch"; echo json_encode($response); } } function fetchBatches() { $result = $this->db->where(['batch_list.batch_status'=>1,'activity_list.act_status'=>1]) ->from('batch_list') ->join('activity_list','activity_list.activity_id = batch_list.activity_list_id') ->get() ->result(); return $result; } 

阿贾克斯

 success: function(response){ var data = JSON.parse(response); if (data.error == true){ swal({ title: "Success", text: data.msg , type: "success" }).then(function(){ location.reload(); } ); } else { swal({ title: "Warning", text: data.msg , type: "warning" }); } } 

你能在这个问题上帮助我吗?

你的整个方法有点乱,因为你发现自己有大量的冗余代码片段,没有人能够理解你想要什么 – 我在这里给你一些提示,包括一个基于你的代码的例子

  1. 使用例外 – 它非常适合你的情况 – 如果出现问题 – 停止它
  2. 尝试过滤您对一个单一任务的需求并尝试解决它 – 并且只有在那之后转到下一个任务
  3. 永远 – 永远记住 – 想想一个术语 – 如果你在你的应用程序中反复找到相同的代码 – 你知道有些错误 – 你应该重构它 – 不要为冗余而感到羞耻 – 它们总是会发生 – 但如果你发现他们,你必须重构那些代码片段

现在举个例子

你在这做什么工作?

  • 如果批处理已经在运行,您可以尝试询问您的数据库 – 您不需要遍历整个表条目
  • 比较管理员的两个输入日期 – 如果开始日期是结束日期的未来,则立即停止应用程序
  • 你的交集对我来说并不是很清楚你想要在这里实现什么 – 但我真的相信你也可以在这里询问数据库( find_in_setfind_in_set

基于这些信息,我们现在可以开始开发;)(如果我没有完成上面的列表并尝试实现您的任务)

控制器:

 try { $id = $this->input->post('venue_id'); $venue_id = implode(',',$id); $activity_list_id = $this->input->post('activity_name'); $new_batch_start_date = date('Ym-d',strtotime($this->input->post('start_date'))); $new_batch_end_date = date('Ym-d',strtotime($this->input->post('end_date'))); $new_batch_start_time = $this->input->post('start_time'); $new_batch_end_time = $this->input->post('end_time'); $days = implode(',',$this->input->post('days')); $objDateStart = DateTime::createFromFormat('Ymd h:i a', $new_batch_start_date.' '.$new_batch_start_time); $objDateEnd = DateTime::createFromFormat('Ymd h:i a', $new_batch_end_date.' '.$new_batch_end_time); if ($objDateEnd < $objDateStart) throw new Exception('End Date Should be Greater than Start Date'); if ($this->Batch_model->hasBatchesBetweenDates($objDateStart, $objDateEnd)) throw new Exception('Other Batch already running On from '.$objDateStart->format('dmY H:i').' to '.$objDateEnd->format('dmY H:i').'. Please Change Time Slot for Start and End Date'); $data = array( 'activity_list_id' => $this->input->post('activity_name'), 'batch_venue_id' => $venue_id, 'batch_name' => $this->input->post('batch_name'), 'start_date' => $objDateStart->format('Ym-d'), 'end_date' => $objDateEnd->format('Ym-d'), 'start_time' => $objDateStart->format('H:i'), 'end_time' => $objDateEnd->format('H:i'), 'total_capacity' => $this->input->post('total_capecity'), 'batch_status' => 1, 'created_by' => trim($this->session->userdata['login_data']['user_id']), 'created_date' => date('dmY h:i:s A'), 'batch_days' => $days ); $this->Batch_model->createBatch($data); } catch(Exception $e) { $arrError = [ 'error' => false, 'msg' => $e->getMessage() ]; echo json_encode($arrError); } 

模型:

 public function hasBatchesBetweenDates(DateTime $objDateStart, DateTime $objDateEnd) { $query = $this->db ->from('batch_list') ->join('activity_list','activity_list.activity_id = batch_list.activity_list_id') ->where('CONCAT(start_date,\' \',start_time) >=', $objDateStart->format('Ymd H:i:s')) ->or_group_start() ->where('CONCAT(end_date, \' \', end_time) <=', $objDateEnd->format('Ymd H:i:s')) ->where('CONCAT(end_date, \' \', end_time) >=', $objDateStart->format('Ymd H:i:s')) ->group_end() ->get(); return ($query->num_rows() > 0); } 

我希望你理解这里的概念 – 如果你有问题 – 请不要犹豫