【问题标题】:CodeIgniter - Enter data into textbox and check for matching record from database on submitCodeIgniter - 在文本框中输入数据并在提交时检查数据库中的匹配记录
【发布时间】:2014-10-18 11:09:09
【问题描述】:

我有一个 CodeIgniter 应用程序,我需要在一个名为 meal_add.php 的视图页面中的表单中添加一些信息。这是表格:

 <div id="content" class="box">
                <form action="<?php echo base_url(); ?>index.php/admin_logins/meal2" 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" value="1" onchange="valueChanged()"/>
                        </div>
                        <br>
                        <div id = "guestnum" hidden = "true">
                            <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>

我的控制器添加方法-

function meal2()
{
    if($_POST)
    {
        date_default_timezone_set('Asia/Dacca');
        $mdata['emp_id'] = $this->input->post('emp_id');
        $mdata['entry_date'] = date('Y-m-d');
        $mdata['is_guest'] = $this->input->post('is_guest_checkbox');
        $mdata['num_of_guest'] = $this->input->post('num_of_guest');

        $mdata['remarks'] = $this->input->post('remarks');
        $res = $this->meal_model->insert_meal($mdata);
        if($res)
        {   
            $this->session->set_flashdata('message','Meal information added successfully');
            redirect("admin_logins/meal");
        }
    }
    else
    {
        $this->load->view('admin_logins/meal_add');
    }

}

还有我的模型方法——

public function insert_meal($data)
{
    return $this->db->insert('meal', $data);    
}

我有一个名为employee的表,结构如下:

    column              data type
      id                 int PK
    emp_id             varchar(15)
   emp_name            varchar(50)
 emp_mobile_no         varchar(15)

我还有一张表名为meal,结构如下:

    column              data type
      id                 int PK
    emp_id             varchar(15)
   entry_date             date
   is_guest               int
 num_of_guest             int
   remarks                text

我需要做的是:每当我在表单meal_add.php 页面的员工ID 文本框中输入ID 时,系统将确定我输入的ID 文本是否与employee.emp_id 的值匹配。如果找到匹配,则meal表中的数据将成功保存为meal.emp_id,保存的值为对应的employee.idemployee表的主键列中的值) .如果未找到匹配项,则会在我的meal_add.php 视图页面顶部显示一条 php flash 消息,指出 ID 不存在。我知道需要一个 JOIN 查询,但文本匹配部分对我来说似乎非常困难,我不知道如何组织我的代码以及将它们放在哪里。请帮帮我。

我的数据库是 MySQL。

编辑 - 1:

我已经在我的控制器方法中完成了这个 -

    $temp = $this->input->post('emp_id');
    $sql = "SELECT e.id FROM employee AS e WHERE e.emp_id = ?";
    $mdata['emp_id'] = $this->db->query($sql, $temp)->emp_id;


    if($mdata['emp_id'] == '')
    {
        $this->session->set_flashdata('message','Employee ID does\'nt exist');
        redirect("admin_logins/meal");
    }

无论我在 $temp 中提供什么值,我总是会收到 Flash 消息并被重定向。

我也这样做了-

    echo "<pre>";
    print_r($mdata);
    die();

在做了echoprint_r() 之后,我得到了这个 -

  A PHP Error was encountered

  Severity: Notice

  Message: Undefined property: CI_DB_mysql_result::$emp_id

  Filename: controllers/admin_logins.php

  Line Number: 150

  Array
  (
      [emp_id] => 
  )

【问题讨论】:

    标签: php html mysql codeigniter


    【解决方案1】:

    我想你追求的是$this-&gt;db-&gt;insert_id()

    这里的文档:https://ellislab.com/codeigniter/user-guide/database/helpers.html

    还请查看正确的form validation for codeigniter

    更新

    抱歉,我在浏览问题时误读了。请看generating query results

    $q = $this->db->query($sql, $temp);
    if ($q->num_rows() > 0) {
        // having a match means the emp_id is valid
        $row = $q->row();
    
        // you can now use $row->emp_id to insert to other table
        $ID = $row->emp_id;
    } else {
        $this->session->set_flashdata('message','Employee ID does\'nt exist');
        redirect("admin_logins/meal");
    }
    

    为什么emp_id 是餐桌上的varchar?如果是外键,则类型匹配会有所帮助,int 在匹配(连接表)时会快很多。

    【讨论】:

    • $this-&gt;db-&gt;insert_id() 在我的控制器中?等一下,我不只是插入任何 id,我想从另一个 TABLE 的另一个表中插入 id。emp_id = $this->input->post('emp_id')。 id 是主键,int 列,而emp_id 是非主键 varchar 列。请查看我在问题中发布的两个表结构。谢谢你的回答。
    • 更新了我的答案,看看是否有帮助。
    • 刚刚看到你的答案。好像没问题,虽然我还没有检查,但我明天早上会。你是对的,employee.emp_id 是 varchar,但 meal.emp_id 不应该是,因为它是 meal 中的外键,employee 中的主键,所以它绝对应该是 int。我已经在我的数据库中修复了这个问题,我只是忘记更新我的帖子了。
    • 好的。当我尝试你的答案时,我得到了正确的数据。但是还是有问题。当我这样做时 - $mdata['emp_id'] = $row-&gt;emp_id,然后是 echo "&lt;pre&gt;"print_r($madata),我收到以下错误 - A PHP Error was encountered Severity: Notice Message: Undefined property: stdClass::$emp_id
    【解决方案2】:

    做了一些巨大的改变:

    控制器 -

    function meal2()
    {
        if($_POST)
        {
            date_default_timezone_set('Asia/Dacca');
            $temp = $this->input->post('emp_id');
    
            $query = $this->db->query("SELECT id FROM employee WHERE emp_id = '$temp' ")->result_array();
    
            $mdata['emp_id'] = $query[0]['id'];
    
            if($mdata['emp_id'] == '')
            {
                $this->session->set_flashdata('message','Employee ID doesn\'t exist');
                redirect("admin_logins/meal");
            }
    
    
            $mdata['entry_date'] = date('Y-m-d');
            $mdata['is_guest'] = $this->input->post('is_guest_checkbox');
            $mdata['num_of_guest'] = $this->input->post('num_of_guest');
    
            $mdata['remarks'] = $this->input->post('remarks');
    
            $res = $this->meal_model->insert_meal($mdata);
            if($res)
            {   
                $this->session->set_flashdata('message','Meal information added successfully');
                redirect("admin_logins/meal");
            }
        }
        else
        {
            $this->load->view('admin_logins/meal_add');
        }
    
    }
    

    同样在控制器中另一个名为meal()的方法中——

        $data['myQuery'] = $special_query = $this->db->query("SELECT m.id, e.emp_id, m.entry_Date, m.is_guest, m.num_of_guest, m.remarks FROM meal m LEFT JOIN employee e ON e.id = m.emp_id")->result_array();
    

    不得不使用LEFT JOIN(我最喜欢的)来检索相关信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 2016-08-24
      • 2021-10-02
      • 1970-01-01
      相关资源
      最近更新 更多