簡體   English   中英

為什么在解析JSON數據時一開始會得到0?

[英]why i am getting 0 at first, while parsing JSON data?

我是JSON的新手,我的目標是維護使用php進行mysql每次更新時特定列的歷史(通過php中的$ _POST發布)。 我將一個json數組用於歷史列,並將其放置在while循環中,之后,我使用array_merge()函數附加了要與上一個合並的變量。 我正在獲取輸出,但從0開始。讓我知道如何以正確的json格式附加必填字段,以及如何在div標簽中檢索json數據。 提前致謝。

PHP代碼:

<?php
$query = mysqli_query($conn,"SELECT `history` FROM projects WHERE `no` = '$id'");
  $json_data = array();
     while ($js = mysqli_fetch_assoc($query)) 
     {
       $json_data[] = $js['history'];
       $j = $json_data;
     }
?>  

 <?php
 if(isset($_POST['submit'])){
  if(isset($_GET['id'])){
  $id = $_GET['id'];
  $assign = mysqli_real_escape_string($conn,$_POST['assign']);
  $end_date = mysqli_real_escape_string($conn,$_POST['end_date']);
  $comments = mysqli_real_escape_string($conn,$_POST['comments']);

  $end_date = [
      'assigned_to' => $assign,
      'end_date' => $end_date,
      'comments' => $comments
     ];
 $json = array_merge($j,$end_date);
 $js = json_encode($json);
$ins = mysqli_query($conn,"UPDATE `projects` SET `assigned_to`='$assign',`end_date`='$end_date',
 `status`='$status',`comments`='$comments'`history`= '$js'  WHERE 
`episode_no` = '$id'");
}
}
?>  

MYSQL中的JSON數據:

{"0":"{"0":"{"0":"","assigned_to":"AAA","end_date":"2018-09-12","comments":"happy"}",
        "assigned_to":"AAA","end_date":"2018-09-12","comments":"jolly"}",
        "assigned_to":"AAA","end_date":"2018-09-12","comments":"xvbcvbdfghdfg"} 

首先,您的問題的答案:您正在$j中加載字符串數組,因此array_merge函數將無法按預期工作:

$j[0] = 'some JSON string from DB';

$json = array_merge($j, $end_date);

array_merge發現第二個參數是一個稀疏數組,因此它將鍵合並為字符串:

$json = [
  '0' => 'the previous string',
  'assigned_to' => ...
]

為了使您的想法可行,您可能需要通過追加到數組來存儲新的歷史記錄項:

$j[] = $end_date;
$js = json_encode($j);
...

這樣可以解決您的問題。

但是這里有一個非常重要的問題,您需要首先解決。 這是一個類似OMG的WTF發行版。 您將從用戶輸入(查詢參數)中獲取$id並將其發送到數據庫,而無需擔心。 假設用戶發送

https://your.server/some/path?id=';TRUNCATE TABLE projects --'

(當然,URL編碼正確)。 現在,您將其發送到數據庫:

SELECT `history` FROM projects WHERE `no` = '';TRUNCATE TABLE projects --''

再見項目。 用戶可以對數據庫執行任何操作,更改密碼,重新分配外鍵,將自己設置為管理員。

為了您的信任,請使用正確的ORM, 切勿將用戶輸入傳遞給數據庫!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM