如何将提交的电子邮件域与域阵列相匹配并将其插入数据库?ASP经典



我在ASP classic中遇到以下问题。

我在ASP经典中创建了一个表单,其中必须提供多个输入字段,并且在提交时,输入字段应存储在Microsoft SQL数据库中。

但是,有一个字段,即公司,不能立即存储在数据库表字段中。数据库中的company字段是代表公司的char类型,例如公司"Apple"等于字段值D0001,"Microsoft"等于D0002等等(不要问我为什么要这样做,因为以前的人这样做了,我无法更改)。

在表单中,人员不能插入公司名称,因为这些名称是默认设置的,链接到它们的代码字符也是默认设置的。为了在数据库中仍然获得正确的公司名称,我想将电子邮件的域匹配到正确的公司(因为公司的电子邮件域总是相同的,不能更改)。

现在我可能有点不知所措,但我想知道最好的方法是什么?我在考虑创建一个所有公司的电子邮件域数组,并为其指定正确的字符。然后,当一封电子邮件被提交时,我会像这样检查域:

EmailDomain = len(request.Form("EMail")) - InStrRev(request.Form("EMail"),"@")
EmailDomain = Right(request.Form("EMail"),EmailDomain)

(用于person@company.com这将导致公司

然后我会将EmailDomain与正确的公司数组(例如数组(5),它等于comany.com)进行匹配

然后,可以将指向右侧数组(例如D0001)的数组值转移到var中,并将其传递给数据库查询。

虽然我不知道这样做是否合适,因为我只是大声思考。除此之外,我不知道如何使这个数组(在foreach中)与域匹配。。是否有可能创建一个像Company[0]=Company.com-->D0001这样的数组?我该如何做到这一点?

一些建议将不胜感激!

提前谢谢!

您可以使用字典将关键字映射到值(即,将电子邮件域映射到公司代码):

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语句,该语句从相关表中获取公司代码,并使用ASP
  • 创建一个在SQL中执行所有工作和必要检查的存储过程,这样ASP就没有自己的业务逻辑,它所做的只是将表单字段作为参数传递给存储过程

最新更新