1

I have a problem. I don't know why when I did run the HTML and javascript only (without PHP part), the validation works really well. However, when I did run the PHP with the HTML and JavaScript, the validation doesn't work. For example, when the username is 123john (everything else such as password, name,... met the requirements) which is not allowed. The form still submitted successfully (I did check the MySQL database and the user 123john is there). Can someone help me with this? Thank you for your help.

The original code structure is the PHP and HTML are in the same file, only the JavaScript is on a separate file.

<?php
session_start();
require 'connect.php';
if(isset($_POST['register'])){

$username = !empty($_POST['user_name']) ? trim($_POST['user_name']) : null;
$pass = !empty($_POST['pass']) ? trim($_POST['pass']) : null;
$firstName = !empty($_POST['first_name']) ? trim($_POST['first_name']) : null;
$lastName = !empty($_POST['last_name']) ? trim($_POST['last_name']) : null;
$collegeName = !empty($_POST['uni']) ? trim($_POST['uni']) : null;
$majorName = !empty($_POST['major']) ? trim($_POST['major']) : null;

$sql = "SELECT COUNT(user_name) AS num FROM users WHERE user_name = :username";
$stmt = $conn->prepare($sql);

$stmt->bindValue(':username', $username);

$stmt->execute();

$row = $stmt->fetch(PDO::FETCH_ASSOC);

if($row['num'] > 0){
   die('Username existed');
}

$sql = "INSERT INTO users (user_name, pass, first_name, last_name, uni, major) VALUES (:username, :password, :first_name, :last_name, :uni, :major)";
$stmt = $conn->prepare($sql);

$stmt->bindValue(':username', $username);
$stmt->bindValue(':password', $pass);
$stmt->bindValue(':first_name', $firstName);
$stmt->bindValue(':last_name', $lastName);
$stmt->bindValue(':uni', $collegeName);
$stmt->bindValue(':major', $majorName);

$result = $stmt->execute();

if($result){
    echo 'Thank you for registering with our website.';
}

 }
  ?>

var check_form=document.getElementById("registration");
var pattern=/^[a-zA-Z\s]+$/;
var patternUsername=/^[A-Za-z]\w*$/;
function check(event){
    var userName=document.getElementById("username");
    var passWord=document.getElementById("password");
    var last_name=document.getElementById("lastName");
    var first_name=document.getElementById("firstName");
    var collegeName=document.getElementById("uni");
    var majorName=document.getElementById("majoring");
    event.preventDefault();
    if(userName.value==""){
        alert("User name needs to be specified");
        userName.focus();
    }
    else{
        if(!patternUsername.test(userName.value)){
            alert("Invalid username");
            userName.focus();
        }
    }
    if(passWord.value==""){
        alert("Password needs to be specified");
        passWord.focus();
    }
    else{
        if(passWord.length<8){
            alert("Password needs to be longer than 8 characters");
            passWord.focus();
        }
    }
    if(first_name.value==""){
        alert("First name needs to be specified");
        first_name.focus();
    }
    else{
        if(!pattern.test(first_name.value)){
            alert("First name does not allow number");
            first_name.focus();
        }
    }
    if(last_name.value==""){
        alert("Last name needs to be specified");
        last_name.focus();
    }
    else{
        if(!pattern.test(last_name.value)){
            alert("Last name does not allow number");
            last_name.focus();
        }
    }
    if(collegeName.value==""){
        alert("College name needs to be specified");
        collegeName.focus();
    }
    else{
        if(!pattern.test(collegeName.value)){
            alert("Invalid college name");
            collegeName.focus();
        }
    }
    if(majorName.value==""){
        alert("Major name needs to be specified");
        majorName.focus();
    }
    else{
        if(!pattern.test(majorName.value)){
            alert("Invalid major name");
            majorName.focus();
        }
    }
    /*
    if(first_name.value!=="" && last_name.value!==""&&email!==""&&pattern.test(first_name.value)&&pattern.test(last_name.value)){
        alert("Perfect");
    }
    */
}
check_form.addEventListener("submit",check);
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Register</title>
        <!--<link rel="stylesheet" href="./register.css">-->
        <script src="./script.js" defer></script>
        <style>
            form div{
                padding: 8px;
            }
        </style>
        <link href="https://fonts.googleapis.com/css2?family=PT+Sans&display=swap" rel="stylesheet">
    </head>
    <body>
        <h1>Register</h1>
        <form id="registration" action="register.php" method="post">
            <div id='userName'>
                <label for="username">Username: </label>
                <input type="text" id="username" name="user_name"><br>
            </div>
            <div id="passWord">
                <label for="password">Password: </label>
                <input type="text" id="password" name="pass"><br>
            </div>
            <div id='firstname'>
                <label for="firstName">First Name: </label>
                <input type="text" id="firstName" name="first_name"><br>
            </div>
            <div id="lastname">
                <label for="lastName">Last Name: </label>
                <input type="text" id="lastName" name="last_name"><br>
            </div>
            <div id="uniName">
                <label for="uni">College Name: </label>
                <input type="text" id="uni" name="uni"><br>
            </div>
            <div id="majorName">
                <label for="majoring">Major: </label>
                <input type="text" id="majoring" name="major"><br>
            </div>
            <br>
            <input type="submit" name="register" value="Register"><br><br>
            <a href="./login.php">Already have an account?</a>
        </form>
    </body>
</html>
BeefNoodle
  • 125
  • 7

1 Answers1

1

If you want to do your client-side validation. you must change the type of the button from (send) to (button). Then, create a function in JS to validate your form. Call the function by clicking onclick button = "ItsFunctionForValidateAndSubmit ()". After checking: Create a form submission method using javascript. Here is a link to some sample form submissions.

Send POST data using XMLHttpRequest

<input type="buttom" name="register" value="Register" onclick="ItsFunctionForValidateAndSubmit()">