2015-07-24 2 views
1

мой код:Хранить декодируются данные к различным ID

//This is the data I am getting [{"x":1,"y":0,"width":2,"height":10},{"x":6,"y":0,"width":2,"height":9}] 

<?php 
$position = json_decode($_POST['positionData'], true); 
$select_id = "SELECT id FROM homegrid"; 
$select_id_exec = mysql_query($select_id); 
//print_r($position[1]); 
//print_r($position[2]); 
//getting result seperately 
foreach ($position as $entry) { 
    $x = $entry['x']; 
    $y = $entry['y']; 
    $width = $entry['width']; 
    $height = $entry['height']; 
    $positionjson = json_encode($entry); 
    //print_r($positionjson); 
    while($idFromDB = mysql_fetch_assoc($select_id_exec)) { 
     //print_r($idFromDB); 
     //echo $update = "update homegrid set position = '$positionjson' WHERE id = '" . $idFromDB['id'] . "' "; 
     //mysql_query($update); 
    } 
} 
?> 

Вывод запроса на обновление является

update homegrid set position = '{"x":6,"y":0,"width":2,"height":9}' WHERE id = '7' 
update homegrid set position = '{"x":6,"y":0,"width":2,"height":9}' WHERE id = '8' 

, что означает, что результат последней позиции массива становится.

Как я могу получить результат, как

update homegrid set position = '{"x":1,"y":0,"width":2,"height":10}' WHERE id = '7' 
update homegrid set position = '{"x":6,"y":0,"width":2,"height":9}' WHERE id = '8' 

?

Моя структура таблицы приводится ниже

id position 
7 {"x":1,"y":0,"width":2,"height":10} 
8 {"x":6,"y":0,"width":2,"height":9} 

Не могли бы вы помочь мне решить эту проблему?

+0

Узнайте о [ 'var_dump();'] (http://php.net/manual/en/function.var-dump.php) вместо 'print_r();'. Вы получите больше информации. – D4V1D

+0

Если у вас нет опции 'ORDER BY' в запросе' SELECT'? В противном случае он может возвращать идентификаторы в любом порядке, поэтому у вас не будет никакого контроля над тем, какой идентификатор получает какую позицию. – Barmar

+0

Ваша проблема в том, что в первый раз через цикл 'foreach' вы потребляете все результаты в наборе результатов' $ select_id_exec'. Итак, во второй раз тщательный цикл foreach больше нет в результирующем наборе '$ select_id_exec' – RiggsFolly

ответ

0

Попробуйте этот код вам не нужны две петли

<?php 
$position = json_decode($_POST['positionData'], true); 
$select_id = "SELECT id FROM homegrid"; 
$select_id_exec = mysql_query($select_id); 
//print_r($position[1]); 
//print_r($position[2]); 
//getting result seperately 
$i = 0; 
while($idFromDB = mysql_fetch_assoc($select_id_exec)) { 
    $x = $position[$i]['x']; 
    $y = $position[$i]['y']; 
    $width = $position[$i]['width']; 
    $height = $position[$i]['height']; 
    $positionjson = json_encode($position[$i]); 
    //print_r($idFromDB); 
    $update = "update homegrid set position = '$positionjson' WHERE id = '" . $idFromDB['id'] . "' "; 
    mysql_query($update); 
    $i++; 
} 
?> 
+0

Не создавайте JSON вручную, используйте 'json_encode()', как в вопросе. – Barmar

+0

Благодарим за помощь @Barmar –

+0

Спасибо, этот код работает ... – Sarath

-1

Я редактировал свой код.

<?php 
$position = json_decode($_POST['positionData'], true); 
$select_id = "SELECT id FROM homegrid"; 
$select_id_exec = mysql_query($select_id); 
//print_r($position[1]); 
//print_r($position[2]); 
//getting result seperately 
foreach ($position as $entry) { 
    $data = array(); 

    $data['x'] = $entry->x; 
    $data['y'] = $entry->y; 
    $data['width'] = $entry->width; 
    $data['height'] = $entry->height; 
    $positionjson = json_encode($data); 
    //print_r($positionjson); 
    while($idFromDB = mysql_fetch_assoc($select_id_exec)) { 
    //print_r($idFromDB); 
    //echo $update = "update homegrid set position = '$positionjson' WHERE id = '" . $idFromDB['id'] . "' "; 
    //mysql_query($update); 
     } 
    } 
    ?> 
+0

Проблема в том, что он не получил желаемого результата. он не получил надлежащего json для хранения в базе данных. Итак, время цикла foreach не является проблемой здесь. –

+0

Извините, посмотрите немного ближе. – RiggsFolly

Смежные вопросы