2017-02-26 1 views
1

Ich programmiere eine kleine App, in der Sie ein Punktesystem haben (wie 10 Punkte pro Benutzer) und ich mache dies über die Firebase-Datenbank.Wie kann ich ein Firebase-Element über Javascript aktualisieren?

Mein Problem ist, dass ich nicht weiß, wie ich mein Datenbankelement, das ich am Anfang erstellt habe, aktualisieren kann. Ich möchte meinen Punkt über ein JavaScript-Skript aktualisieren, das ausgelöst werden kann.

Also das ist mein aktueller Code:

var rootRef = firebase.database().ref(); 

var users = rootRef.child ("Benutzer");

var log = document.getElementById ('log');

document.getElementById('registerBtn').addEventListener('click', function(event) { 

     var empt1 = document.forms["form1"]["email"].value; 
     var empt2 = document.forms["form1"]["password"].value; 
     var empt3 = document.forms["form1"]["email"].value; 

     if(empt1 == "" || empt2 == "" || empt3 == "" || !document.getElementById("txtemail").checkValidity()){ 
      alert("Something went wrong!"); 
     } 
     else{ 
      $("#registerProgress").show(); 
      $("#registerBtn").hide(); 
      //Get email and pass 
      const email = txtemail.value; 
      const pass = txtpassword.value; 
      const username = txtusername.value; 
      const auth = firebase.auth(); 

      const promise = auth.createUserWithEmailAndPassword(email, pass); 
      promise.catch(e => console.log(e.message)); 
      //users.child(username).set({ name: username }); 
      users.once('value', function(snapshot) { 
       if (!snapshot.hasChild(username)) { 
        users.child(username).set({username: username, points: "100"}); 
       } 
       else { 
        alert("That username is already registered"); 
       } 
      }); 
     } 
    }); 

Vielen Dank im Voraus!

Antwort

0

Ich frage Sie, wie Sie den Benutzerdatensatz in der Firebase nur aktualisieren, wenn der Benutzer noch nicht existiert? Unter der Annahme, Feuerbasis 3.xx:

var usersRef = firebase.database().ref().child('users'); 

usersRef.child(username).once('value') 
    .then(function (userRecord) { 
    if(userRecord.exists()) { 
     alert('That username is already registered'); 
    } else { 
     //--> There's a ref in each snapshot 
     userRecord.ref.child('username').set(username) 
     .then(function() { 
      userRecord.ref.child('points').set(100); 
     }); 
    } 
    }); 

hinzufügen Punkte:

usersRef.child(username).child('points').transaction(function (points) { 
    return (points || 0) + 10; 
}); 

Official Reference mentioning transactions

HINWEIS: Vergessen Sie nicht, eine Nummer (100) und nicht eine Zeichenfolge ("100") oder zu speichern Der Inkrementierer funktioniert nicht richtig. Viel Glück.

+0

aber jedes Mal, wenn ein Benutzer das Level gewinnt, sollte er wie 10 Punkte bekommen -> und dies sollte in der Datenbank aktualisiert werden – Zoruak

+0

Aktualisiert, um dies zu tun. – deezy

+0

vielen dank !!!!!! – Zoruak

Verwandte Themen