user13439828
user13439828

Reputation:

How to update data in the firebase using swift?

I have made an sign up and also login and it works! but now I want to edit the data in the Firebase. Can anyone help me how to do it? Thanks you Here the GUI, when I click update it will updated to the database

Here my firebase

Here the Sign Up View Controller

import UIKit    
import FirebaseAuth    
import FirebaseFirestore    

class SignupViewController: UIViewController {

    @IBOutlet weak var FirstNameTextfield: UITextField!

    @IBOutlet weak var LastNameTextfield: UITextField!        

    @IBOutlet weak var EmailTextField: UITextField!

    @IBOutlet weak var PasswordTextfield: UITextField!

    @IBOutlet weak var SignUpButton: UIButton!

    @IBOutlet weak var ErrorLabel: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.

        setUpElements()
    }
    func setUpElements(){
        ErrorLabel.alpha = 0
    }

    func validateFields()->String? {

        //check that all the fields are fill

        if FirstNameTextfield.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" || LastNameTextfield.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" || EmailTextField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "" || PasswordTextfield.text?.trimmingCharacters(in: .whitespacesAndNewlines) == ""
            {
            return "Please fill up all the Fields"
        }

        //check the password if the password is secure
        let cleanedPassword = PasswordTextfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)

        if Utilities.isPasswordValid(cleanedPassword) == false{
            return "Please enter at least 8 characters, with a number and characteristic symbol"
        }

        return nil
    }


    @IBAction func SignUpTap(_ sender: Any) {

        let error = validateFields()

        if error != nil{
            showError(message: error!)
        }
        else {
            let FirstName = FirstNameTextfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)
            let LastName = LastNameTextfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)
            let Email = EmailTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
            let Password = PasswordTextfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)


            Auth.auth().createUser(withEmail: Email, password: Password) { (result, err) in

                if err != nil{
                    self.showError(message: "Error creating the user")
                }
                else {

                let db = Firestore.firestore()


                    db.collection("users").addDocument(data:["FirstName":FirstName, "LastName":LastName, "uid": result!.user.uid]) { (Error) in

                        if error != nil{
                            self.showError(message: "Cannot saving user data" )
                        }
                    }

                    self.transitionToHomePage()

                }
            }
        }            
    }

    func showError( message:String){
        ErrorLabel.text = message
        ErrorLabel.alpha = 1
    }

    func transitionToHomePage(){
         let TabHomeViewController = storyboard?.instantiateViewController(identifier: Constrants.Storyboard.TabHomeViewController) as? TabHomeViewController

        view.window?.rootViewController = TabHomeViewController
        view.window?.makeKeyAndVisible()
    }
}

Here my login VC

@IBAction func LoginTap(_ sender: Any) {

        let Email = EmailTextField.text!.trimmingCharacters(in: .whitespacesAndNewlines)
        let Password = PasswordTextfield.text!.trimmingCharacters(in: .whitespacesAndNewlines)
        Auth.auth().signIn(withEmail: Email, password: Password) { (result, error) in

            if error != nil{
                self.ErrorLabel.text = error!.localizedDescription
                self.ErrorLabel.alpha = 1
            }
            else{
                let TabHomeViewController = self.storyboard?.instantiateViewController(identifier: Constrants.Storyboard.TabHomeViewController) as? UITabBarController

                self.view.window?.rootViewController = TabHomeViewController
                self.view.window?.makeKeyAndVisible()
            }

And here my Account View Controller

import UIKit

import FirebaseAuth

import FirebaseFirestore

import Firebase

class AccountViewController: UIViewController {

    @IBOutlet weak var FNameTextField: UITextField!


    @IBOutlet weak var LNameTextField: UITextField!


    @IBOutlet weak var EmailTextField: UITextField!


    @IBOutlet weak var PasswordTextField: UITextField!

    override func viewDidLoad() {
        super.viewDidLoad()

    }


    @IBAction func logoutbutton(_ sender: Any) {
        do{
            try Auth.auth().signOut()
            performSegue(withIdentifier: "signout", sender: nil)
        }
        catch{
            print(error)
        }
    } 
}

Upvotes: 1

Views: 1168

Answers (1)

Gius
Gius

Reputation: 89

You can use this function:

func updateFirestoreUserProfile(uid: String, data: [String:Any]) {
    Firestore.firestore().collection("users").document(uid).updateData(data) { err in
        if let err = err {
            print("Error updating document: \(err) ")
        }
        else {
            print("Document successfully updated")
        }
    }
}

You can use the function like this:

let data = [
        "FirstName": name,
        "LastName": surname
    ]

updateFirestoreUserProfile(uid: user.uid, data: data)

Upvotes: 1

Related Questions