PHP json, daha sonra foreach?

3 Cevap php

Ben jQueryscript benim PHP sayfa için geçerli bir JSON dize gönderin:

var data = '{
 "data":[
  {
   "id":"12",
   "checked":"true"
  },{
   "id":"4",
   "checked":"false"
  },{
   "id":"33",
   "checked":"false"
  }
 ]
}';


$.post ("page.php", { data_input:data }, function (data) {
 // code
});

Ben PHP sayfasında verileri olsun, ben bir PDO için oluşturulan bir foreach deyimi kullanmak deneyin ardından json_decode yöntemiyle ayrıştırmak ve Sorgu:

<?php

$data_input = json_decode ($_REQUEST['data_input'], true);

$sql = "UPDATE my_table SET user_enabled = :checked WHERE node_prop_id = :id";
$stmt = $dns->prepare ($sql);

foreach ($data_input as $data) {
 $ok = $stmt->execute ($data);
 $num = $stmt->rowCount ();
} 
if ($ok) return 1;
else return 0;

?>

Bu bana hata verir:

PHP Uyarı:. On line) in / home / .. / page.php XX (foreach için verilen Geçersiz değişken

Ben foreach deyimi benim JSON verileri kullanmak için bir yol bulabilir miyim?

3 Cevap

Ben sorunu buldum:

<?php

// I've changed $data to $json for more clarity
$json = json_decode (stripslashes ($_REQUEST['json_string']), true); // added stripslashes method for more debug, but i think it still works without
$json = $json["data"]; // this was the problem

$sql = "UPDATE my_table SET user_enabled = :checked WHERE node_prop_id = :id";
$stmt = $dns->prepare ($sql);

foreach ($json as $value) {
    $ok = $stmt->execute ($value);
    $num = $stmt->rowCount ();
} 
if ($ok) return 1;
else return 0;

?>

(Ben isteseydim geçersiz değere sahip bir istek gönderebilir) her zaman böyle değildir JSON dize, sanki $_REQUEST['data'] tedavi ediyoruz, ne de her zaman temsil eden bir json dize olacaktır Bir dizi ya da sözlük. Önceden kontrol etmeniz gerekir, ve eğer değilse buna göre tepki vereceğini.

Şimdi, gerçek hata için. You yazdı:

 $.post (page.php, { data_input:data }, function (data) {
   // code
 });

page.php kote olmadığından bu bir hata olurdu. Ama bu bile sizin gerçek kodu olduğunu varsayarak, sunucu tarafında veri, $_POST['data_input'] saklanmalıdır olmaz $_POST['data'].