2017-06-30 10 views
0

私はフォームデータを複数のテーブルに挿入するphp関数を持っています。 JSONレスポンスに「true」を返したいと思います。これは私が試したコードですが、空の文字列を返します。それはなぜそうですか?助言がありますか?php関数が空のjson文字列を返す

コード

function insertStores($params) 
{ 
    $img = $_FILES['sm_image']['name']; 
    $chk=mysqli_query($this->conn,"select * from store_manufacture where sm_brand_name='".$params['sm_name']."'"); 
    if(mysqli_num_rows($chk)==0) { 
     $query = "INSERT INTO store_manufacture (sm_brand_name,sm_image, sm_link, sm_description,sm_display) VALUES('" . $params["sm_name"] . "','" . $img . "', '" . $params["sm_link"] . "','" . $params["sm_desc"] . "','" . $params["sm_switch"] . "'); "; 

     $result = mysqli_query($this->conn, $query); 
     if ($result) { 
      $store_id = mysqli_insert_id($this->conn); 
      foreach ($params['categories_chk'] as $cat_id => $name) { 
       $query2 = "insert into store_category values ('',$store_id,$cat_id)"; 
       $result2 = mysqli_query($this->conn, $query2); 
       $sourcePath = $_FILES['sm_image']['tmp_name']; 
       $targetPath = "images/" . $img; 
       move_uploaded_file($sourcePath, $targetPath); 
      } 
     } 
     echo json_encode($result); 
    } 
} 
+0

私はJSON/JSエキスパートではありませんが、文字列 'true'または' false'を返すと思います。 – AbraCadaver

+0

'SELECT'が0行を返す場合、何もエコーしません。 – Barmar

+0

行がすでにテーブルに入っていて、何も挿入されない場合は、何をエコーするのでしょうか? – Barmar

答えて

0

あなたが問題のカップルを持っています。

$resultは、ブール値ではなくクエリ結果オブジェクトです。結果が失敗した場合はブール値に過ぎず、その場合はfalseになります。ただし、クエリが成功すると、クエリ結果オブジェクトになり、jsonに変換することはできません。さらに、ブール値であっても、それをjsonに変換したくない場合や、trueまたはfalseのリテラル文字列を効果的に返すような提案に従うことは望ましくありません。

理由が原因でもブール値をjson_encodingかかわらです:

echo json_encode(true);

はPHPによって許可され、これを返します。有効なJSONではありません

true

を。ほとんどのクライアントサイドライブラリは、JSONを期待するように指示されたときに、JSON以外の結果に遭遇するとエラーをスローします。これはJSONではありません。その代わりに、有効なJSONを返す必要があります。一つの有効なJSON文書となります

return json_encode([ 'success' => $result ? true : false ])

{ "success": true } 

または

{ "success": false } 

はその後調整それも、手動でbuildinこのような単純なものにすることができます(返されたJSONドキュメントのsuccessキーを検索するクライアントライブラリ

実際にには準備パラメータを使用する必要があります。 SQLインジェクションの脆弱性の可能性は高いと思います。

-1

私はあなたがそのような'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5としてjson_encodeに配列を渡さなければならないと思います。
お客様のクエリはINSERTで、返信はTrueまたはFalseです。
次のような配列をフォーマットしようとすることができます:

$result = array ("result"=> $result) 
json_encode($result) 
+0

'$ result'は真または偽ではありません。これはfalseまたはjsonエンコードできない結果オブジェクトです。 –

関連する問題