This JavaFX program is just supposed to allow a user to register a username and password and then have it stored in an SQL database.
There's been some criticism that it's not clean, readable or maintainable, but it still seems to work, so I was looking for criticism from people that are actually in the Software development industry and not just high school teachers.
public class MainController { // region Variables @FXML private Label formText, welcomeText; @FXML private Button login, signup; @FXML private TextField username, email, password, confirmPassword; @FXML private Button forgotPassword, formButton, resetPasswordButton; @FXML private AnchorPane formPage, dashboardPage; // endregion // region Form @FXML private void ChangeForm() { ObservableList<String> shortLogin = login.getStyleClass(), shortSignUp = signup.getStyleClass(); if (shortLogin.contains("active")) { // switching to signup formText.setText("Signup Form"); shortLogin.remove("active"); shortLogin.add("notActive"); shortSignUp.remove("notActive"); shortSignUp.add("active"); confirmPassword.setVisible(true); formButton.setText("Sign Up"); forgotPassword.setVisible(false); } else /*if (shortSignUp.contains("active"))*/ { // switching to login formText.setText("Login Form"); formButton.setText("Login"); shortSignUp.remove("active"); if(!shortSignUp.contains("notActive")) shortSignUp.add("notActive"); shortLogin.remove("notActive"); shortLogin.add("active"); confirmPassword.setVisible(false); formButton.setText("Login"); password.setPromptText("Password:"); forgotPassword.setVisible(true); } ClearForm(); } @FXML private void FormSubmit() { if (ValidForm()) { try { String name = (signup.getStyleClass().contains("active")) ? SQLUtils.Register(username.getText(), password.getText(), email.getText()) : SQLUtils.Login(username.getText(), password.getText(), email.getText()); formPage.setVisible(false); dashboardPage.setVisible(true); welcomeText.setText("Welcome, " + name); ClearForm(); } catch (Exception ignored) { ErrorAlert(Alert.AlertType.ERROR, "SQL Error", "Error Retrieving SQL Information from MainController", "There was an error retrieving the SQL information, or that user doesn't exist."); } } } @FXML private void Forgot() { forgotPassword.setVisible(false); resetPasswordButton.setVisible(true); forgotPassword.setVisible(true); formText.setText("Forgot Password"); formButton.setVisible(false); password.setPromptText("Enter New Password:"); ObservableList<String> shortLogin = login.getStyleClass(); if(shortLogin.contains("active") && !shortLogin.contains("notActive")) { shortLogin.remove("active"); shortLogin.add("notActive"); } } @FXML private void ResetPassword() { if(ValidForm()) { resetPasswordButton.setVisible(false); formButton.setVisible(true); forgotPassword.setVisible(true); formButton.setVisible(true); password.setPromptText("Password:"); ObservableList<String> shortLogin = login.getStyleClass(); formText.setText("Login Form"); shortLogin.remove("notActive"); shortLogin.add("active"); SQLUtils.ResetPassword(username.getText(), password.getText(), email.getText()); ClearForm(); } } // endregion // region Utils private void ClearForm() { username.clear(); email.clear(); password.clear(); confirmPassword.clear(); } private boolean ValidForm() { String emailRegex = "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9._]+\\.[a-zA-Z]{2,6}$"; String passwordRegex = "^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[/~`!@#$%^&*()_+{};:',<.>? =]).{8,}$"; if (username.getText().isEmpty() || email.getText().isEmpty() || password.getText().isEmpty() || (signup.getStyleClass().contains("active") && confirmPassword.getText().isEmpty())) { ErrorAlert(Alert.AlertType.INFORMATION, "Form Validation", "Invalid Fields", "All Fields Must Be Filled In"); return false; } else if (!Pattern.compile(emailRegex).matcher(email.getText()).matches()) { ErrorAlert(Alert.AlertType.INFORMATION, "Form Validation", "Invalid Email", "Please Enter A Valid Email That Contains An '@' And A '.com'"); return false; } else if (!Pattern.compile(passwordRegex).matcher(password.getText()).matches()) { ErrorAlert(Alert.AlertType.INFORMATION, "Form Validation", "Invalid Password", "Please Enter A Valid Password That Contains At Least 8 Characters, 1 Uppercase, 1 Lowercase, 1 Number, and 1 Special Character"); return false; } else if (signup.getStyleClass().contains("active") && !password.getText().equals(confirmPassword.getText())) { ErrorAlert(Alert.AlertType.INFORMATION, "Form Validation", "Passwords Must Match", "Password And Confirm Password Must Match"); return false; } else if (!SQLUtils.ValidInfo(username.getText(), password.getText(), email.getText())) { ErrorAlert(Alert.AlertType.ERROR, "Invalid Info", "That User Does Not Exist", "Please enter valid information for a user that does already exist."); return false; } return true; } public static void ErrorAlert(Alert.AlertType type, String title, String headerText, String contentText) { Alert alert = new Alert(type); alert.setTitle(title); alert.setHeaderText(headerText); alert.setContentText(contentText); alert.showAndWait(); } @FXML private void LogOut() { formPage.setVisible(true); dashboardPage.setVisible(false); welcomeText.setText("Welcome, NAME HERE"); } // endregion // region Window Settings @FXML private void Minimize(ActionEvent event) { ((Stage) ((Button) event.getSource()).getScene().getWindow()).setIconified(true); } @FXML private void Close() { System.exit(0); } // endregion } public class SQLUtils { // region Main Methods public static String Login(String username, String password, String email) { String sql = "select * from users_table where username = ? and password = ? and email = ?"; RunSQL(sql, username, password, email, true); return username; } public static String Register(String username, String password, String email) { String sql = "insert into users_table (username, password, email) values (?, ?, ?)"; RunSQL(sql, username, password, email, false); return username; } public static void ResetPassword(String username, String newPassword, String email) { String sql = "update users_table set password=? where username=? and email=?;"; RunSQL(sql, newPassword, username, email, false); } // endregion // region Utils private static Connection ConnectDB() { try { return DriverManager.getConnection("jdbc:mysql://localhost:3306/login_and_register", "root", "password"); } catch (Exception ignored) { MainController.ErrorAlert(Alert.AlertType.ERROR, "SQL Error", "Error Retrieving SQL Information", "Information could not be retrieved"); } return null; } public static boolean ValidInfo(String username, String password, String email) { String sql = "select * from users_table where username = ? and password = ? and email = ?"; Connection connect = ConnectDB(); if (connect == null) return false; try (PreparedStatement prepared = connect.prepareStatement(sql)) { prepared.setString(1, username); prepared.setString(2, password); prepared.setString(3, email); prepared.executeQuery(); System.out.println("working"); // FORM ALWAYS RESULTS IN WORKING, EVEN WHEN USER IS INVALID, DOES NOT ADD TO TABLE THO return true; } catch (Exception ignored) { MainController.ErrorAlert(Alert.AlertType.ERROR, "Error", "Error Running SQL", "There was an error running the SQL information, or that user doesn't exist."); } System.out.println("not working"); return false; } private static void RunSQL(String sql, String username, String password, String email, boolean query) { Connection connect = ConnectDB(); if (connect == null) return; try (PreparedStatement prepared = connect.prepareStatement(sql)) { prepared.setString(1, username); prepared.setString(2, password); prepared.setString(3, email); if (query) prepared.executeQuery(); else prepared.executeUpdate(); } catch (SQLException ignored) { MainController.ErrorAlert(Alert.AlertType.ERROR, "SQL Error", "Error Retrieving SQL Information, from RUNSQL", "There was an error retrieving the SQL information."); } catch (Exception ignored) { MainController.ErrorAlert(Alert.AlertType.ERROR, "Error", "Error Running SQL", "There was an error running the SQL information, or that user doesn't exist."); } } // endregion }