之前我自己发布了一个关于这个问题的答案,相信我已经找到了解决方案。然而,就在今天早上,我发现我错了。它只是部分解决了。所以,我决定删除这个答案,并完全编辑这篇文章。
在我的CodeIgniter应用程序中,我有以下视图页-meal_add.php
,并且有一个表单。表单下面有一个提交按钮。表单方法应该是"post"
。如果我点击提交按钮,数据就会保存在数据库中。代码如下:
<form action="javascript:checkTime();" method="post">
<fieldset>
<legend id="add_employee_legend">Add Meal Information</legend>
<div>
<label id= "emp_id_add_label">Employee ID:</label>
<input type="text" name="emp_id" id = "employee_id_add" placeholder="Employee ID" required="1"/>
</div>
<br>
<div>
<label id= "is_guest_add_label">Guests?</label>
<input type="checkbox" name ="is_guest_checkbox" class ="guestcheck" checked="checked" value="1" onchange="valueChanged()"/>
</div>
<br>
<div id = "guestnum">
<label id= "num_of_guest_add_label">No. of Guests:</label>
<input type="text" name="num_of_guest" id = "num_of_guest_add" placeholder='0'/>
</div>
<div>
<label id= "remarks_add_label">Remarks:</label>
<textarea rows="1" cols="20" style="margin-left: 35px"></textarea>
</div>
<input type="submit" name="submit" id = "meal_info_submit" value="Save Meal Information"/>
<button id = "cancel_button" onclick="location.href='<?php echo base_url();?>index.php/admin_logins/meal'">Cancel</button>
</fieldset>
</form>
现在,我想在点击提交按钮时做一个特定的条件检查。基于检查,我将允许提交数据和重定向页面。所以我的JavaScript函数如下:
<script>
function checkTime()
{
var today = new Date();
var hour = today.getHours();
if(hour < '12')
{
location.href='<?php echo base_url();?>index.php/meals/insert_meal_db';
}
else
{
alert("You can't place an order after 12 pm.");
location.href='<?php echo base_url();?>index.php/admin_logins/meal';
}
}
</script>
这一点很好——每当我试图在晚上12点后提交数据时,都会收到一条警告消息,说我在下午12点后无法下单,停止提交数据并重定向到另一个页面。然而,当时间在下午12点之前时,数据应该在点击时提交,即表格方法应该发布。但数据似乎不是点击提交的,表单方法"post"
根本不起作用。我得到的只是数据库中的0。
我的控制器插入方法-
public function insert_meal_db()
{
date_default_timezone_set('Asia/Dacca');
$mdata['emp_id'] = $this->input->post('emp_id');
$mdata['is_guest'] = $this->input->post('is_guest');
$mdata['num_of_guest'] = $this->input->post('num_of_guest');
$mdata['remarks'] = $this->input->post('remarks');
if($mdata['num_of_guest'] == 0)
{
$mdata['bill'] = 35.00;
}
else
{
$mdata['bill'] = 35.00 + (35.00 * $mdata['num_of_guest']);
}
$res = $this->meal_model->insert_meal($mdata);
if($res)
{
$this->session->set_flashdata('message','Meal information added successfully');
header('location:'.base_url()."index.php/meals/".$this->index());
}
}
注意,$mdata['bill']
不是来自$this->input->post()
,而是来自计算。因此,我在数据库中根据计算得到$mdata['bill']`的数据,而不是0。但对于其他专栏,我得到的是0。
我的模型插入方法-
//To add a new meal to the database
public function insert_meal($data)
{
return $this->db->insert('meal', $data);
}
我的表名是meal
,数据库是MySQL,这是表结构:
Column Name Data Type
id int PK
emp_id varchar(15) NOT NULL
is_guest int NOT NULL
num_of_guest int
bill int NOT NULL
remarks text
有趣的是,尽管我的emp_id
列是VARCHAR NOT NULL
列,但保存在那里的数据是0。
为了在提交表单之前检查验证,您需要执行以下任务:
<form id="form" onSubmit="return checkSubmit();" action="#">
和javascript表单验证使用:
function checkSubmit(){
if (validationCorrect()) {
$('#form').submit();
}
}
希望你明白这个概念。
如果时间更长,似乎需要停止提交表单
<input type="submit" name="submit" id = "meal_info_submit" onclick="return checkTime()" value="Save Meal Information"/>
Javascript函数类似于
<script>
function checkTime()
{
var today = new Date();
var hour = today.getHours();
if(hour > '12')
{
alert("You can't place an order after 12 pm.");
location.href='<?php echo base_url();?>index.php/admin_logins/meal';
} else {
return true;
}
}
</script>