diff --git a/src/app/components/signup/index.php b/src/app/components/signup/index.php index e5fd04bb8263a9c0ef55e2de3b6eae13df344369..2affe9d7c1ab842748f4a07886ad7189150d5cae 100644 --- a/src/app/components/signup/index.php +++ b/src/app/components/signup/index.php @@ -17,72 +17,87 @@ $page = "SignUp"; <body> <!-- Navbar --> - <?php include (dirname(__DIR__)) . "/navbar/index.php" ?> - + <?php include(dirname(__DIR__)) . "/navbar/index.php" ?> + <section class="signupcont"> <div class="boxsignup"> <h1 class="judulsignup">Sign Up</h1> - <form class="form" action="/src/backend/validate-signup.php" method="post" id="form" > + <form class="form" action="/src/backend/validate-signup.php" method="post" id="form"> <div class="column"> <div class="input-box"> <label for="name" class="labelsignup">Name</label><br> <input type="text" id="name" name="name"> - <div class="error"></div> + <span class="error"> + <!-- <?php echo isset($errors['name']) ? $errors['name'] : ''; ?> --> + </span> </div> <div class="input-box"> <label for="email" class="labelsignup">Email</label><br> <input type="text" id="email" name="email"> - <div class="error"></div> + <span class="error"> + <!-- <?php echo isset($errors['email']) ? $errors['email'] : ''; ?> --> + </span> </div> </div> <div class="column"> <div class="input-box"> <label for="phone" class="labelsignup">Phone Number</label><br> <input type="tel" id="phone" name="phone"> - <div class="error"></div> + <span class="error"> + <!-- <?php echo isset($errors['phone']) ? $errors['phone'] : ''; ?> --> + </span> </div> <div class="input-box"> <label for="password" class="labelsignup">Password</label><br> <input type="password" id="password" name="password"> - <div class="error"></div> + <span class="error"> + <!-- <?php echo isset($errors['password']) ? $errors['password'] : ''; ?> --> + </span> </div> </div> <br> <div class="genderbox"> - <label for="gender" class="labelsignup">Gender</label><br> - <input type="radio" id="female" name="gender" value="Female"> - <label for="female" class="labelsignup">Female</label><br> - <input type="radio" id="male" name="gender" value="Male"> - <label for="male" class="labelsignup">Male</label> + <div id="gender"> + <label for="gender" class="labelsignup">Gender</label><br> + <input type="radio" id="female" name="gender" value="Female"> + <label for="female" class="labelsignup">Female</label><br> + <input type="radio" id="male" name="gender" value="Male"> + <label for="male" class="labelsignup">Male</label> <br> + <span class="error"> + <!-- <?php echo isset($errors['gender']) ? $errors['gender'] : ''; ?> --> + </span> + </div> </div> <div class="submit-button"> - <button type="submit" class="btn" id="register">Register</button><br> - <label class="detailtext">Already have an account?</label> - <u><a class="linklogin" href="/?login">Login here</a></u> + <button type="submit" class="btn" id="register">Register</button><br> + <label class="detailtext">Already have an account?</label> + <u><a class="linklogin" href="/?login">Login here</a></u> </div> </div> </form> </div> </section> - + <div class="name-overlay"> </div> <footer class="footer"> - <div class="footer-container"> - <div class="row"> - <div class="footer-col"> - <ul> - <img src="/src/public/img/gimmick.png" alt="logo" class="logofooter"> - <li><a class="footer-content">SayIt adalah platform yang mewadahi pendidikan seks dan pelaporan pelecehan seksual</a></li> - <li><a class="footer-content">Contact Us</a></li> - </ul> - </div> - </div> + <div class="footer-container"> + <div class="row"> + <div class="footer-col"> + <ul> + <img src="/src/public/img/gimmick.png" alt="logo" class="logofooter"> + <li><a class="footer-content">SayIt adalah platform yang mewadahi pendidikan seks dan pelaporan + pelecehan seksual</a></li> + <li><a class="footer-content">Contact Us</a></li> + </ul> </div> </div> - </footer> + </div> + </div> + </footer> </body> +<script src="/src/public/js/signup.js"></script> </html> \ No newline at end of file diff --git a/src/backend/validate-signup.php b/src/backend/validate-signup.php index 11a4a14e4e2683bc1d59576cf1a6411a5fde6f77..fd6fa3d29de68231c2524417eed0cd28c3dfebb4 100644 --- a/src/backend/validate-signup.php +++ b/src/backend/validate-signup.php @@ -1,65 +1,45 @@ <?php -require_once __DIR__ . "/../db.php"; +session_start(); // Start a session + +require_once __DIR__ . "/../db.php"; if ($_SERVER["REQUEST_METHOD"] === "POST") { $errors = array(); // Validate name if (empty($_POST['name'])) { - $errors[] = 'Please enter your name'; - // echo "<script>alert('Please enter your name!')</script>"; - echo "<script>window.location.href='/?signup';</script>"; + $errors['name'] = 'Please enter your name'; } // Validate email if (empty($_POST['email'])) { - $errors[] = 'Please enter your email'; - // echo "<script>alert('Please enter your email!')</script>"; - echo "<script>window.location.href='/?signup';</script>"; - } - elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { - $errors[] = 'Invalid email format'; - // echo "<script>alert('Please enter a valid email!')</script>"; - echo "<script>window.location.href='/?signup';</script>"; + $errors['email'] = 'Please enter your email'; + } elseif (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { + $errors['email'] = 'Invalid email format'; + } elseif (!checkExistingEmail($_POST['email'])) { + $errors['email'] = 'Email already exists'; } // Validate phone number if (empty($_POST['phone'])) { - $errors[] = 'Please enter your phone number'; - // echo "<script>alert('Please enter your phone number!')</script>"; - echo "<script>window.location.href='/?signup';</script>"; - } - // elseif (!preg_match('^\(\+62|62|0)8[1-9][0-9]{6,9}$^', $_POST['phone'])){ - // $errors[] = 'Invalid phone number format'; - // echo "phone"; - // } - - // Validate age - // if (empty($_POST['age'])) { - // $errors[] = 'Please enter your age'; - // echo "age"; - // } elseif (!is_numeric($_POST['age'])) { - // $errors[] = 'Age must be a number'; - // echo "age"; - // } + $errors['phone'] = 'Please enter your phone number'; + } elseif (!checkExistingPhone($_POST['phone'])) { + $errors['phone'] = 'Phone number already exists'; + } // Validate password if (empty($_POST['password'])) { - $errors[] = 'Please enter your password'; - // echo "<script>alert('Please enter your password!')</script>"; - echo "<script>window.location.href='/?signup';</script>"; + $errors['password'] = 'Please enter your password'; } elseif (strlen($_POST['password']) < 8) { - $errors[] = 'Password must be at least 8 characters long'; - // echo "<script>alert('Please enter your password!')</script>"; - echo "<script>window.location.href='/?signup';</script>"; + $errors['password'] = 'Password must be at least 8 characters long'; } + // Check if there are any validation errors if (empty($errors)) { // All input is valid, proceed to insert into the database $mysqli = require __DIR__ . "/../db.php"; $query = "INSERT INTO user (user_name, user_email, user_pass, user_gender, user_phone, roles) VALUES (?, ?, ?, ?, ?, ?)"; - $stmt = $mysqli->stmt_init(); if ($stmt->prepare($query)) { @@ -69,7 +49,7 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { if ($stmt->execute()) { echo "<script>alert('Register success!')</script>"; - echo "<script>window.location.href='/?home';</script>"; + echo "<script>window.location.href='/?login';</script>"; } else { echo $mysqli->error; } @@ -79,11 +59,46 @@ if ($_SERVER["REQUEST_METHOD"] === "POST") { $stmt->close(); $mysqli->close(); - } else { - // Display validation errors - foreach ($errors as $error) { - echo $error . '<br>'; - } } } + +// Function to check if an email already exists in the database +function checkExistingEmail($email) { + $mysqli = require __DIR__ . "/../db.php"; + + $checkEmail = "SELECT * FROM user WHERE user_email = ?"; + $stmt = $mysqli->prepare($checkEmail); + $stmt->bind_param('s', $email); + $stmt->execute(); + + $result = $stmt->get_result(); + + if ($result->num_rows > 0) { + echo "<script>alert('Email already exists!')</script>"; + echo "<script>window.location.href='/?signup';</script>"; + return false; + } + + return true; +} + +// Function to check if a phone number already exists in the database +function checkExistingPhone($phone) { + $mysqli = require __DIR__ . "/../db.php"; + + $checkPhone = "SELECT * FROM user WHERE user_phone = ?"; + $stmt = $mysqli->prepare($checkPhone); + $stmt->bind_param('s', $phone); + $stmt->execute(); + + $result = $stmt->get_result(); + + if ($result->num_rows > 0) { + echo "<script>alert('Phone Number already exists!')</script>"; + echo "<script>window.location.href='/?signup';</script>"; + return false; + } + + return true; +} ?> \ No newline at end of file diff --git a/src/public/css/signup.css b/src/public/css/signup.css index f48e1fe5b36cac7b4accf37886d0f7595fd49acb..c014f046ee697bddfbc6b284d0a10652cca24d24 100644 --- a/src/public/css/signup.css +++ b/src/public/css/signup.css @@ -244,7 +244,7 @@ section{ } -.column .input-box .labelsignup{ +.column .input-box .labelsignup .gender-box.labelsignup{ color: #FAF9F4; color: #FFF; font-family: 'Poppins', sans-serif; @@ -414,4 +414,18 @@ section{ color: #ff3860; font-size: 16px; height: 13px; +} + +.genderbox.success input { + border-color: #09c372; +} + +.genderbox.error input { + border-color: #ff3860; +} + +.genderbox .error { + color: #ff3860; + font-size: 16px; + height: 13px; } \ No newline at end of file diff --git a/src/public/js/signup.js b/src/public/js/signup.js new file mode 100644 index 0000000000000000000000000000000000000000..63830d7e4c6b3f5b4b9b3f064cfa49c938ebc547 --- /dev/null +++ b/src/public/js/signup.js @@ -0,0 +1,85 @@ +document.addEventListener('DOMContentLoaded', function () { + const form = document.getElementById('form'); + const name = document.getElementById('name'); + const email = document.getElementById('email'); + const phone = document.getElementById('phone'); + const password = document.getElementById('password'); + + form.addEventListener('submit', function (e) { + e.preventDefault(); + validateInputs(); + }); + + function validateInputs() { + let isValid = true; + + // Reset error messages + const errorElements = document.querySelectorAll('.error'); + errorElements.forEach((element) => (element.textContent = '')); + + // Validate name + if (name.value.trim() === '') { + setError(name.parentElement, 'Name is required'); + isValid = false; + } + + // Validate email + if (email.value.trim() === '') { + setError(email.parentElement, 'Email is required'); + isValid = false; + } else if (!isValidEmail(email.value.trim())) { + setError(email.parentElement, 'Provide a valid email address'); + isValid = false; + } + + // Validate phone number + if (phone.value.trim() === '') { + setError(phone.parentElement, 'Phone number is required'); + isValid = false; + } else if (!isValidPhone(phone.value.trim())) { + setError(phone.parentElement, 'Phone number must be 0xxxx'); + isValid = false; + } else if (isNaN(phone.value.trim())) { + setError(phone.parentElement, 'Phone number must be a number'); + isValid = false; + } + + // Validate password + if (password.value.trim() === '') { + setError(password.parentElement, 'Password is required'); + isValid = false; + } else if (password.value.trim().length < 8) { + setError(password.parentElement, 'Password must be at least 8 characters'); + isValid = false; + } + + // Validate gender + const gender = document.querySelector('input[name="gender"]:checked'); + if (!gender) { + setError(document.getElementById('gender'), 'Gender is required'); + isValid = false; + } + + if (isValid) { + // If all inputs are valid, submit the form to the server + form.submit(); + } + } + + function setError(container, message) { + console.log("container: " + container); + console.log("message: " + message); + const errorDisplay = container.querySelector('.error'); // Find .error within the container + errorDisplay.textContent = message; + } + + function isValidEmail(email) { + const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; + return re.test(String(email).toLowerCase()); + } + + function isValidPhone(phone) { + const re = /^(?:0)[2-9]\d{6,12}$/; + return re.test(phone); + } +});