Запрет дублирования почтового идентификатора и номера телефона в приложении Firebase без аутентификации после отправки формы и извлечения данных с использованием снимка - PullRequest
2 голосов
/ 04 июня 2019

Я пытаюсь предотвратить дублирование идентификатора электронной почты и номера телефона, поэтому сначала после отправки формы я проверяю идентификатор электронной почты и номер телефона в базе данных.Если какой-либо из них существует, он должен отобразить сообщение об ошибке email already exists in the database, иначе он должен отправить данные в базу данных реального времени.Моя заявка работает нормально для первой отправки формы.Если я отправляю форму с новыми значениями во второй раз, данные добавляются дважды.Если я отправляю форму с новыми значениями в третий раз, значения передаются 3 раза и помещаются в мою базу данных firebase, и даже выдается сообщение об ошибке.Он попадает в условие if и else из второй отправки формы с новыми значениями.Любые исправления, пожалуйста, помогите мне.

Ниже мой код, который я пробовал

firebase.initializeApp(firebaseConfig);
// Listen for form submit 
document.getElementById('contactform1').addEventListener('submit', submitForm);
// Submit form 
function submitForm(e) {
  e.preventDefault();
  // Get values 
  var fname = getInputVal('fname');
  var lname = getInputVal('lname');
  var newEmail = getInputVal('email');
  var newPhone = getInputVal('phone');
  var newskills = getInputVal('skills');
  var newjobId = getInputVal('jid');
  var newlinkedin = getInputVal('linkedin');
  var newgithub = getInputVal('github');
  var newlocation = getInputVal('location');

  saveMessage(fname, lname, newEmail, newskills, newPhone, newjobId, newlinkedin, newgithub, newlocation);
}

function saveMessage(fname, lname, newEmail, skills, newPhone, jobId, linkedin, github, location) {
  let ref = firebase.database().ref().child('self/data/');
  ref.once('value', snap => {
    if (snap.exists()) {
      snap.forEach(childSnapshot => {
        var email = childSnapshot.child('email').val();
        var phone = childSnapshot.child('phone').val();
        console.log(status);
        if (newEmail.trim() === email.trim() || newPhone.trim() === phone.trim()) { //check if email exists 
          console.log("email already exists in the database");
        } else {
          console.log('hello');
          firebase.database().ref().child('self/data/').push().set({
            name: fname + " " + lname,
            email: email,
            phone: phone,
            skills: skills,
            jobId: jobId,
            linkedin: linkedin,
            github: github,
            location: location
          });
        }
      });
    } else {
      firebase.database().ref().child('self/data/').push().set({
        name: fname + " " + lname,
        email: email,
        phone: phone,
        skills: skills,
        jobId: jobId,
        linkedin: linkedin,
        github: github,
        location: location
      });
    }
  });
}

// Function to get get form values 
function getInputVal(id) {
  return document.getElementById(id).value;
}

1 Ответ

1 голос
/ 18 июня 2019

Да, похоже, что внутри цикла есть логическая проблема, попробуйте так:

 function saveMessage(fname, lname, newEmail, skills, newPhone, jobId, linkedin, github, location) {
    let ref = firebase.database().ref().child('self/data/');
    ref.once('value', snap => {
      let isDuplicated = false;
    if (snap.exists()) {
      snap.forEach(childSnapshot => {
        var email = childSnapshot.child('email').val();
        var phone = childSnapshot.child('phone').val();
        console.log(status);
        if (newEmail.trim() === email.trim() || newPhone.trim() === phone.trim()) { //check if email exists 
          isDuplicated = true;
        } 
      });
    }
    if (snap.exists() && !isDuplicated) {
      firebase.database().ref().child('self/data/').push().set({
        name: fname + " " + lname,
        email: email,
        phone: phone,
        skills: skills,
        jobId: jobId,
        linkedin: linkedin,
        github: github,
        location: location
      });
    }
    });
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...