Проверка дублирования идентификатора электронной почты и номера телефона в базе данных Firebase с использованием JavaScript - PullRequest
2 голосов
/ 16 мая 2019

Я совершенно новичок в firebase.Я создаю основную контактную форму для своего приложения и подключил ее к базе данных Firebase.У меня нет аутентификации для моего приложения.,Я установил все правила на True.Я хочу предотвратить дублирование, если в базе данных есть номер телефона и адрес электронной почты, я хочу отобразить сообщение об ошибке.

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

firebase.initializeApp(firebaseConfig);
// Reference messages collection

// 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 email = getInputVal('email');
  var phone = getInputVal('phone');
  var skills = getInputVal('skills');
  var jobId = getInputVal('jid');
  var linkedin = getInputVal('linkedin');
  var github = getInputVal('github');
  var location = getInputVal('location');


  // Save message
  saveMessage(fname, lname, email, skills, phone, jobId, linkedin, github, location, );
  // file upload
  var fileButton = document.getElementById("fileButton");
  var file = fileButton.files[0];

  firebase.storage().ref('self/' + file.name).put(file);
  
}
// Function to get get form values
function getInputVal(id) {
  return document.getElementById(id).value;
}

// Save message to firebase
function saveMessage(fname, lname, email, skills, phone, jobId, linkedin, github, location) {
  firebase.database().ref().child('self/data/' + phone).set({
    name: fname + " " + lname,
    email: email,
    phone: phone,
    skills: skills,
    jobId: jobId,
    linkedin: linkedin,
    github: github,
    location: location
  });
}
//snapshot to check the values in database
  firebase.database().ref().child('self/data/' ).on('child_added', snap => {
    var name = snap.child('name').val();
    var email = snap.child('email').val();
    var phone = snap.child('phone').val();
    var skills = snap.child('skills').val();
    var jobId = snap.child('jobId').val();
    var linkedin = snap.child('linkedin').val();
    var github = snap.child('github').val();
    var location = snap.child('location').val();
   
    $('#table_bdy').append('<tr><td>' + name + '</td><td>' + email + '</td><td>' + phone + '</td><td>' + skills + '</td><td>' + jobId + '</td><td>' + location + '</td><td>' + github + '</td><td>' + linkedin + '</td></tr>')

  })

1 Ответ

1 голос
/ 16 мая 2019

Перед сохранением новых значений в базе данных извлеките данные из базы данных и проверьте, совпадает ли адрес электронной почты, указанный в форме, с адресом электронной почты, полученным из базы данных. Например:

  var newEmail = getInputVal('email');
  firebase.database().ref().child('self/data/' ).on('child_added', snap => {
  var name = snap.child('name').val();
  var email = snap.child('email').val();
  if(newEmail.trim() === email.trim())
  {
     console.log("email already exists in the database");
  }
  else 
  {
    saveMessage(fname, lname, newEmail, skills, phone, jobId, linkedin, github, location);
  }
});

Попробуйте следующее:

firebase.initializeApp(firebaseConfig); 
 // Reference messages collection 

// 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, phone, jobId, linkedin, github, location) { 
 let ref = firebase.database().ref().child('self/data/'); 
  ref.on('value', snap => { 
   if(snap.exists()) 
   { 
     snap.forEach(childSnapshot => { 
     var name = childSnapshot.child('name').val(); 
     var email = childSnapshot.child('email').val(); 
     var phone = childSnapshot.child('phone').val(); 
     var skills = childSnapshot.child('skills').val(); 
     var jobId = childSnapshot.child('jobId').val(); 
     var linkedin = childSnapshot.child('linkedin').val(); 
     var github = childSnapshot.child('github').val(); 
     var location = childSnapshot.child('location').val(); 
     var status = childSnapshot.child('status').val(); 
     console.log(status); 
      if (newEmail.trim() === email.trim()) 
      { //check if email exists 
        console.log("email already exists in the database"); 
      } 
      else 
      { 
         console.log('hello'); 
         firebase.database().ref().child('self/data/' + phone).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/' + phone).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; 
}

Сначала необходимо получить значения из формы, а затем вызвать метод saveMessage в методе проверки, существует ли узел self/data, затем извлечь данные и проверить, существует ли электронная почта в базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...