gpt4 book ai didi

sql - 如何从一个地方控制HTML表单字段的定义,表示,验证和存储?

转载 作者:搜寻专家 更新时间:2023-10-31 08:38:05 25 4
gpt4 key购买 nike

我希望能够在一个地方定义表单域的所有内容,而不是在数据库中有一些信息,有些是HTML,有些是JavaScript,有些是ASP…
当我想改变一个领域的某些东西时,为什么我要担心可能在四个不同的地方(或更多)改变事情?
也就是说,我不想:
在数据库中声明字段
把这些信息复制到HTML中的某个地方
在某个地方用javascript复制更多信息
在某个asp中复制更多信息
因为我是一个开发人员,所以我理想的是寻找一种方法论,而不是工具或软件包。(我想!)
目前,我是通过将所有控制信息放入sql的扩展属性“description”文本区域来完成这项工作的。例如,所需的电话号码字段将具有以下SQL声明:
[home_phone] [varchar](15) NOT NULL
我在description扩展属性中添加了以下“控件”:
["Home Phone"][phone_text][user_edit][required][allow_na][form_field_size_equals_size][default=""][group="home_address"][rollover="enter only: numbers, dash, parenthesis, space"][explanation="enter <strong>n/a</strong> if you don't have a home phone"]
在我当前的系统中,以下HTML是为Home Phone字段动态生成的:

<div class="div-item" id="item-FORM:FIELD:TABLE_HOME:HOME_PHONE">
<div class="div-item-description" id="item_description-FORM:FIELD:TABLE_HOME:HOME_PHONE">
<span class="rollover-explanation" title="enter only: numbers, dash, parenthesis, space">
<label for="FORM:FIELD:TABLE_HOME:HOME_PHONE" id="item_label-FORM:FIELD:TABLE_HOME:HOME_PHONE">
Home Phone
</label>
</span>
</div>
<div class="div-item-stipulation" id="item_stipulation-FORM:FIELD:TABLE_HOME:HOME_PHONE">
<span class="stipulation-required" id="item_stipulation_span-FORM:FIELD:TABLE_HOME:HOME_PHONE" title="required" >
*
</span>
</div>
<div class="div-item-value" id="item_value-FORM:FIELD:TABLE_HOME:HOME_PHONE">
<div class="individual-forms">
<form class="individual-forms" id="FORM:TABLE_HOME:HOME_PHONE" name="FORM:TABLE_HOME:HOME_PHONE" action="" method="post" enctype="multipart/form-data" onsubmit="return(false);">
<div class="individual-forms-element">
<input
class=""
type="text"
id="FORM:FIELD:TABLE_HOME:HOME_PHONE" name="FORM:FIELD:TABLE_HOME:HOME_PHONE"
size="15" maxlength="15"
value=""
FORM_control="true"
FORM_control_name="Home Phone"
FORM_control_is_required="true"
FORM_control_is_phone_text="true"
>
</div>
</form>
</div>
</div>
<span class="spanExplanation">
enter <strong>n/a</strong> if you don't have a home phone
</span>
</div>

看起来是这样的(在IE 7中):
客户端javascript验证由 **FORM_control**...参数控制,参数出错时会生成解释和字段突出显示。(不幸的是,HTML元素中的自定义参数并不完全符合标准。)
我的主要问题是,这个使用描述字段的方法在使用和维护上总是很麻烦的。description属性只能是255个字符,所以我有很多缩写。随着系统的扩展,控制的数量也大大超过了最初的十几个。我用来解释所有这些控件及其缩写的代码并不漂亮或高效。正如我所说,HTML元素中的自定义参数在Firefox中不起作用。
我目前正在控制(并希望继续控制)的事情包括:
字段说明(例如“家庭电话号码”)
数据库表名(例如,“home_address”)
数据库字段名(例如,“家庭电话”)
数据库字段类型/大小
数据库允许空值
分组(例如,此特定字段是所有“主”字段的一部分)
必需/可选
只读(用于系统提供的数据)
大小(显示的表单字段大小)
类型(例如,文本、数字、字母、选择、zipcode、电话、街道地址、姓名、日期等)
可接受的输入(非空;仅限数字;无空格;电话号码;REG EXP;等)
扩展解释(例如,对于电话“如果您没有家庭电话,请输入N/A”)
翻滚说明(例如,对于电话“仅输入:数字、破折号、括号、空格”)
行(用于选择列表--1=下拉列表)
行/列(用于文本区域)
错误消息文本
错误指示(如何显示哪个字段包含错误,例如红色背景)
等。。。
为了清楚起见,我完全赞成逻辑和设计元素的分离。我有一个单独的css文件是手动维护的(不是生成过程的一部分)。
我的服务器环境是经典的(非.NET)ASP和SQL 2008。我对html、css、javascript和asp都很在行,对sql也很在行。
我想我想要的是某种json、xml等,它是用来生成所有内容的单一源,例如:
实际创建sql表的sql脚本
html(带有css类和javascript客户端验证/函数调用)
asp(服务器端验证)
我目前的方法是动态的(未编译)和相当慢的,所以我可能正在寻找某种“编译器”来生成这种东西一次。我真的只有经典的asp、javascript或sql作为这个“编译器”的可用语言。
虽然我认为我可以自己创建这个系统,但我希望其他更好的开发人员已经想出了类似的方法。
假设这应该扩展到至少几十个字段。(仅供参考,我当前的表单在一个页面上有太多的字段,但我正在单独解决这个问题。)
谢谢你的帮助!

最佳答案

javascript验证被高估了
我认为javascript验证被高估了。在服务器往返可能需要10秒,但现在通常不到3秒的时候,这是很好的。在ajax提交过程中,您可以将时间缩短到次秒。
作为对往返的所有努力的回报,您必须处理跨浏览器支持、复杂调试、缺少服务器端日志记录以及处理用户禁用JS的所有各种复杂性。在一个典型的场景中,我们谈论的是大量的浪费时间和困难的调试(试着问一个典型的白痴他们使用什么浏览器,更不用说他们使用的是什么版本)。
数据库作为一站式验证程序
你说数据库不是一个完整的验证环境,但我认为这不再是真的。像postgresql这样的现代数据库将允许您将复杂的验证函数作为触发器连接到您选择的语言中,并向应用程序返回适当的错误响应。
所以,如果你按照我的思路来做,就可以在一个地方验证数据库,而不存在历史缺陷。过程是:
创建一个基本的html表单,忘记
HTML5或JavaScript验证。
当表格填写完毕,或
必需,通过ajax提交(如果
或标准职位。
或多或少地传递更新/插入
直接去数据库
触发函数正常化和
验证数据。
立即返回结果和/或
错误(可能是通过交易)
执行任何进一步的服务器
正在处理。如果你
决定不保留数据
可以删除新行或
回滚事务。
在结束时返回任何适当的
重定向、消息或更新到
通过json/ajax或
使用已清理的数据重新加载。
这听起来可能很慢/效率低下,但我认为这忽略了当今的现实,即:
现在几乎所有的东西都是宽带,甚至是无线的。
处理能力比
开发人员时间。
这种
更新往往受到
速度用户可以填写表格,你不会
在一个典型的
脚本。
你还得在某个地方做验证,为什么数据库不做呢?
好处是巨大的:
在大容量服务器(如Exchange、Twitter、Feed等)上
进程可以自己进行api控制
通过soap/ajax/rss/whatever since
只需要一层薄薄的
在api客户端之间传输数据
还有数据库。
不管什么客户
使用语言或协议
验证保持不变。
即使是原始的sql语句也会得到
已验证,可防止
编程错误,已损坏
从中导入或第三方源
破坏你的数据结构。
如果
必修的。在普通代码中通常会更难。
验证总是一致的。
验证函数位于
数据库,允许访问
索引和其他行或表
连接器开销,数据转换
以及网络/套接字延迟。
验证函数可以在中运行
编译的代码,即使您的web
服务器语言是动态的。
唯一真正的缺点是:
难以升级或迁移到
其他数据库软件。
如果你喜欢的语言
不支持(但是postgres
支持用C编写的函数,
pl/pgsql、python、tcl、perl、java、
r、ruby、scheme、bash和php so
除非你被困在C/VB上
应该找到一个你能处理的)。
上下文敏感度
你的问题有些方面我完全不推荐。主要是将html表单对象的表示与单个位置的数据绑定在一起。
这个想法很快就会适得其反,因为你会发现在一个典型的应用程序中,信息的呈现对上下文高度敏感——特别是目标受众。
例如,在订购系统上,您可能有一个客户机输入的数据,然后管理员可以访问这些数据。数据的客户端视图可能更有限,它可能需要不同的标题和描述,最好在管理员获得更紧凑的视图时显示为复选框。您甚至可以向不同类型的客户(零售和批发)提供相同的数据。
简言之,数据的呈现通常需要比其验证更为流畅,因此在某一点上,您应该真正画出界线—即使这意味着一些重复。

关于sql - 如何从一个地方控制HTML表单字段的定义,表示,验证和存储?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3294457/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com