主頁 > 軟體工程 > 使用單一表單進行插入和更新功能,Codeigniter

使用單一表單進行插入和更新功能,Codeigniter

2022-05-16 15:20:28 軟體工程

我正在嘗試使用單個表單來插入新資料并更新現有資料的值。我可以輕松顯示表單、獲取資料并更新它,但是當我嘗試插入新資料時,表格沒有出現。這是我的控制器

<div class="card-body">
   <small><?php echo validation_errors(); ?></small>
    <?php if (isset($packages)) { ?>
    <form action="<?= base_url('admin/update_package/' . $packages->id) ?>" method="POST" enctype="multipart/form-data">
    <div class="form-group">
   <label for="name" class="control-label">Package Name</label>
    <input type="text" class="form-control mb-3" name="title" placeholder="Enter Package Name" value="<?php echo !empty($packages->title) ? $packages->title : ''; ?>">
  </div>
 <div class="form-group">
   label for="short_name" >Inclusions</label>
   <textarea id="compose-textarea" class="form-control" name="tour_location" style="height: 300px;"><?php echo !empty($packages->tour_location) ? $packages->tour_location : ''; ?></textarea>
</div>
<div class="form-group">
<label for="short_name" class="control-label">Description</label>
 <textarea id="compose-textarea2" class="form-control" name="description" style="height: 300px;"><?php echo !empty($packages->description) ? $packages->description : ''; ?></textarea>
 </div>
 <div class="form-group">
 <label for="price" class="control-label">Price</label>
<input type="number" step="any" class="form-control form" required name="cost" value="<?php echo !empty($packages->cost) ? $packages->cost : 0; ?>">
 </div>
 <div class="form-group">
 <label for="status" class="control-label">Status</label>
  <select name="status" id="status" class="custom-select select">
 <option value="1" <?php echo isset($status) && $status == 1 ? 'selected' : '- Select Status -' ?>>Active</option>
<option value="0" <?php echo isset($status) && $status == 0 ? 'selected' : '- Select Status -' ?>>Inactive</option>
</select>
</div>
 <div class="form-group">
<label for="short_name" class="control-label">Images</label>
 <div class="custom-file">
 <label class="btn custom-file-label text-light" for="customFile">Choose file
<input type="hidden" name="current_image" value="<?php echo !empty($packages->upload_path) ? $packages->upload_path : ''; ?>">
<input type="file" class="form-control custom-file-input" id="customFile" name="image" multiple accept="image/*"><small><?php if (isset($error)) {
echo $error;} ?></small>
</label>
</div>
</div>
<?php 
 } ?>
 <!-- <div >
<img src="<?php echo base_url('images/' . $packages->upload_path) ?>" alt="使用單一表單進行插入和更新功能,Codeigniter" >
</div> -->

 <div class="card-footer">
  <input type="submit" name="packageData" class="btn btn-success " value="Save">
  <a class="btn btn-flat btn-default" href="<?php echo base_url('admin/packages'); ?>">Cancel</a>
    </div>
  </form>
  </div>

我的模型

 public function insert($data = array())
    {
        if (!empty($data)) {
            $this->db->insert('packages', $data);

            return $this->db->insert_id();
        }
        return false;
    }
public function edit($id)
    {
        $query = $this->db->get_where("packages", array('id' => $id));

        return $query->row();
    }

    public function update($data, $id)
    {
        return $this->db->update("packages", $data, array('id' => $id));
    }

然后控制器

public function insert_package()
    {
        $packageData = array();

        // If add request is submitted
        if ($this->input->post('packageData')) {
            // Form field validation rules
            $this->form_validation->set_rules('title', 'Package Name', 'required');
            $this->form_validation->set_rules('tour_location', 'Inclusions', 'trim');
            $this->form_validation->set_rules('description', 'Description', 'trim|required');
            $this->form_validation->set_rules('cost', 'Price', 'required');
            $this->form_validation->set_rules('status', 'Status', 'required');
            // $this->form_validation->set_rules('image', 'Images', 'required');

            // Validate submitted form data
            if ($this->form_validation->run() == true) {
                $ori_filename = $_FILES['image']['name'];
                $update_image = time() . "" . str_replace(' ', '-', $ori_filename);
                $config = [
                    'upload_path' => './images',
                    'allowed_types' => 'gif|jpg|png',
                    'file_name' => $update_image,
                ];

                $this->load->library('upload', $config);

                if (!$this->upload->do_upload('image')) {
                    $error = array('error' => $this->upload->display_errors());
                    $this->load->view(base_url('admin/packages'), $error);
                } else {

                    $image = $this->upload->data('file_name');
                    $packageData = array(
                        'title' => $this->input->post('title'),
                        'tour_location' => $this->input->post(htmlentities('tour_location')),
                        'description' => $this->input->post(htmlentities('description')),
                        'cost' => $this->input->post('cost'),
                        'status' => $this->input->post('status'),
                        'upload_path' => $image
                    );
                    $img = new Admin_model;
                    // Insert member data
                    $img->insert($packageData);
                    $this->session->set_flashdata('status', 'Package InsertedSuccesfully');
                    redirect(base_url('admin/packages'));
                }
            }
        }

        $data['title'] = 'Add Package';

        $this->load->view('../admin/template/admin_header');
        $this->load->view('../admin/template/admin_topnav');
        $this->load->view('../admin/template/admin_sidebar');
        $this->load->view('../admin/packages/manage_package', $data);
        $this->load->view('../admin/template/admin_footer');
    }

    public function edit_package($id)
    {
        $data['title'] = 'Update Package';

        $this->load->view('../admin/template/admin_header');
        $package = new Admin_model;
        $data['packages'] = $package->edit($id);
        $this->load->view('../admin/template/admin_topnav');
        $this->load->view('../admin/template/admin_sidebar');
        $this->load->view('../admin/packages/manage_package', $data);
        $this->load->view('../admin/template/admin_footer');
    }

    public function update_package($id)
    {
        $this->form_validation->set_rules('title', 'Package Name', 'required');
        $this->form_validation->set_rules('tour_location', 'Inclusions', 'trim');
        $this->form_validation->set_rules('description', 'Description', 'trim|required');
        $this->form_validation->set_rules('cost', 'Price', 'required');
        $this->form_validation->set_rules('status', 'Status', 'required');

        if ($this->form_validation->run() == true) {
            $current_image = $this->input->post('current_image');
            $new_image = $_FILES['image']['name'];

            if ($new_image == TRUE) {

                $update_image = time() . "-" . str_replace(' ', '-', $_FILES['image']['name']);
                $config = [
                    'upload_path' => './images',
                    'allowed_types' => 'gif|jpg|png',
                    'file_name' => $update_image,
                ];

                $this->load->library('upload', $config);

                if (!$this->upload->do_upload('image')) {
                    if (file_exists('./images' . $current_image)) {
                        unlink('./images' . $current_image);
                    }
                }
            } else {
                $update_image = $current_image;
            }

            $packageData = array(
                'title' => $this->input->post('title'),
                'tour_location' => $this->input->post(htmlentities('tour_location')),
                'description' => $this->input->post(htmlentities('description')),
                'cost' => $this->input->post('cost'),
                'status' => $this->input->post('status'),
                'upload_path' => $update_image
            );
            
            $this->Admin_model->update($packageData, $id);
            $this->session->set_flashdata('status', 'Package InsertedSuccesfully');
            redirect(base_url('admin/packages/'));
        } else {
            return $this->edit_package($id);
        }
    }

我在這里找到了一個問題以及一個答案和建議,但我仍然無法解決我的問題。

uj5u.com熱心網友回復:

重用表單進行插入和更新的最簡單方法是將表單操作留空。如果表單操作留空,則表單將發送回用于顯示它的同一 URL。如果您使用相同的方法(一種用于插入,一種用于更新)來處理和呈現 from,則此方法有效。

由于您的更新表單處理位于admin/update_package/$id,但您的更新表單呈現位于admin/edit_package/$id,因此您需要指定的表單操作取決于您用于顯示更新表單的 URL。

如果您使用鏈接來admin/update_package/$id顯示更新表單,您可以將表單操作留空(或將其完全洗掉):<form method="POST" enctype="multipart/form-data">

update_package然后運行表單驗證,然后用于edit_package顯示表單,但 URL 仍然admin/update_package/$id是您要發回的位置,因此不需要表單操作。

在這種情況下,我建議您也將edit_package控制器中的方法設為私有,這樣您就不會意外地通過edit_packageURL 顯示表單:private function edit_package($id)


但是,如果您使用指向/該 URL 的鏈接admin/edit_package/$id來顯示更新表單,則回發到該 URL 不會觸發表單處理,因此在這種情況下您確實需要指定表單操作。

您可以使用該$packages變數來判斷表單是用于插入還是更新,如果存在,則將操作設定為update_packageURL :$packagesaction="<?= isset($packages) ? base_url('admin/update_package/'.$packages->id) : ''; ?>"

然后 Insert 獲得一個空操作,該操作回發到用于呈現插入表單的同一 URL。


編輯:還要洗掉<?php if (isset($packages))表單周圍的,否則它也不會在插入時顯示。

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/475503.html

標籤:php 代码点火器

上一篇:填充動態下拉串列,Codeigniter

下一篇:為什么在python中列印今天的日期時會出現這樣的錯誤?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more