gpt4 book ai didi

php - 如何从多个嵌套if条件调用json

转载 作者:行者123 更新时间:2023-11-28 02:29:34 26 4
gpt4 key购买 nike

我正在使用 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('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);
}

莫贝尔

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

Ajax

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_set)

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

Controller :

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

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

关于php - 如何从多个嵌套if条件调用json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51834568/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com