我是数据库世界的完全初学者。我正在尝试使用Firebase数据库,这是我遇到的问题:我想创建一个简单的注册,用户应该写信息,这些信息应该存储在实时数据库中。也就是说,当用户输入他的信息并点击“注册”时,应该创建用户1,然后用户2输入他的信息并且应该创建用户2,但是所有用户必须是相同级别的“孩子”。一切似乎工作正常,我创建了一个对象(在Javascript中)然后我作为名为“用户1”的“子”添加到数据库,但是当我刷新页面并为用户2输入其他信息时,此信息覆盖了用户1的信息,但是当我只是从浏览器的输入字段中删除用户1的信息(不进行刷新)并输入用户2的信息时,它会创建第二个“子”,名为user 2,因为它应该是,这就是我想要的成为。问题是为什么刷新浏览器会覆盖以前的信息。这是我的js代码:
function submitClick(x){
var firebaseRef = firebase.database().ref();
user_number ++;
firebaseRef.child("user" + " " + user_number).set(x);
}
function signup(){
var first_name = document.getElementById("first_name").value;
var last_name = document.getElementById("last_name").value;
var username = document.getElementById("user_name").value;
var password = document.getElementById("password").value;
var obj = {
First_Name: first_name,
Last_Name: last_name,
Username: username,
Password: password
}
return obj;
}
var hold;
var user_number = 0;
submit_btn.onclick = function() {hold = signup(); submitClick(hold)};
并且html只是输入字段和名为“注册”的按钮
答案 0 :(得分:2)
重新加载页面时,会重新加载JavaScript并从头开始执行。它没有记住重新加载之前发生的事情。
这意味着该行再次执行:
var user_number = 0;
因此user_number
再次从0
开始计算。
解决此问题的最简单方法是使用Firebase的push()
方法:
function submitClick(x){
var firebaseRef = firebase.database().ref();
firebaseRef.push().set(x);
}
这将在根目录下生成一个新的唯一ID,用于设置用户。虽然这些所谓的推送ID不像您的数字那么容易阅读,但它们在重新加载,多个用户甚至离线/在线条件下都保证是唯一的。