Как запретить разным пользователям сохранять одно и то же значение для поля через ajax / c #? - PullRequest
0 голосов
/ 05 января 2019

У меня есть страница aspx, получающая адрес электронной почты от конечного пользователя и вызывающая ajax ниже:

function IfEmailExists() {
                $.ajax({
                    url: "Handler.ashx",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    data: { 'Email': $('#txtEmail').val(), 'Method': 'IfEmailExists' },
                    responseType: "json",
                    success: OnCompleteIfEmailExists,
                    error: OnFail
                });
                return false;
            }

Функция ниже запускается в Handler.ashx.cs после запуска ajax-части:

case "IfEmailExists":
  ss = new Staff();
  string Email = context.Request["Email"];
  string IsEmailExist = javaScriptSerializer.Serialize(ss.CheckIfEmailExists(Email));

  context.Response.ContentType = "text/html";
  context.Response.Write(IsEmailExist);
  return;

В классе «Персонал» приведенная ниже функция запускается с помощью кода выше:

public int CheckIfEmailExists(string Email)
{
   int outputEmail = 0;
   SQLDatabase sqldb = new SQLDatabase();
   DataTable dt = new DataTable();
   dt = sqldb.ExecStoredProcedureDataTable("[spDoesEmailExists]", new SQLParamList().Add("@Email", Email));
   if (dt.Rows.Count > 1)
   {
      outputEmail = 1;
   }
   else
   {
      outputEmail = 0;
   }
   return outputEmail;
}

хранимая процедура [spDoesEmailExists] выполняет:

Select Email from StaffEmailUsage where Email = @Email

Обратите внимание, что существует другая функция ValidateEmail (), которая проверяет, является ли электронная почта действительной.

С помощью этой структуры, когда пользователь пытается использовать адрес электронной почты более одного раза, он (а) получает сообщение об ошибке: This email address has been already used! по умолчанию. Я пытался передать это, но я всегда получал ошибку.

Проблема в том, что я вижу, что разные люди использовали один и тот же адрес электронной почты более одного раза. Как это возможно, я не мог найти. Я пытался использовать пробелы в начале и в конце адреса электронной почты, отключать JavaScript, используя разные браузеры, но я всегда получал сообщение об ошибке, что ожидается. Как я могу запретить различным пользователям использовать один и тот же адрес электронной почты несколько раз? Любая помощь или совет будут оценены. Благодаря.

1 Ответ

0 голосов
/ 05 января 2019

Добавление уникального ограничения на столбец «Электронная почта» в таблице StaffEmailUsage предотвратит сохранение дубликатов электронных писем в базе данных. С этим ограничением, каждый раз, когда приложение пытается сохранить дублирующую электронную почту, возникает ошибка sql, которая, вероятно, покажет, где и как пользователи обойдут сообщение об ошибке.

ALTER TABLE StaffEmailUsage
ADD UNIQUE (Email)

Опора на ошибки при поиске источника проблемы может быть не идеальной. Дважды проверьте, что в каждом месте, где пользователь может создавать или обновлять электронную почту, проверка выполняется.

Примечание. Если в таблице есть дубликаты, вы не сможете добавить ограничение уникальности, пока дубликаты не будут разрешены. Чтобы найти строки, которые нужно исправить, вы можете выполнить этот запрос:

SELECT Email, COUNT(Email) 
FROM StaffEmailUsage
GROUP BY Email
HAVING COUNT(Email) > 1
...