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

时间:2018-08-14 05:56:26

标签: php jquery json html5 codeigniter-3

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

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

现在我的逻辑是 我正在将第一个new_start_date与exist_start_date和exist_end_date进行比较,如果发现之间的日期,它将检查时间。

一直工作到比较为止。甚至它正在检查时间,但是从那里如何退出流程并调用JSON?因为从那里我的JSON无法正常工作。

我从此处添加了spring.session.jdbc.cleanup-cron=0 * * * * * # Cron expression for expired session cleanup job. spring.session.jdbc.initialize-schema=embedded # Database schema initialization mode. spring.session.jdbc.schema=classpath:org/springframework/session/jdbc/schema-@@platform@@.sql # Path to the SQL file to use to initialize the database schema. spring.session.jdbc.table-name=SPRING_SESSION # Name of the database table used to store sessions. ,但是我无法调用JSON,但我的网络标签上却显示了输出。

我正在获取输出

"echo "time not match";"

您能帮我这个忙吗?

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

Mobel

 $id                         = $this->input->post('venue_id');
    $venue_id                   = implode(',',$id);     
    $activity_list_id           = $this->input->post('activity_name');
    $new_batch_start_date       = date('Y-m-d',strtotime($this->input->post('start_date')));    
    $new_batch_end_date         = date('Y-m-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('Y-m-d',strtotime($this->input->post('start_date'))),     
          'end_date'         => date('Y-m-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('d-m-Y 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 && $exist_batch_end_date >= $new_batch_start_date ){ 

          echo "enter 2";
          if($batch_time1 <= $new_batch_start_time && $batch_time2 > $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);
    }

Ajax

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

在这个问题上您能帮我吗?

1 个答案:

答案 0 :(得分:0)

您的整个方法有点混乱,因为您发现自己陷入了大量的冗余代码片段中,而没人能理解您到底想要什么-我在这里为您提供一些提示,包括基于您的代码的示例

  1. 使用例外情况-非常适合您的情况-如果出现问题,请停止
  2. 尝试在一个任务范围内过滤您的需求,并尝试解决它-直到执行下一个任务
  3. 始终-永远记住-考虑一个术语-如果您在应用程序中发现重复相同的代码-您知道出了点问题-并且您应该重构它-不要为裁员感到羞耻-裁员总是会发生的-但是如果您发现裁员,则必须重构这些代码段

现在来看您的示例

您在这里做什么?

  • 您可以尝试询问您的数据库是否已在运行批处理-您无需遍历整个表条目
  • 比较来自管理员的两个输入日期-如果开始日期在结束日期的将来,请立即停止应用程序
  • 您的交叉点对我来说不是很清楚,但是我很确信你也可以在这里询问数据库(流行语:find_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('Y-m-d',strtotime($this->input->post('start_date')));    
    $new_batch_end_date = date('Y-m-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('Y-m-d h:i a', $new_batch_start_date.' '.$new_batch_start_time);
    $objDateEnd = DateTime::createFromFormat('Y-m-d 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('d-m-Y H:i').' to '.$objDateEnd->format('d-m-Y 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('Y-m-d'),     
        'end_date'         => $objDateEnd->format('Y-m-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('d-m-Y 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('Y-m-d H:i:s'))
    ->or_group_start()
        ->where('CONCAT(end_date, \' \', end_time) <=', $objDateEnd->format('Y-m-d H:i:s'))
        ->where('CONCAT(end_date, \' \', end_time) >=', $objDateStart->format('Y-m-d H:i:s'))
    ->group_end()
    ->get();

    return ($query->num_rows() > 0);
}

我希望您理解这里的概念-如果您有任何疑问-请不要犹豫地问