CodeIgniter 4 中使用单选按钮更新数据库记录的教程

CodeIgniter 4 中使用单选按钮更新数据库记录的教程

本教程详细介绍了如何在 CodeIgniter 4 框架中,通过表单中的单选按钮(Radio Button)收集用户输入,并利用其强大的 Model 层来安全、高效地更新数据库中的指定记录。文章涵盖了视图、控制器和模型代码示例,并强调了正确识别更新记录的重要性。

在web应用开发中,从用户界面收集数据并更新数据库是常见的操作。codeigniter 4 提供了一套优雅的解决方案,特别是通过其模型(model)层,可以简化数据库交互。本教程将指导您如何利用html单选按钮(radio button)获取用户选择,并使用codeigniter 4的模型来更新数据库中的特定记录。

理解CodeIgniter 4的模型层

CodeIgniter 4 的模型层是处理数据库交互的核心组件。它封装了对数据库表的CRUD(创建、读取、更新、删除)操作,提供了更高级别的抽象,使得代码更易于维护、测试和扩展。相较于直接使用数据库查询构建器(Query Builder)进行复杂的更新操作,模型能够更好地管理数据映射、验证和生命周期事件。

构建数据更新流程

要实现从单选按钮更新数据库,我们需要在视图、控制器和模型之间建立清晰的交互。

1. 视图层:构建单选按钮表单

视图(View)负责呈现用户界面。我们将创建一个包含单选按钮的表单,允许用户选择一个选项并提交。为了确保更新特定记录,通常需要在表单中包含一个隐藏字段来传递该记录的唯一标识符(如ID)。

<form method="post" action="">                  

<input type="radio" name="anotasi" value="Positif" /> Positif
<input type="radio" name="anotasi" value="Negatif" /> Negatif
<input type="radio" name="anotasi" value="Netral" /> Netral

代码解释:

zuojiankuohaophpcn?= csrf_field() ?>: 这是CodeIgniter 4内置的CSRF保护机制,会在表单中生成一个隐藏的令牌字段,提高安全性。: 这个隐藏字段至关重要,它告诉控制器我们要更新的是哪条记录。在实际应用中,这个 value 会从数据库动态加载。name=”anotasi”: 所有单选按钮使用相同的 name 属性,确保它们是互斥的。value=”…”: 每个单选按钮的值,将被提交到服务器。: CodeIgniter的辅助函数,用于在表单提交失败或页面加载时保持单选按钮的选中状态。第三个参数 true 表示默认选中“Positif”。

2. 模型层:定义数据操作逻辑

接下来,我们需要创建一个模型来与 tbl_anotasi 表进行交互。

// app/Models/AnotasiModel.phpnamespace AppModels;use CodeIgniterModel;class AnotasiModel extends Model{    protected $table      = 'tbl_anotasi'; // 数据库表名    protected $primaryKey = 'id';          // 主键名,假设您的表主键是 'id'    protected $useAutoIncrement = true; // 主键是否自增    protected $returnType     = 'array'; // 返回类型,可以是 'array' 或 'object'    protected $useSoftDeletes = false;   // 是否使用软删除    protected $allowedFields = ['anotasi']; // 允许被更新的字段    // 如果需要,可以定义验证规则    protected $validationRules    = [];    protected $validationMessages = [];    protected $skipValidation     = false;}

代码解释:

$table: 指定模型关联的数据库表。$primaryKey: 指定表的主键字段,这对于 update() 方法至关重要。$allowedFields: 这是一个安全特性,定义了哪些字段可以通过 insert() 或 update() 方法批量赋值。未在此列表中定义的字段将被忽略,防止恶意数据注入。

3. 控制器层:处理请求并调用模型

控制器(Controller)负责接收HTTP请求,处理业务逻辑,并协调模型和视图。

// app/Controllers/Home.phpnamespace AppControllers;use AppModelsAnotasiModel; // 引入我们创建的模型use CodeIgniterController;class Home extends Controller{    public function savecovid()    {        // 1. 获取表单提交的数据        $recordId = $this->request->getPost('id');       // 获取要更新的记录ID        $anotasiValue = $this->request->getPost('anotasi'); // 获取单选按钮的值        // 确保获取到了ID和值        if (empty($recordId) || $anotasiValue === null) {            // 处理错误,例如重定向回表单并显示错误消息            return redirect()->back()->with('error', '缺少必要的更新参数。');        }        // 2. 实例化模型        $anotasiModel = new AnotasiModel();        // 3. 准备更新数据        $dataToUpdate = [            'anotasi' => $anotasiValue        ];        // 4. 调用模型的 update 方法        // update($id, $data) 方法会根据 $id 更新主键匹配的记录        $isUpdated = $anotasiModel->update($recordId, $dataToUpdate);        if ($isUpdated) {            // 更新成功,可以重定向到成功页面或显示成功消息            return redirect()->to('/success_page')->with('success', '记录更新成功!');        } else {            // 更新失败,可能是ID不存在或数据库错误            // 可以获取模型的错误信息:$anotasiModel->errors()            return redirect()->back()->with('error', '记录更新失败,请重试。');        }    }}

代码解释:

use AppModelsAnotasiModel;: 导入我们创建的模型类。$this->request->getPost(‘id’): 从表单中获取隐藏字段 id 的值,这是要更新的记录的主键。$this->request->getPost(‘anotasi’): 获取用户选择的单选按钮的值。$anotasiModel = new AnotasiModel();: 实例化模型。$anotasiModel->update($recordId, $dataToUpdate);: 这是核心的更新操作。CodeIgniter 4 的 Model 类提供了 update($id, $data) 方法,它会自动构建 WHERE primaryKey = $id 的条件,并使用 $data 数组中的键值对更新相应的字段。这比手动使用查询构建器更简洁和安全。redirect()->back()->with(‘error’, ‘…’): 更新失败时重定向回上一页并附带错误消息。redirect()->to(‘/success_page’)->with(‘success’, ‘…’): 更新成功时重定向到指定页面并附带成功消息。

完整示例代码(整合)

为了更清晰地展示,以下是视图、控制器和模型的整合示例。

1. app/Models/AnotasiModel.php

<?php namespace AppModels;use CodeIgniterModel;class AnotasiModel extends Model{    protected $table      = 'tbl_anotasi';    protected $primaryKey = 'id'; // 假设主键是 'id'    protected $useAutoIncrement = true;    protected $returnType     = 'array';    protected $useSoftDeletes = false;    protected $allowedFields = ['anotasi']; // 允许更新的字段    protected $validationRules    = [];    protected $validationMessages = [];    protected $skipValidation     = false;}

2. app/Controllers/Home.php

 'Negatif', // 假设当前记录的注解是 Negatif            'record_id' => 1 // 假设要编辑的记录ID是 1        ];        return view('home/edit_anotasi', $data);    }    public function savecovid()    {        $recordId = $this->request->getPost('id');        $anotasiValue = $this->request->getPost('anotasi');        if (empty($recordId) || $anotasiValue === null) {            return redirect()->back()->with('error', '缺少必要的更新参数。');        }        $anotasiModel = new AnotasiModel();        $dataToUpdate = [            'anotasi' => $anotasiValue        ];        $isUpdated = $anotasiModel->update($recordId, $dataToUpdate);        if ($isUpdated) {            return redirect()->to('/home/index')->with('success', '记录更新成功!');        } else {            // 可以在此处添加更详细的错误日志            return redirect()->back()->with('error', '记录更新失败,请重试。');        }    }}

3. app/Views/home/edit_anotasi.php

            更新注解        

更新注解类型

getFlashdata('success')): ?>
getFlashdata('success') ?>
getFlashdata('error')): ?>
getFlashdata('error') ?>
<form method="post" action=""> <input type="hidden" name="id" value="">

<input type="radio" name="anotasi" value="Positif" /> Positif
<input type="radio" name="anotasi" value="Negatif" /> Negatif
<input type="radio" name="anotasi" value="Netral" /> Netral

注意: 在 edit_anotasi.php 视图中,set_radio 的第三个参数现在会根据从控制器传入的 $current_anotasi 值来判断哪个单选按钮应该被预选中。

注意事项与最佳实践

记录ID的传递与识别: 更新操作必须明确指定要更新哪条记录。通常通过隐藏表单字段或URL参数传递记录的主键(ID)。在模型 update($id, $data) 方法中,$id 参数就是用来识别这条记录的。输入验证: 在控制器中接收用户输入后,强烈建议进行数据验证。CodeIgniter 4 提供了强大的验证服务。您可以在模型中定义验证规则,或者在控制器中直接使用 validate() 方法。错误处理与用户反馈: 无论更新成功还是失败,都应向用户提供清晰的反馈。使用 CodeIgniter 的 session()->setFlashdata() 可以在重定向后显示一次性消息。安全性:CSRF 保护: 在表单中是必不可少的,用于防止跨站请求伪造攻击。$allowedFields: 在模型中正确配置 $allowedFields 可以防止“大批量赋值漏洞”,即用户尝试更新不应该被修改的字段。输入过滤: 在将数据存入数据库之前,始终对用户输入进行过滤和转义,以防止SQL注入和XSS攻击。CodeIgniter 框架通常会处理大部分情况,但仍需保持警惕。

总结

通过本教程,您应该已经掌握了在 CodeIgniter 4 中使用单选按钮更新数据库记录的完整流程。核心在于利用 CodeIgniter 4 的模型层,特别是 update($id, $data) 方法,它提供了一种简洁、安全且符合框架最佳实践的方式来处理数据库更新操作。始终牢记传递记录ID、进行数据验证以及提供用户反馈的重要性,以构建健壮可靠的Web应用程序。

以上就是CodeIgniter 4 中使用单选按钮更新数据库记录的教程的详细内容,更多请关注php中文网其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/75131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月14日 07:39:37
下一篇 2025年11月14日 08:01:06

相关推荐

  • 比特币:从数字黄金到利润工具

    在这个时代,当比特币价格屡创新高时,越来越多的投资者开始重新思考投资策略:除了传统的“低买高卖”模式之外, 这篇名为《比特币如何实现每日收益?揭秘核心机制》的文章,介绍了一种不同于传统交易方式的投资路径,通过这种方式获取比特币投资的持续回报。 文章聚焦区块链云挖矿这一新兴方式,它正逐渐成为投资者获取…

    2025年12月8日
    000
  • 如果$ 15的水平翻转支持,则BlockDag(BDAG)价格预测显示了看涨的潜力

    chainlink(link)价格预测显示出15美元的支撑位,暗示了潜在的上涨动力,可能推动价格重返16美元。 在不断变化的加密货币市场中,老牌项目持续突破技术边界,而新兴项目则争夺文化主导地位。Chainlink(LINK)的价格走势显示出短期反弹迹象,当前关键支撑位位于14.00美元附近。与此同…

    2025年12月8日
    000
  • Bittensor(Tao)价格目前的交易约为434.25美元。这是到2030年可以成长的

    bittensor(tao)当前的价格约为434.25美元。这意味着,如果您今天投资10,000美元,您将获得大约23个tao代币。 对Bittensor(TAO)的1万美元投资在未来可能带来显著增长,特别是如果该项目能够在2030年之前成功实现其宏伟目标。以目前每个代币约434.25美元的价格计算…

    2025年12月8日
    000
  • Ripple扩展了区块链教育在亚太地区的推动力

    ripple加大对亚太地区(apac)的投资力度,向区块链研究与教育领域投入超500万美元。 此次投资主要通过其大学区块链研究计划(UBRI)在六个地区推进业务。其中包括续签韩国、日本和新加坡的现有合作,并在台湾和澳大利亚建立新的合作关系。 当前,亚太地区的金融科技发展势头迅猛,拥有全球最高密度的新…

    2025年12月8日
    000
  • 领先的加密货币交易所Kucoin列表Resolv(Resolv)协议

    这预示着一种由以太坊(eth)和比特币(btc)作为抵押支持的新型stablecoin背后的创新协议首次亮相于世人面前。 全球主要加密货币交易平台Kucoin宣布在其现货市场中上线Resolv(Resolv)交易对。 这一合作标志着Resolv协议发展过程中的一个重要节点,旨在打造一个无需信任且具备…

    2025年12月8日
    000
  • 韩国新总统李珍(Lee Jae-Myung)即将释放采用加密货币的潮流

    这位新当选的国家领导人与其在立法机构中的支持者正在履行其推动加密货币应用的承诺,并积极推动《数字资产基本法》的出台。 韩国新任总统李在明(Lee Jae-Myung)正准备对其国家的数字资产格局带来重大转变。 他与国会中的盟友正积极推进《数字资产基本法》,以兑现其对加密货币产业的支持承诺。 借助当前…

    2025年12月8日
    000
  • 哪些币种可以让投资者短期获利?如何选择?币圈短期获利币种推荐

    短期加密交易风险很高,但它是赚钱的最有利方式之一。如果您知道如何应用正确的策略,最重要的是选择正确的加密资产,您可以获得可观的利润,这正是我们今天要讨论的内容。 哪些币种可以让投资者短期获利?该如何选择?币圈短期获利币种推荐 如何选择短期交易的加密货币? 短期交易涉及购买加密货币并持有短时间,从几分…

    2025年12月8日 好文分享
    000
  • 稳定币龙头Circle要上市了!USDC上市潮能否引领币圈合规新局?

    circle作为第二大稳定币usdc的发行商,正式启动了在纽约证券交易所的ipo程序。这项举措不仅预计为公司筹集数亿美元资金,目标估值上看67亿美金。 发生什么事? Circle作为市值第二大稳定币USDC的发行商,正式启动了在纽约证券交易所(NYSE)的IPO程序,目标筹集超过5.7亿美元,估值上…

    2025年12月8日
    000
  • Sahara AI宣布将在Buidlpad上进行公售!收益能对标Solayer吗?

    日前区块链人工智能项目sahara ai宣布将在buidlpad上进行公售,本文将带你了解sahara ai是什么、投资背景、参与方式。 Sahara AI将AI资产上链 Sahara AI是主打去中心化人工智能(AI)区块链平台的EVMLayer1。在这条链上,无论是基础模型还是经过专门微调的版本…

    2025年12月8日
    000
  • Sahara AI是什么?去中心化AI区块链平台 完整指南

    目录 什么是 Sahara AI 平台?Sahara AI 平台和 Future Token 有什么区别?Sahara AI想要解决什么问题?1. 集中化​​和垄断控制2. 不公平的归因和补偿3. 缺乏透明度和问责制4. 进入壁垒和创新Sahara AI 融资和开发背后的故事Sahara AI 平台…

    2025年12月8日 好文分享
    000
  • Kakao支持的Kaia拟推出韩元锚定稳定币

    韩国即时通讯巨头Kakao投资的公链平台Kaia宣布,计划于6月9日推出与韩元(KRW)挂钩的稳定币。此举被视为扩大韩国国内市场数字金融生态的战略举措,同时也响应了韩国总统李在明在竞选期间提出的加密货币发展方向。 发行与韩元挂钩的稳定币有望成为韩国区块链世界与传统金融体系之间的重要桥梁。随着加密货币…

    2025年12月8日
    000
  • 以太坊10年内没落?专家观点与V神的解决方案

    cardano创办人投下震撼弹,预言「以太坊10年内将崩溃,沦为加密货币的过客!」 这位曾与v神同打造以太坊的技术巨头,如今直指以太坊三大设计缺陷。 以太坊10年内没落? Cardano 创办人Charles Hoskinson 投下震撼弹:他预言「以太坊10 年内将崩溃!沦为加密货币的过客!」 这…

    2025年12月8日
    000
  • Ethereum.org放大了Virtuals协议的帖子,标题为“ AI代理人的未来。现在在以太坊上”。

    以太坊是为ai:新架构的诞生,这一重申的短语揭示了网络与去中心化ai开发方向的一致性。 Ethereum.org突出了Virtuals协议在展示未来AI代理于以太坊区块链上运行所起的关键作用。 6月9日发布的题为“以太坊是为AI:新架构”的文章重点介绍了Virtuals协议的计划,即推出一个去中心化…

    2025年12月8日
    000
  • 虚拟币app中文版下载 全球虚拟币app中文版前十汇总

    随着加密货币市场的日益成熟,越来越多的投资者开始关注虚拟币交易。选择一款安全、便捷、功能强大的虚拟币App至关重要。本排行榜综合考量了用户体验、安全性、交易深度、支持币种、中文服务等多个维度,为您精选出全球虚拟币App中文版前十名,助您在数字货币世界中游刃有余。 重要提示: 加密货币投资风险较高,请…

    2025年12月8日 好文分享
    000
  • 比特币(BTC)恢复其向上轨迹,获得1.6%的增益

    比特币重新恢复了其上涨趋势,过去24小时内价格上涨1.6%,目前交易价格为107,428美元。 比特币(BTC)价格已重返上升通道。截至美国东部时间上午10:35,过去一天内涨幅达1.6%,报107,428美元。 在上周一度回落至100,000美元关口后,此次反弹由市场波动及获利行为推动,使全球最大…

    2025年12月8日
    000
  • 加密情绪随着人工智能,鲸鱼和模因硬币的转移而转移

    santiment的alpha叙事仪表板最新分析揭示了当前正在影响加密货币市场活动的社会动态。 加密货币市场始终处于不断演变之中,要保持领先不仅需要技术层面的理解。社会趋势在推动市场周期方面扮演着关键角色,它们能够反映出塑造市场走向的集体情绪和主导叙事。 根据Crypto Analytics平台Sa…

    2025年12月8日
    000
  • 哪个虚拟币app好一点?炒虚拟币的app前十全球排名

    随着加密货币市场的日益成熟,选择一款安全、便捷、功能强大的虚拟币交易App变得至关重要。以下是全球范围内,用户体验、交易量、安全性能、以及创新功能等方面表现突出的前十名虚拟币交易App,助您在数字货币的浪潮中稳健前行。这些平台不仅提供多样化的交易对,更注重用户教育和安全保障,旨在为投资者打造一个可靠…

    2025年12月8日 好文分享
    000
  • 阿根廷总统哈维尔·米利(Javier Milei)因参与天秤座丑闻而被免除

    阿根廷总统哈维尔·米利(javier milei)因参与引发争议的天秤座纪念币事件,遭到该国反腐败办公室的调查并被解除相关职务。 据当地媒体Chained报道,阿根廷反腐败办公室认定总统贾维尔·米利(Javier Milei)卷入了与天秤座(LBR)Memecoin相关的丑闻,这一事件导致大量投资者…

    2025年12月8日
    000
  • APT Miner Cloud Mining Platform共享其真正的用户体验

    在过去的一年里,人们对新兴的云采矿行业表现出越来越浓厚的兴趣。 随着加密货币的普及,云采矿逐渐成为人们热议的话题。近日,一位公寓矿工用户在平台社区分享了他的亲身经历。 “坦白说,一开始我对加密货币并不感兴趣,也对所谓的云挖矿持怀疑态度。是朋友杰森一直劝我试试apt mienr这个平台。我没有申请取暖…

    2025年12月8日
    000
  • Web3 AI预售量增加了720万美元,并拥有1,747%的ROI – 高于Monero在2025年的$ 400炒作

    在加密领域,把握时机与技术创新同等关键。某些项目借助市场热度迅速崛起,而另一些则默默致力于攻克底层难题。 加密项目的成败往往取决于入场时机,尤其在众多新项目涌现的当下更需慧眼识别。以Monero为例,它因特定的应用场景和稳定的价格走势吸引了Hasidrojenli的关注。 与此同时,Web3 AI则…

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信