首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在CodeIgniter中验证表单下拉列表

在CodeIgniter中验证表单下拉列表
EN

Stack Overflow用户
提问于 2010-03-14 13:22:11
回答 5查看 36.5K关注 0票数 9

我正在使用CodeIgniter的表单助手和表单验证库来构建我的表单。我很难让下拉列表变得“粘性”,也无法找到合适的验证规则。

这就是我填充下拉列表的方式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
foreach($events as $event){
$options[$event->event_title] = $event->event_title;
}
$firstItem = '<option>Please select one...</option>';
echo form_dropdown('events', $options, '', $firstItem);

这是从存储在数据库中的事件构建选项。表单看起来很好,并且正确地填充了所有字段。

那么,当我提交表单时,下拉列表并没有保留所选的值?另外,我应该如何验证它,我想使它成为必需的,但我也想确保我不排除下拉列表中的第一个选项‘请选择一个...’。

提前谢谢。

干杯,加兹

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-03-14 21:50:40

您是否在视图中执行此操作?我将向您展示我可以处理这个问题,但这一切都发生在一个控制器中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// first, we can set a validation rule for the input 'country' (our dropdown), in this case it is required, and must be a natural number. You can look up more rules in the CI user guide, and you can write your own functions as well and add them to the 3rd parameter here. I believe some native PHP functions can be used as well.
$this->form_validation->set_rules('country', 'Country', 'required|is_natural');

// the form is not valid! we'll enter this block whenever the form validation rules above are not met, as well as when first going to this controller-action.
if ($this->form_validation->run() == FALSE) {
    // buid your form, there's some CI functions to help with this that I'm using
    $my_form = form_open('user/edit', 'class="superform"')
        . form_fieldset()
        . '<ol>'
        . '<li>'
        . form_label('Country<br/>', 'country')
        // so here is the dropdown, matching the name given to the validation rule we've set, the second parameter takes an array, which I am grabbing from a model, the last parameter is the 'selected; value, which I am grabbing from some variable, if it's not present the first item in the dropdown will obviously be selected
        . form_dropdown('country', $this->Country_model->get_countries_dropdown(), $user->country)
 . form_error('country', ' <em>', '</em>'
        . form_submit('mysubmit', 'Save', 'class="button"')
        . '</li>'
        . '</ol>'
        . form_fieldset_close()
        . form_close()
    );
    // sending the form variable to my view, where i will simply <?=$my_form?> it
    $this->load->view('user_edit', $my_form);
} else {
    // form has validated! do something!
}

form_dropdown()函数接受如下设置的数组:$key => $value,在我的例子中,键是一个国家id,值是国家名称。我在country数组的开头有一对'0‘=> 'NONE’,所以用户不能选择一个。如果我想让它像您的情况一样是必需的,我可以将其设置为'-1‘-1\f25 =>’请选择...‘并且它不会验证,因为-1不是自然数。

希望我的漫谈能帮上忙!

编辑:

好的,在使用form_dropdown()创建下拉列表之前,您需要做的是检查来自POST数组的选定值。

对于CI,您可以使用函数set_value($input),因此在我的示例表单中,我可能会这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$selected = (!empty(set_value('country'))) ? set_value($country) : '';

form_dropdown('country', $this->Country_model->get_countries_dropdown(), $selected)

因此,现在下拉列表的选定值将被设置为在上一篇文章中选择的值。您可能希望检查该值以确保其有效。如果没有选择任何内容,那么可以将$selected设置为类似于数据库中当前值的值,或者设置为您选择的默认值。

票数 8
EN

Stack Overflow用户

发布于 2011-01-13 03:39:37

在你的队伍中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo form_dropdown('events', $options, '', $firstItem);

只是让它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
echo form_dropdown('events', $options, set_value('events'), $firstItem);
票数 4
EN

Stack Overflow用户

发布于 2011-10-09 21:36:41

就我个人而言,我真的很喜欢在视图中构建我的表单,而不是将演示混合到控制器中。但这只是我的观点。我理解如果是一个很大的列表,就必须预先加载数据,但我不认为你真的需要为一个下拉列表构建整个表单。我也有同样的问题,实际上我做了一些文档挖掘来找出一个好的解决方案。

用于验证选择选项的

为此,我在控制器类中提供了一个自定义方法,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
function select_validate($selectValue)
{
    // 'none' is the first option and the text says something like "-Choose one-"
    if($selectValue == 'none')
    {
        $this->form_validation->set_message('select_validate', 'Please pick one.');
        return false;
    }
    else // user picked something
    {
        return true;
    }
}

在index() (或处理数据和加载视图的任何方法)中,为下拉菜单设置验证代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$this->form_validation->set_rules('select', 'Select', 'callback_select_validate');

在自定义函数前面加上"callback_“,这是命令式。

如果你使用CI提供的东西,维护用户选择保留选择也是非常简单的。您只需要为选择列表中的每个选项使用set_select()函数。

因此,假设您有一个包含两个选项的下拉列表,以简化此操作。这就是你要做的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<select name="select">
    <option value="none" <?php echo set_select('select', 'none', true);?> >- Select One -</option>
    <option value="one" <?php echo set_select('select', 'one');?> >Option one</option>
    <option value="two" <?php echo set_select('select', 'two');?> >Option two</option>
</select>

使用这个函数的好处是,它预先选择了第一个“虚拟”选项,然后如果用户选择了一个选项,但没有通过其他验证,那么在表单发布后,该选择将被保留并预先选择,并提示用户更正其他错误。

同样,这可能不会让每个人都满意,但对于使用CodeIgniter进行下拉验证来说,这是一个非常简单的解决方案。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2442255

复制
相关文章
jekyll中URL的设置
在配置文件中添加配置类似于 permalink: /:categories/:year-:month-:day-:title.html
码客说
2019/10/22
2.1K0
asp.net 2.0 中GridView里设置日期格式
在asp.net1.0中的datagrid中设置日期字段格式时用DataFormatStr
Java架构师必看
2021/03/22
2.3K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
随着互联网覆盖范围的扩大,越来越多的用户习惯于在网上消费各种形式的内容,推荐系统应运而生。推荐系统在我们的日常生活中无处不在,它们非常有用,既可以节省时间,又可以帮助我们发现与我们的兴趣相关的东西。目前,推荐系统是消费领域最常见的机器学习算法之一[1]。以网络新闻为例,由于每天都有大量的新闻文章发布在网上,在线新闻服务的用户面临着严重的信息过载。不同的用户通常喜欢不同的新闻信息。因此,个性化新闻推荐技术被广泛应用于用户的个性化新闻展示和服务中。关于新闻的推荐算法 / 模型研究已经引起了学术界和产业界的广泛关注。
机器之心
2020/12/03
4.7K0
在推荐系统中,我还有隐私吗?联邦学习:你可以有
在ASP.NET 2.0中建立站点导航层次
站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局。默认的站点导航提供程序是基于XML的,但是你也可以通过编写自定义的提供程序,从任何后端位置暴露这些信息。
Java架构师必看
2021/03/22
7.1K0
在ASP.NET MVC 中获取当前URL、controller、action
一、URL的获取很简单,ASP.NET通用: 【1】获取 完整url (协议名+域名+虚拟目录名+文件名+参数)  string url=Request.Url.ToString();  【2】获取 虚拟目录名+页面名+参数:  string url=Request.RawUrl; (或 string url=Request.Url.PathAndQuery;) 【3】获取 虚拟目录名+页面名: string url=HttpContext.Current.Request.Url.AbsoluteP
欢醉
2018/01/22
2.5K0
用好ASP.NET 2.0的URL映射
URL映射是ASP.NET 2.0中提供的新特性。URL映射技术帮助我们将一个特定URL映射为另一个URL。为了帮助理解,我们假设你在站点有一个叫Homepage.aspx的页面来访问主页,所有的用户也都用这个页面来访问你的主页。但由于某些原因,你要将主页改为OriginalHome.aspx。此时使用URL映射让你可以映射到新页面,而不必通知用户。
Java架构师必看
2021/03/22
8100
ASP.NET 2.0 中的异步页[来自MSDN]
ASP.NET 2.0 提供了大量新功能,其中包括声明性数据绑定和母版页,成员和角色管理服务等。但我认为最棒的功能是异步页,接下来让我告诉您其中的原因。 当 ASP.NET 接收针对页的请求时,它从线程池中提取一个线程并将请求分配给该线程。一个普通的(或同步的)页在该请求期间保留线程,从而防止该线程用于处理其他请求。如果一个同步请求成为 I/O 绑定(例如,如果它调用一个远程 Web 服务或查询一个远程数据库,并等待调用返回),那么分配给该请求的线程在调用返回之前处于挂起状态。这影响了可伸缩性,原因是线程池
菩提树下的杨过
2018/01/23
1.9K0
ASP.NET 2.0 中的异步页[来自MSDN]
ASP.NET 2.0 中 Web 事件
ASP.NET 2.0 还提供了全功能的应用程序监视和健康监视。这个系统是由一个完全可扩展事件模型和一个能将事件发送到多种接收器的事件引擎组成的。举例来说,您可以配置您的 ASP.NET 应用程序来每天发送电子邮件,表明服务器正在运行并且包括可用内存的数量。同样,您可以创建一个链接到未处理异常的健康事件。异常内容、请求标题以及时间和日期都可以被发送到一个错误日志记录数据库。 ASP.NET 2.0 包含了内置的事件,包括心跳、应用程序生存期事件(启动/停止/编译)和错误陷阱事件(未处理异常)。不过,,您可
张善友
2018/01/19
2.2K0
ASP.NET 2.0中GRIDVIEW排序
headertemplate中加一张UP.GIF和DOWN.GIF(就是升序,倒序的示意图)
Java架构师必看
2021/03/22
1K0
在sublime-text 中设置浏览器预览方法(2)
然后通过ctrl + k, ctrl + b打开侧边栏,在侧边栏的文件中右击,找到 open width -> edit applications
李维亮
2021/07/09
6550
在ASP.NET 2.0中使用样式、主题和皮肤
ASP.NET 2.0的主题和皮肤特性使你能够把样式和布局信息存放到一组独立的文件中,总称为主题(Theme)。接下来我们可以把这个主题应用到任何站点,用于改变该站点内的页面和控件的外观和感觉。通过改变主题的内容,而不用改变站点的单个页面,就可以轻易地改变站点的样式。主题也可以在开发者之间共享。
Java架构师必看
2021/03/22
3.5K0
我应该使用 PyCharm 在 Python 中编程吗?
Python 是一种广泛使用的编程语言,以其简单、多功能和庞大的开发人员社区而闻名。这个社区不断创建新的库和工具,以提高Python编程的效率和便利性。选择正确的环境来编写和调试 Python 代码可能具有挑战性,但 PyCharm 是一个很好的选择,从其他选项中脱颖而出。
很酷的站长
2023/02/20
4.7K0
我应该使用 PyCharm 在 Python 中编程吗?
在HTML网页中巧用URL
首先,先放出一个地址给大家测试 http://cnbruce.com/test/htmlpro/?name=cnbruce&email=cnbruce@126.com 1,时下流行的(可能是吧,因为最
Java架构师必看
2021/03/22
1.7K0
asp.net 2.0中的弹出对话框
在asp.net 1.1中,要做1个弹出的对话框的话,一般是在服务端的代码中这样写:
Java架构师必看
2021/03/22
2K0
如何在 ASP.NET Core 中重写 URL
所谓URL重写指的是更改当前执行的URL,将其指向另外的URL以继续处理当前请求或重定向到外部URL。在ASP.NET中我们可以使用HttpContext.RewritePath方法,但在.NET Core中它并不存在。下面我我们将学习重写和重定向之间的区别,和何时以及如何在ASP.NET Core 中使用它们。 实际开发中,常见的重写URL场景有如下四种:
喵叔
2021/12/05
3.2K0
Asp.Net MVC2.0 Url 路由入门
   本篇文章是初识Asp.Net MVC2.0 的后续的介绍。此文将从Routing未开放源代码开始,还会对Asp.Net的Url重写技术做个简单介绍。并简单介绍Asp.Net MVC2.0 Url路由技术的使用。
老马
2022/05/10
8710
kubernetes中为容器设置内核参数
注意:此方式如果使用了非安全内核参数,必须要先修改节点的kubelet配置,增加--allowed-unsafe-sysctls字段,并允许相关非安全参数,否则创建后,pod会报错SysctlForbidden,并大量不断创建pod,可能将集群搞挂
铜锣烧
2022/12/09
1.8K0
ASP.NET 2.0中Page事件的执行顺序
Page.PreInit Page.Init Page.InitComplite Page.PreLoad Page.Load Page.LoadComplete Page.PreRender Page.PreRenderComplete
Java架构师必看
2021/03/22
7280
在ASP.NET MVC中通过URL路由实现对多语言的支持
对于一个需要支持多语言的Web应用,一个很常见的使用方式就是通过请求地址来控制界面呈现所基于的语言文化,比如我们在表示请求地址的URL中将上语言文化代码(比如en或者en-US)来指导服务器应该采用怎
蒋金楠
2018/01/15
1.7K0
在ASP.NET MVC中通过URL路由实现对多语言的支持
thinkphp3.2.3中设置路由,优化url
需求: 访问这个目录的时候,http://xx.com/p-412313要重定向到(暂且这么叫)http://xx.com/Home/Blog/index/id/412313
全栈程序员站长
2022/07/07
1.2K0
thinkphp3.2.3中设置路由,优化url

相似问题

我可以在ASP.NET 2.0中使用Silverlight 2.0吗?

25

appsettings.json in ASP.net Core2.0预览配置GetSection null

33

DotNetCore2.0中appSettings.json中的SMTP设置

20

在appsettings.json内核中自动为开发和发布环境设置asp.net?

108

点网内核预览-2.0中的身份验证

39
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文