Nasik Thaheed
Nasik Thaheed

Reputation: 43

Passing Values using Json in PHP and Ajax

I am beginner of Json. There are some values contains in the HTML table, need to pass those values using json to prescription.php page. I tried, but after ajax success it shows a error message in error log:

e = {readyState: 4, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}

Here is my HTML code segments:

    <form method="post" id="prescriptionn" enctype="multipart/form-data">  
       <div class="table-responsive">
           <table class="table table-bordered mb-0" id="medical">
                <thead>
                    <tr>
                         <th>Medicine Name</th>
                         <th>Morning</th>
                         <th>Noon</th>
                         <th>Night</th>
                         <th> <button type="button" name="add" id="add" 
                                class="btn btn-success btn-xs"> + </button>  </th>

                     </tr>
                 </thead>
                 <tbody id="rows"> 
                 </tbody>
            </table>
                        <br><br>
             <div align="center">
                <input type="hidden" value="<?php echo $row['apt_id'] ?>" 
                          id="getapt" name="getapt" class="btn btn-primary">

                 <input type="hidden" value="<?php echo $row['p_id'] ?>" 
                          id="getpid" name="getpid" class="btn btn-primary">


                  <input type="button" name="submit" 
                           id="submit" class="btn btn-primary" value="Enter Prescription">

             </div>
            </div>
          </form>

Here is my ajax call

<script>
$(document).ready(function(){

var count=0;
$(document).on('click','#add',function() {
    count++; 

    var html= '';
    html += '<tr>';

    html += '<td id="medicinename"> <select  name="med_name[]" id="med_name[]" class="form-control med_name" ><option value=""> Select Medicine</option> <?php echo fill_select_box($conn, "0");  ?></select></td>';
    html += '<td id="mor"> <input type="text" name="morning[]" id="morning[]" class="form-control morning" /> </td>';
    html += '<td id="noo"> <input type="text" name="noon[]" id="noon[]" class="form-control noon" /> </td>';
    html += '<td id="nigh"> <input type="text" name="night[]" id="night[]" class="form-control night" /> </td>';
   // html += '<td class="charge"> </td>';
    html += '<td> <button type="button" name="remove" id="remove" class="btn btn-danger btn-xs remove" >  -  </button> </td>';
    html +=  '</tr>';

    $('#rows').append(html);

});
        });
</script>

 <script>

$(document).ready(function () {
$(document).on('click', '#submit', function () {

    var getapt = $('#getapt').val();  
    var getpid = $('#getpid').val();  

       var ids={ 
            'getapt': getapt,
             'getpid': getpid,
                }

        var modess = $('#rows tr').map(function() {
        let $tr = $(this);

        return [ { 
               "medname": $(this).find('.med_name').val(),
               "morning":$(this).find('.morning').val(),
               "noon":$(this).find('.noon').val(),
               "night": $(this).find('.night').val(),
                 } ]

                 console.log(modess);
                       });

   var ids = JSON.stringify(ids);
   var medical = JSON.stringify(modess);

          $.ajax({
              url: "adminquery/prescription.php", // Url to which the request is send
              method: "POST",             // Type of request to be send, called as method
              data:{
                   index1: medical, 
                   index2: ids
              },
              dataType:'json',             
              cache: false,
              success: function(data){
                alert('Items added');
            },
            error: function(e){
                console.log(e);
            }

          })

});

});
</script>

Here is the php codes in prescription.php page

<?php

session_start();
require_once "../auth/dbconnection.php";

// if (isset(json_decode($_POST["data"])) {

  $jsondata = json_decode($_POST["index1"]);
  $jsondata1 = json_decode($_POST["index2"]);

  echo $id= $jsondata1->getpid;
  echo $apt= $jsondata1->getapt;

    if($stmt = mysqli_prepare($conn,"INSERT INTO prescription (apt_id,user_id,p_id, med_records,date) VALUES (?, ?, ?, ?, ?)")){

      $cur_date = date('Y-m-d H:i:s');

        $user_id= $_SESSION['user_id'];
        // $p_id= $_POST['getpid'];
        // $apt_id= $_POST['getapt'];

        mysqli_stmt_bind_param($stmt, "sssss",$apt,$user_id, $id,$jsondata,$cur_date);

       echo "Records inserted successfully.";

} else{

  echo "ERROR: Could not prepare query: $sql. " . mysqli_error($conn);

}

  mysqli_stmt_close($stmt);

?>

I don't know where I went wrong. Any help is highly appreciated.

Upvotes: 0

Views: 847

Answers (1)

Bartosz Pachołek
Bartosz Pachołek

Reputation: 1318

Based on what I see in your PHP code I understand that you want to store the TEXT of a JSON index1 as it goes directly under med_records sql element and you want to send PARSE AS AN OBJECT index2 as you try to decode it and extract two values:

  $jsondata1 = json_decode($_POST["index2"]);

  echo $id= $jsondata1->getpid;
  echo $apt= $jsondata1->getapt;

Therefore you should decode only on of those and keep the second as string:

$jsondata = $_POST["index1"];

as $jsondata you want to store just as json string in the database, right? If no then please provide some info about expected data (schema of the table).

Be sure to know that your code is not very safe: first of all it should verify if correct values were even sent (decode parsed data, check for expected keys, encode again), also should be prepared for a case when there is no user id in session anymore.

Upvotes: 1

Related Questions