如果在表单中重复编号,则生成错误
我有一个用于管理目的的Web表单,用户可以在其中更改在网页上显示一组记录的顺序。
例如:数据库中的表(tblStuff)有三个字段:
ContentID, Content, RecordPosition
例如,该表有四条记录:
1, Guess what, 1 2, More stuff, 2 3, Some stuff, 3 4, That's right, 4
SQL代码是:
SELECT * FROM tblStuff ORDER BY RecordPosition ASC
用户可以使用表单更改RecordPosition编号,以便订单可以读取:
3, Some stuff, 1 2, More stuff, 2 1, Guess what, 3 4, That's right, 4
那么……我如何validation表格,以便在RecordPosition字段中输入两次相同的数字?
希望这是有道理的。
这是整个页面
<% ' *** Restrict Access To Page: Grant or deny access to this page MM_authorizedUsers="" MM_authFailedURL="../default.asp" MM_grantAccess=false If Session("MM_Username") "" Then If (true Or CStr(Session("MM_UserAuthorization"))="") Or _ (InStr(1,MM_authorizedUsers,Session("MM_UserAuthorization"))>=1) Then MM_grantAccess = true End If End If If Not MM_grantAccess Then MM_qsChar = "?" If (InStr(1,MM_authFailedURL,"?") >= 1) Then MM_qsChar = "&" MM_referrer = Request.ServerVariables("URL") if (Len(Request.QueryString()) > 0) Then MM_referrer = MM_referrer & "?" & Request.QueryString() MM_authFailedURL = MM_authFailedURL & MM_qsChar & "accessdenied=" & Server.URLEncode(MM_referrer) Response.Redirect(MM_authFailedURL) End If %> <% Dim rsNavBar Dim rsNavBar_cmd Dim rsNavBar_numRows Set rsNavBar_cmd = Server.CreateObject ("ADODB.Command") rsNavBar_cmd.ActiveConnection = MM_ENG_STRING rsNavBar_cmd.CommandText = "SELECT * FROM tblMainMenu WHERE MainMenuID 7" rsNavBar_cmd.Prepared = true Set rsNavBar = rsNavBar_cmd.Execute rsNavBar_numRows = 0 %> <% Dim rsContent__smID rsContent__smID = "1" If (Request.QueryString("smID") "") Then rsContent__smID = Request.QueryString("smID") End If %> <% Dim rsMenuList Dim rsMenuList_cmd Dim rsMenuList_numRows Set rsMenuList_cmd = Server.CreateObject ("ADODB.Command") rsMenuList_cmd.ActiveConnection = MM_ENG_STRING rsMenuList_cmd.CommandText = "SELECT tblMainMenu.MainMenuID, tblMainMenu.MainMenuName, tblSubMenu.SubMenuID, tblSubMenu.SubMenuName FROM tblMainMenu INNER JOIN tblSubMenu ON tblMainMenu.MainMenuID = tblSubMenu.MainMenuID WHERE tblSubMenu.SubMenuID 6 AND tblSubMenu.SubMenuID 19" rsMenuList_cmd.Prepared = true Set rsMenuList = rsMenuList_cmd.Execute rsMenuList_numRows = 0 %> | English Website Administration <% IF Request.ServerVariables("QUERY_STRING") "" THEN %> Order/Re-order records for: https://stackoverflow.com/questions/21768606/generate-an-error-if-number-is-repeated-in-a-form/
<% Dim counter While ((rptContent__numRows 0) AND (NOT rsContent.EOF)) counter = counter + 1 %> Select a listing to order/re-order using the list on the left.
jQuery(document).ready(function() { jQuery('.nailthumb-container').nailthumb({width:125,height:125,fitDirection:'top center'}); });
根据Allende的要求,这是生成的表单代码。
假设你有这样的forms(注意所有输入都有相同的类):
你可以用jQuery做这样的事情:
$(document).ready(function(){ $(".recordPosition").on("blur", function(){ var allFieldsForOrder = $('.recordPosition'); var count = 0; var i=0 //console.log(allFieldsForOrder.length ); while((i
对于你发布的html,你可以使用: 注意我没有存储重复值的位置。
$(document).ready(function(){ //console.log($("input[type='text'][name^='PositionNumber'").length); $("input[type='text'][name^='PositionNumber'").each(function(){ $(this).on("blur", function(){ var allFieldsForOrder = $("input[type='text'][name^='PositionNumber'"); var count = 0; var i=0 while((i
对于上面的代码,我们假设您要检查属性名称以字符串“PositionNumber”开头的所有字段
我将尝试稍后减少代码,我认为有一种最短的方法来检查是否重复了“RecordPosition”值,但需要测试一些想法。
这将是您的解决方案(其中之一):
$(document).ready(function(){ $('form').on("submit",function(){ var tempArray=[]; $("input[type='text'][name^='PositionNumber'").each(function(){ tempArray.push($(this).val()); }); var i=0; var duplicated=false; var currentElement; while((tempArray.length >= 0) && (duplicated==false)){ //pop it out from the array currentElement = tempArray.pop(); duplicated = tempArray.indexOf(currentElement) } //after you can use "duplicated" to cancel the submit if (duplicated){ alert("duplicated value:" + currentElement); return false; } }); });
我的缩短版:
$(document).ready(function(){ $('form').on("submit",function(){ var tempArray=[]; var exists=0; $("input[type='text'][name^='PositionNumber'").each(function(){ exists = tempArray.indexOf($(this).val()); if (exists>=0){ return false;//break the loop } tempArray.push($(this).val()); }); //after you can use "exist" to check if duplicated and retrieve the value to cancel the submit if (exists>=0){ alert("duplicated value:" + tempArray[exists]); } else{ alert("no duplicated value:"); } return false; }); });
如果要防止RecordPosition
重复值,无论您如何插入/更新它们,都可以在此列中创建唯一约束
CREATE UNIQUE INDEX uq_idx_RecordPosition ON tblStuff(RecordPosition);
这是SQLFiddle演示
如果您正在尝试进行某些客户端validation,则必须构建一个包含所有RecordPosition
值的数组。
完成后,您可以检查数组是否有重复项。 在SO上已经多次询问过这种情况: 在JavaScript数组中查找重复值的最简单方法
不幸的是,我不能提供任何帮助,因为您没有包含任何显示在您的网页上如何构建这些内容的代码
在将数据插入数据库之前检查
例如:记录位置值3 – > 1然后传递值1
SELECT * FROM tblStuff其中RecordPosition = 1
如果记录存在,则向用户发出消息,该位置存在