如何在CodeIgniter中单击按钮控制过帐表单数据


How to control posting form data on button click in CodeIgniter

之前我自己发布了一个关于这个问题的答案,相信我已经找到了解决方案。然而,就在今天早上,我发现我错了。它只是部分解决了。所以,我决定删除这个答案,并完全编辑这篇文章。

在我的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>