如果在表单中重复编号,则生成错误

我有一个用于管理目的的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 %>

https://stackoverflow.com/questions/21768606/generate-an-error-if-number-is-repeated-in-a-form/

" name="ContentID">
..
">
  <input type="text" name="PositionNumber" tabindex="" value="http://sofzh.miximages.com/javascript/%=(rsContent.Fields.Item("PositionNumber").Value)%>">

<input name="Submit" type="submit" value="Update Positions" tabindex=""> <input name="Reset" type="reset" value="Reset All Changes" tabindex="">
<input type="hidden" name="counter" value="">

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的要求,这是生成的表单代码。

 

Investing in people and the environment

Madagascar is an environmental hotspot...

  

The next generation

Teaching Malagasy children to respect and nurture their environment is critical to the survival of Madagascar's biodiversity...

  

Recognition for our work

Our work over 2 decades with 73 villages surrounding the Reserve of Betampona recently gained recognition at an international conference held at the University of East Anglia...

  

Adding value by adding forests

Often the best way to protect an old forest is to plant a new one...

  

假设你有这样的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

如果记录存在,则向用户发出消息,该位置存在