如何将提交的电子邮件域与域数组匹配并将其插入数据库? ASP 经典
How to match a submitted email domain with an array of domains and Insert it into a database? ASP CLASSIC
我正在努力解决 ASP 经典中的以下问题。
我在 ASP classic 中创建了一个表单,其中必须提供多个输入字段,并且在提交时输入字段应存储在 Microsoft SQL 数据库中。
然而,一个字段,公司,不能立即存储在数据库中table字段。数据库中的company字段是代表公司的char类型,比如company'Apple'等于字段值D0001,'Microsoft'等于D0002等等(别问我为什么要这样做,因为以前的人这样做过,我无法更改)。
在表单中,此人无法插入公司名称,因为这些名称是默认设置的,链接到它们的代码字符也是如此。为了在数据库中仍然获得正确的公司名称,我想将电子邮件的域与正确的公司匹配(因为公司的电子邮件域始终相同且无法更改)。
现在我可能有点不知所措,但我想知道最好的方法是什么?我正在考虑创建一个包含所有公司的电子邮件域的数组,并为它们指定正确的字符。然后当提交电子邮件时,我会像这样检查域:
EmailDomain = len(request.Form("EMail")) - InStrRev(request.Form("EMail"),"@")
EmailDomain = Right(request.Form("EMail"),EmailDomain)
(对于 person@company.com 这将导致 company.com)
然后我会将 EmailDomain 与正确的公司数组相匹配(例如数组 (5) 等于 comany.com)
然后可以将指向正确数组(例如 D0001)的数组值传输到 var 中并传递给数据库查询。
虽然我不知道这是否是正确的方法,因为我只是在大声思考。除此之外,我不知道如何使这个数组(在 foreach 中)与域匹配。是否有可能创建像 Company[0] = company.com --> D0001 这样的数组以及如何我会这样做吗?
一些指点将不胜感激!
提前致谢!
您可以使用 Dictionary 将键映射到值(即,将电子邮件域映射到公司代码):
Dim CompanyByDomain
Set CompanyByDomain = CreateObject("Scripting.Dictionary")
CompanyByDomain.Add "microsoft.com", "D0001"
CompanyByDomain.Add "apple.com", "D0002"
' and so on, maybe you want to use a DB query and a loop to fill the dictionary
字典建好后,就可以这样使用了:
Domain = LCase(SubstringAfter(Request.Form("EMail"), "@"))
If CompanyByDomain.Exists(Domain) Then
CompanyCode = CompanyByDomain(Domain)
' insert record
Else
' show error
End If
其中 SubstringAfter()
是一个小辅助函数
Function SubstringAfter(str1, str2)
Dim pos
pos = InStr(str1, str2)
If pos Then SubstringAfter = Mid(str1, pos + 1)
End Function
这是其中一种方法。其他想法:
- 直接在数据库中查询公司代码ASP,不用建字典
- 在 SQL 中构建适当的 INSERT 语句,从相关的 table 中获取公司代码并使用 ASP
中的公司代码
- 创建一个存储过程来完成 SQL 中的所有工作和必要的检查,以便 ASP 没有自己的业务逻辑,它所做的只是将表单字段作为参数传递给存储过程
我正在努力解决 ASP 经典中的以下问题。
我在 ASP classic 中创建了一个表单,其中必须提供多个输入字段,并且在提交时输入字段应存储在 Microsoft SQL 数据库中。
然而,一个字段,公司,不能立即存储在数据库中table字段。数据库中的company字段是代表公司的char类型,比如company'Apple'等于字段值D0001,'Microsoft'等于D0002等等(别问我为什么要这样做,因为以前的人这样做过,我无法更改)。
在表单中,此人无法插入公司名称,因为这些名称是默认设置的,链接到它们的代码字符也是如此。为了在数据库中仍然获得正确的公司名称,我想将电子邮件的域与正确的公司匹配(因为公司的电子邮件域始终相同且无法更改)。
现在我可能有点不知所措,但我想知道最好的方法是什么?我正在考虑创建一个包含所有公司的电子邮件域的数组,并为它们指定正确的字符。然后当提交电子邮件时,我会像这样检查域:
EmailDomain = len(request.Form("EMail")) - InStrRev(request.Form("EMail"),"@")
EmailDomain = Right(request.Form("EMail"),EmailDomain)
(对于 person@company.com 这将导致 company.com)
然后我会将 EmailDomain 与正确的公司数组相匹配(例如数组 (5) 等于 comany.com)
然后可以将指向正确数组(例如 D0001)的数组值传输到 var 中并传递给数据库查询。
虽然我不知道这是否是正确的方法,因为我只是在大声思考。除此之外,我不知道如何使这个数组(在 foreach 中)与域匹配。是否有可能创建像 Company[0] = company.com --> D0001 这样的数组以及如何我会这样做吗?
一些指点将不胜感激!
提前致谢!
您可以使用 Dictionary 将键映射到值(即,将电子邮件域映射到公司代码):
Dim CompanyByDomain
Set CompanyByDomain = CreateObject("Scripting.Dictionary")
CompanyByDomain.Add "microsoft.com", "D0001"
CompanyByDomain.Add "apple.com", "D0002"
' and so on, maybe you want to use a DB query and a loop to fill the dictionary
字典建好后,就可以这样使用了:
Domain = LCase(SubstringAfter(Request.Form("EMail"), "@"))
If CompanyByDomain.Exists(Domain) Then
CompanyCode = CompanyByDomain(Domain)
' insert record
Else
' show error
End If
其中 SubstringAfter()
是一个小辅助函数
Function SubstringAfter(str1, str2)
Dim pos
pos = InStr(str1, str2)
If pos Then SubstringAfter = Mid(str1, pos + 1)
End Function
这是其中一种方法。其他想法:
- 直接在数据库中查询公司代码ASP,不用建字典
- 在 SQL 中构建适当的 INSERT 语句,从相关的 table 中获取公司代码并使用 ASP 中的公司代码
- 创建一个存储过程来完成 SQL 中的所有工作和必要的检查,以便 ASP 没有自己的业务逻辑,它所做的只是将表单字段作为参数传递给存储过程