skip to Main Content

Here is my php script for the registration page, the data is still being entered into the correct table but this problem is persistent.

Edit: I’ve seen comments asking for the javascript code, I’ve included it below the php code now.

`<?php
    session_start();
    header("Content-Type: application/json; charset=UTF-8");
    header("Access-Control-Allow-Origin: *");
    header("Access-Control-Allow-Headers: *");
    main();

    function main(){
        require 'connectToDB.php';
        // echo "nreached the php file";
        $response = array("code" => 0, "message" => "");

        $request = file_get_contents('php://input');
        $jsonRequest = json_decode($request);
        var_dump($jsonRequest);

        if (checkForExistingUser($conn, $jsonRequest) != 0){
            $response["code"] = 2;
            $response["message"] = "User already exists";
        }
        // else if($response["code"] == 1){
        //     // $userID = $conn->lastInsert();
        //     // header("Location: UniqueUserID.php");
        //     exit; 
        // }
        else{
            $response = addUser($conn, $jsonRequest);
            // header("Location: UniqueUserID.php");
            exit;
        }
        // printf(json_encode($response));
        // var_dump($response);
        $conn = null;
        return json_encode($response);

    }

    function checkForExistingUser ($conn, $jsonRequest){

        
        $stmt = $conn->prepare("
        SELECT COUNT(Email) as noOfUsers
        FROM user_main
        WHERE Email = :confirmemailadd");

        // $stmt -> bindParam(':confirmemailadd', $jsonRequest->confirmemailadd);

        if (isset($jsonRequest->confirmemailadd)) {
            $stmt->bindValue(':confirmemailadd', $jsonRequest->confirmemailadd);
        } else {
            $stmt->bindValue(':confirmemailadd', '');
        }

        $stmt->execute();

        $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

        $results = $stmt->fetchAll();

        $noOfResults = $results[0]["noOfUsers"];
        // echo($noOfResults);

        return $noOfResults;
    }

    function addUser($conn, $jsonRequest){

        $response = array("code"=>0, "message"=>"");

        // echo ("Reached addUser n");

        $firstname = sanitise($jsonRequest->firstname);
        $surname = sanitise($jsonRequest->surname);
        $username = sanitise($jsonRequest->username);
        $confirmemailadd = sanitise($jsonRequest->confirmemailadd);
        $phonenum = sanitise($jsonRequest->phonenum);
        $retypepassword = sanitise($jsonRequest->retypepassword);

        function encryptPassword($retypepassword) {
            $key = openssl_random_pseudo_bytes(32);
            $iv = openssl_random_pseudo_bytes(16);
            $encrypted = openssl_encrypt($retypepassword, 'AES-256-CBC', $key, 0, $iv);
            $hash = hash_hmac('sha256', $encrypted, $key);
            return $hash . ':' . base64_encode($iv) . ':' . base64_encode($encrypted);
        }

        $stmt = $conn->prepare("
                        INSERT INTO user_main (Name, Surname, Username, Email, PhoneNum, PWD) 
                        VALUES (:firstname, :surname, :username, :confirmemailadd, :phonenum, :retypepassword) ");
        

        $stmt->bindParam(':firstname', $firstname);
        $stmt->bindParam(':surname', $surname);
        $stmt->bindParam(':username', $username);
        $stmt->bindParam(':confirmemailadd', $confirmemailadd);
        $stmt->bindParam(':phonenum', $phonenum);
        $stmt->bindParam(':retypepassword', $retypepassword);


        try{
            $stmt->execute();
            $userID = $conn->lastInsertId();
            $response["code"] = 1;
            $response["message"] = "successfully added";
            $response["user_id"] = $userID;
        }
        catch (PDOException $e){
            $response["code"] = 0;
            $response["message"] = $e->getMessage();

        }
        // echo json_encode($response);
        return $response;



    }

    function sanitise($data) {
        
        $data = trim($data);
        $data = stripslashes($data);
        $data = htmlspecialchars($data);
        return $data;

    }

?>
`

I’m still relatively new to the back-end development side of things but I cannot figure this one out, I’ve tried to google it and research other solutions on stack overflow but couldn’t find anything useful

document.addEventListener('DOMContentLoaded', function () {
    const form = document.querySelector('form');
    form.addEventListener('submit', handleFormSubmit);
  }, false)
 
  function handleFormSubmit(event) {
    event.preventDefault();
    checkEmails();
    checkPasses();
    processForm();
    // redirectToPage()
  }

  function checkEmails(){
 
    var emailValue = document.getElementById("emailadd").value;
    var retypeEmailValue = document.getElementById("confirmemailadd").value;

    if (emailValue !== retypeEmailValue){
        window.alert("Emails do not match.");
    }
    }

    function checkPasses(){
        
        var passValue = document.getElementById("password").value;
        var retypeValue = document.getElementById("retypepassword").value;
    
        if (passValue !== retypeValue){
            window.alert("Passwords do not match.");
        }

    }

  

  function processForm(){
    
    var userDetails = gatherData()
    console.log(userDetails);
    postRequest(userDetails)
    
  }


  function gatherData(){
    //gather the data from the form fields into JSON 
    var userDetails = {
        firstname : document.getElementById("firstname").value,
        surname : document.getElementById("surname").value,
        username  : document.getElementById("username").value,
        confirmemailadd:   document.getElementById("confirmemailadd").value,
        phonenum:   document.getElementById("phonenum").value,
        retypepassword:   document.getElementById("retypepassword").value,
    }
    
    return userDetails;
    
    }
async function postRequest(userDetails){
    
    // make an AJAX POST request to server 
        try{

            const response = await fetch("../php/register.php",{
                method: 'POST',
                headers: {
                    
                    'Origin' : 'http://localhost/',
                    'Content-Type': 'application/json', // sent request
                    'Accept':       'application/json'  // expected data sent back
                    
                },
                body: JSON.stringify(userDetails),
            });
    
            const data = await response.json();
            console.log(data);
            handleResponseCode(data);
            
        }catch (error){
            console.log('Error:',error);
        }

} 
function handleResponseCode(data){
    console.log("response code: ", data.code);
    console.log("response message: ", data.message);

    if (data.code  == 1){
        alert ("Your account has been successfully created")
    }
    else if (data.code == 2 ){
        alert (data.message );
    }
}

2

Answers


  1. You can try to catch the root cause of this error:

    try {
        $jsonResponse = json_encode($response);
    } catch (Exception $e) {
        // Handle JSON encoding error
        die("JSON encoding error: " . $e->getMessage());
    }
    

    This will catch any exceptions thrown during the encoding process and allow you to handle them appropriately.

    Edit:

    function main(){
        // ...
        try {
            $jsonResponse = json_encode($response);
        } catch (Exception $e) {
            // Handle JSON encoding error
            die("JSON encoding error: " . $e->getMessage());
        }
        $conn = null;
        return $jsonResponse;
    }
    

    you can put this catch error inside a function you wanna trace

    Login or Signup to reply.
  2. Just remove the var_dump(...). Because that var_dump is already sending content back.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search