0

I am trying to get the data from user registration form in HTML and then push the data to JSON and then get the JSON and store into MySQL. Please help me.

HTML

    <form id="myForm" action="userInfo.php" method="post">
        <table align="center">
            <tr>
                <td><label for="FirstNameLabel" class="tableproperties">First Name</label></td>
                <td><input type="text" class="signupTextBoxStyle" name="firstName" placeholder="Enter First Name" id="FirstNameBox" required/></td>
            </tr>
            <tr>
                <td><label for="LastNameLabel" class="tableproperties">Last Name</label></td>
                <td><input type="text" name="lastName" placeholder="Enter Last Name" id="LastNameBox" class="signupTextBoxStyle" required></td>
            </tr>
        <tr>
            <td><label for="eMailLabel" class="tableproperties">Email</label></td>
            <td><input type="email" name="email" placeholder="Enter Email" id="eMailBox" class="signupTextBoxStyle" required></td>
            <td id="emailStatus"></td>
        </tr>

        <tr>
            <td><label for="passwordLabel" class="tableproperties">Password</label></td>
            <td><input type="password" name="password" placeholder="Enter Password" id="passwordTextbox" maxlength="24" class="signupTextBoxStyle" required></td>
            <td><i class="fa fa-info-circle infoIcon" title="Password must contain minimum 3 upper case, 2 lower case and 2 special chars"></i></td>
            <td><progress value="0" max="100" class="progressBar" id="progressStatus"></progress></td>
            <td id="passwordStrength"></td>
        </tr>

        <tr>
            <td><label for="confirmPasswordLabel" class="tableproperties">Confirm Password</label></td>
            <td><input type="password" name="confirmpassword" placeholder="Must be same as password" maxlength="24" id="confirmPasswordBox" class="signupTextBoxStyle" required></td>
            <td id="passwordMismatch"></td>
        </tr>

        <tr>
            <td><label for="dobLabel" class="tableproperties">D.O.B</label></td>
            <td><input type="date" name="dob" placeholder="Enter D.O.B" id="dobBox" class="signupTextBoxStyle" required></td>
        </tr>

        <tr>
            <td><label for="dobTimeLabel" class="tableproperties">D.O.B with time</label></td>
            <td><input type="datetime" name="dobTime" placeholder="Enter D.O.B with time" id="dobTimeBox" class="signupTextBoxStyle" required></td>
        </tr>

        <tr>
            <td><label for="localDOBLabel" class="tableproperties">Local D.O.B</label></td>
            <td><input type="datetime-local" name="localdob" placeholder="Enter Local D.O.B" id="localDobBox" class="signupTextBoxStyle" required></td>
        </tr>

        <tr>
            <td><label for="ssnLabel" class="tableproperties">SSN</label></td>
            <td><input type="text" name="ssn" placeholder="000-00-0000" id="ssnBox" class="signupTextBoxStyle" required pattern="^(\d{3}-\d{2}-\d{4})$"></td>
        </tr>

        <tr>
            <td><label for="usPhoneNumber" class="tableproperties" >US Phone Number</label></td>
            <td><input type="text" name="phone" placeholder="000-000-0000" id="usNumberBox" class="signupTextBoxStyle" required></td>
            <td id="phoneStatus"></td>
        </tr>

        <tr>
            <td><label for="creditLabel" class="tableproperties" id="CreditText">Credit Card Number</label></td>
            <td><input type="text" name="creditCardNumber" placeholder="Enter Credit Card Number" id="creditBox" class="signupTextBoxStyle" required pattern="^[0-9]{12}(?:[0-9]{4})?$"></td>
        </tr>


        <tr>
            <td colspan='2'>
                <input type="submit" class="btn btn-primary btn-lg btn-block signupbuttonStyle" id="sub" />
                <button type="button" class="btn btn-danger btn-lg btn-block signupbuttonStyle" onclick="location.href = 'index.html';">Cancel</button>
            </td>
        </tr>
        </table>
    </form>

PHP(Just to test Data is getting saved to mySQL if i manually enter the data)

$json_obj = '{
      "jsonFirstName": "Kishan",
      "jsonLastName": "Kishan",
      "jsonEmail": "Kishan",
      "jsonPassword": "Kishan",
      "jsonDob": "Kishan",
      "jsonDobTime": "Kishan",
      "jsonLocaldob": "Kishan",
      "jsonSsn": "Kishan",
      "jsonPhonenumber": "Kishan",
      "jsonCreditcardnumber": "Kishan"
 }';

PHP(Error if i want to get the values from the form)

$json_obj = '{
      "jsonFirstName": (string) $_POST['firstName'],
      "jsonLastName": (string) $_POST['lastName'],
      "jsonEmail": (string) $_POST['email'],
      "jsonPassword": (string) $_POST['password'],
      "jsonDob": (string) $_POST['dob'],
      "jsonDobTime": (string) $_POST['dobTime'],
      "jsonLocaldob": (string) $_POST['localdob'],
      "jsonSsn": (string) $_POST['ssn'],
      "jsonPhonenumber": (string) $_POST['phone'],
      "jsonCreditcardnumber": (string) $_POST['creditCardNumber']
 }';

Error Description
Parse error: syntax error, unexpected 'firstName' (T_STRING) in /Applications/XAMPP/xamppfiles/htdocs/xampp/297test/userInfo.php on line 19

REST of PHP Code
$result = json_decode($json_obj);

$firstname = $result->jsonFirstName;
$lastname = $result->jsonLastName;
$email = $result->jsonEmail;
$password = $result->jsonPassword;
$dob = $result->jsonDob;
$dobTime = $result->jsonDobTime;
$localdob = $result->jsonLocaldob;
$ssn = $result->jsonSsn;
$phonenumber = $result->jsonPhonenumber;
$creditcardnumber = $result->jsonCreditcardnumber;


if(mysql_query("INSERT INTO user VALUES('$firstname', '$lastname', '$email', '$password', '$dob', '$dobTime', '$localdob', '$ssn','$phonenumber','$creditcardnumber')")){
    echo "Successfully Inserted";
}

else
    echo "Fail to Insert";
Burkhard
  • 14,596
  • 22
  • 87
  • 108
Kishan Chaitanya
  • 84
  • 2
  • 2
  • 9
  • 2
    Why do you want to convert it in json? – Indrasinh Bihola Oct 07 '14 at 06:10
  • i don't understand why do you need to make the POST variables into a json string, then decoding it, then using it again. it doesnt make sense – Kevin Oct 07 '14 at 06:10
  • $json_obj = "{'jsonFirstName': " . mysqli_real_escape_string($_POST['firstName'] . ")} - Or better, use prepared statements... – fsperrle Oct 07 '14 at 06:13
  • i am just working on an assignment in my university.. these are the requirements...i need to get the form input in json and then parse it to SQL server... – Kishan Chaitanya Oct 07 '14 at 06:14
  • @Fabian it stil doent wrk..thanks fr your inputs :( – Kishan Chaitanya Oct 07 '14 at 06:20
  • you have to wrap the whole string with a call to json_encode(....) so you get an actual json object and not a string. – fsperrle Oct 07 '14 at 06:23
  • @Fabian $result = json_decode('{ "jsonFirstName": (string) $_POST['firstName'], "jsonLastName": (string) $_POST['lastName'], "jsonEmail": (string) $_POST['email'], "jsonPassword": (string) $_POST['password'], "jsonDob": (string) $_POST['dob'], "jsonDobTime": (string) $_POST['dobTime'], "jsonLocaldob": (string) $_POST['localdob'], "jsonSsn": (string) $_POST['ssn'], "jsonPhonenumber": (string) $_POST['phone'], "jsonCreditcardnumber": (string) $_POST['creditCardNumber'] }'); – Kishan Chaitanya Oct 07 '14 at 06:34
  • @fabian..with the changes you told me getting "Parse error: syntax error, unexpected 'firstName' (T_STRING) in /Applications/XAMPP/xamppfiles/htdocs/xampp/297test/userInfo.php on line 33" I am really sry..i am totally new to this..so facing many new problems at the same time ;( – Kishan Chaitanya Oct 07 '14 at 06:35

4 Answers4

1

Creating JSON-Strings directly through concatenation is hard because of quotes, new line characters etc.

Instead, create an array of values and encode that into a JSON string with json_encode:

$values = array(
  "jsonFirstName" =>        $_POST['firstName'],
  "jsonLastName" =>         $_POST['lastName'],
  "jsonEmail" =>            $_POST['email'],
  "jsonPassword" =>         $_POST['password'],
  "jsonDob" =>              $_POST['dob'],
  "jsonDobTime" =>          $_POST['dobTime'],
  "jsonLocaldob" =>         $_POST['localdob'],
  "jsonSsn" =>              $_POST['ssn'],
  "jsonPhonenumber" =>      $_POST['phone'],
  "jsonCreditcardnumber" => $_POST['creditCardNumber']
);

$json_obj = json_encode($values);

Alternatively you can just do:

$json_obj = json_encode($_POST);

You will then get a JSON object with every index of $_POST. The only difference is, that you can't rename your fields as you did in your example.

fsperrle
  • 1,262
  • 1
  • 14
  • 26
  • thanks...so far its gng on gud....when i echo $json_obj..i get the following result( {"jsonFirstName":"userfirst","jsonLastName":"userlast","jsonEmail":"user@gmail.com","jsonPassword":"QWERqwer!@#$","jsonDob":"2014-01-01","jsonDobTime":"dobtime","jsonLocaldob":"2014-01-01T01:00","jsonSsn":"123-12-1234","jsonPhonenumber":"123-123-1234","jsonCreditcardnumber":"123412341234"})...can you pls guide me how to store these values each one by one in the mySQl server...that would solve my issue actually.. – Kishan Chaitanya Oct 08 '14 at 01:50
0

Not sure why you are doing it this way, however the parse error is because you are using a single quote to open the string and then also using that to pick the array index.

Change $_POST['firstName'] to use double quotes such as $_POST["firstName"]

Lock
  • 5,422
  • 14
  • 66
  • 113
  • it stil doesnt wrk..this error comes in Notice: Trying to get property of non-object in /Applications/XAMPP/xamppfiles/htdocs/xampp/297test/userInfo.php on line 35 "$firstname = $result->jsonFirstName;"-->this line it is pointing out – Kishan Chaitanya Oct 07 '14 at 06:18
0

EDIT: Try to do this.

$array = (
      "jsonFirstName" =>  $_POST['firstName'],
      "jsonLastName" =>  $_POST['lastName'],
      "jsonEmail" => $_POST['email'],
      "jsonPassword" => $_POST['password'],
      "jsonDob" => $_POST['dob'],
      "jsonDobTime" => $_POST['dobTime'],
      "jsonLocaldob" => $_POST['localdob'],
      "jsonSsn" => $_POST['ssn'],
      "jsonPhonenumber" => $_POST['phone'],
      "jsonCreditcardnumber" => $_POST['creditCardNumber']
 );

$json = json_encode($array);
0

You're getting an error because you are creating the JSON object out of the POST variables in a wrong way. There is indeed an issue with quotes in your statement. It should rather be something like:

  $json_obj = '{
  "jsonFirstName": "'.(string) $_POST['firstName'].'",
  "jsonLastName": "'.(string) $_POST['lastName'].'",
  "jsonEmail": "'.(string) $_POST['email'].'",
  "jsonPassword": "'.(string) $_POST['password'].'",
  "jsonDob": "'.(string) $_POST['dob'].'",
  "jsonDobTime": "'.(string) $_POST['dobTime'].'",
  "jsonLocaldob": "'.(string) $_POST['localdob'].'",
  "jsonSsn": "'.(string) $_POST['ssn'].'",
  "jsonPhonenumber": "'.(string) $_POST['phone'].'",
  "jsonCreditcardnumber": "'.(string) $_POST['creditCardNumber'].'"
  }';

If I just include the variable without the double quotes while constructing the JSON object I get something like:

  $name = "Foo";
  $json_obj = '{"firstName" :'.$name.'}'; 

 //gets expanded to $json_obj = {"firstname" : Foo}
 //Whereas it should be $json_obj = {"firstname" :"Foo"}

It was because of the missing double quotes, you could not create a JSON object in the first place and therefore when you tried to decode it and further access an attribute, it gave an error suggesting :

 Trying to get property of non-object in /Applications/XAMPP/xamppfiles/htdocs/xampp/297test/userInfo.php on line 35

Try the code snippet I gave, it should hopefully help you out.

Vivek Pradhan
  • 4,777
  • 3
  • 26
  • 46