【问题标题】:Passing Values using Json in PHP and Ajax在 PHP 和 Ajax 中使用 Json 传递值
【发布时间】:2020-01-12 03:55:46
【问题描述】:

我是Json的初学者。 HTML table 中包含一些值,需要使用json 将这些值传递给prescription.php 页面。我试过了,但是在ajax成功之后,它在错误日志中显示了一条错误消息:

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

这是我的HTML 代码段:

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

这是我的ajax 电话

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

这是prescription.php页面中的php代码

<?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);

?>

我不知道我哪里出错了。非常感谢任何帮助。

【问题讨论】:

  • 删除dataType: 'JSON'
  • @RiteshKhandekar 我删除了,在ajax success 之后显示Records inserted successfully,当我看到database 没有保存时​​。没有插入记录??????
  • mysqli_stmt_execute($stmt);

标签: javascript php arrays json ajax


【解决方案1】:

根据我在您的 PHP 代码中看到的内容,我了解您希望存储 JSON index1 的 TEXT,因为它直接位于 med_records sql 元素下,并且您希望将 PARSE AS AN OBJECT index2 发送为您尝试对其进行解码并提取两个值:

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

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

因此,您应该只解码其中的一个并将第二个保留为字符串:

$jsondata = $_POST["index1"];

作为$jsondata,您想将json字符串存储在数据库中,对吗?如果不是,请提供一些有关预期数据的信息(表格的架构)。

一定要知道你的代码不是很安全:首先它应该验证是否发送了正确的值(解码解析的数据,检查预期的键,再次编码),还应该为出现的情况做好准备会话中不再有用户 ID。

【讨论】:

  • 谢谢。有用。 ;-) 。在这里,当我从database 检索此数据时,如何将这些数据分开并显示在HTML table 的单独列中
  • 我强烈建议您在实际存储之前执行$.makeArray(modess);,以避免像lengthprevObject 这样的jQuery 属性也被发送到您的数据库中。然后,从数据库中获取数据 - 例如变量 $row 中的每条记录,您可以简单地使用 json_decode foreach:$medRecords = json_decode($row['med_records']); 和更高版本:foreach($medRecords as $key =&gt; $object) { echo '。 $object->morning .' };` 等等
  • 是在我发送到prescription.php页面之前。
  • 什么意思? dataType: 'JSON' 还是别的什么?此设置不是必需的,因为实际上您将 json 封装为字符串并使用标准发布格式发送它们。
  • 不,我的意思是,$.makeArray(modess);。如何做到这一点?如何发送这些值?没有var medical = JSON.stringify(modess);
猜你喜欢
  • 1970-01-01
  • 2015-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-09
  • 2015-10-21
  • 1970-01-01
  • 2014-09-03
相关资源
最近更新 更多