dqysi86208
2014-10-07 06:06
浏览 58

将HTML表单中的输入数据插入JSON对象,然后将其存储在MYSQL中

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";
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • dongtun3259 2014-10-07 10:51
    已采纳

    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.

    点赞 打赏 评论
  • dongliyan9190 2014-10-07 06:12

    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"]

    点赞 打赏 评论
  • duanchen7703 2014-10-07 06:19

    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);
    
    点赞 打赏 评论
  • duanhegn231318 2014-10-07 08:57

    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.

    点赞 打赏 评论

相关推荐 更多相似问题