Dran and Drop Sortable Uygulaması Db Save Hatası
Arkadaşlar merhabalar Draag and Drop sıralama yaptırdım. Db ye kaydederken hata alıyorum.
Gelen verinin dizi olduğunu mu söylüyor olmadığını mı söylüyor anlayamadım.
Hata aşağıdaki gibi
<b>Warning</b>: foreach() argument must be of type array|object, string given in
menu sortable fonksiyonuna geliyor foreachte patlıyor.
public function menuSortable(){
$array = $this->guvenlik($_POST['allData']);
$i = 1;
foreach ($array as $key => $value)
{
$ok = $this->db->exec('UPDATE menu_detail SET menu_order=? WHERE id=?', array($i, $value));
$i++;
}
}
$(".row_position").sortable({
delay: 150,
stop: function() {
var selectedData = new Array();
$(".row_position>tr").each(function() {
selectedData.push($(this).attr("id"));
});
updateOrder(selectedData);
}
});
function updateOrder(aData) {
var myformData = new FormData();
myformData.append('tip','menuSortable');
myformData.append('allData',aData);
console.log(aData);
$.ajax({
type: 'POST',
cache: false,
contentType: false,
processData: false,
data: myformData,
enctype: 'multipart/form-data',
url: base_url,
success: function(response) {
console.log(response);
}
});
}
``
Soru hatalı mı? 👎
Eğer sorunun kurallara aykırı olduğunu düşünüyorsanız lütfen bize bildirin!
Cevaplar (1)
Hatanın nedeni, PHP tarafında $_POST['allData'] değişkeninin bir string olarak gelmesi ve foreach içinde dizi gibi kullanılmaya çalışılmasıdır.
JavaScript’te FormData.append() fonksiyonu ile diziyi (aData) eklediğinde, bu dizi otomatik olarak bir string haline geliyor. Yani PHP tarafına şu şekilde geliyor:
$_POST['allData'] = "1,2,3,4,5"; // string formatında
Bu yüzden foreach ($array as $key => $value) satırı hata veriyor çünkü foreach bir array veya object bekliyor, ama senin elinde string var.
PHP tarafında $_POST['allData'] değerini JSON olarak yolla ve json_decode() ile array’e çevir.
myformData.append('allData', JSON.stringify(aData)); // DİZİYİ JSON FORMATINDA GÖNDER
PHP tarafında json_decode() ile array’e çevir:
$array = json_decode($this->guvenlik($_POST['allData']), true); // JSON'u array olarak al