#javascript #php #html
#javascript #php #HTML
Вопрос:
Я делаю обновление с использованием JavaScript и HTML. Я хочу поместить значения в выпадающий список. Но я не могу зациклить все остальные данные в выпадающем списке. Я хочу создать в нем выпадающее меню HTML со всеми значениями, чтобы я мог выбирать другие параметры из выпадающего меню. Я получаю предыдущие значения из базы данных. Как я могу получить остальные категории, а также в опциях?
Контроллер
public function productlist($product_id)
{
$this->load->model('Productmodel');
$response=array();
$response = $this->Productmodel->getproductlistbyid($product_id);
echo json_encode($response);
}
Модель
public function getproductlistbyid($product_id)
{
$returnarray = array();
$sql = "select id, product_name, image, b.name as bname, c.name as cname, a.category_id as acategory_id, a.subcat_id as asubcat_id, description, qty, color, orginal_price, offer_price from tbl_product as a inner JOIN category as b on a.category_id = b.category_id inner JOIN category as c on a.category_id = c.fk_parent_id where id = ?";
$query = $this->db->query($sql, array($product_id));
if($query->num_rows())
{
$rows = $query->result();
foreach($rows as $temp)
{
$returnarray[0] = $temp->id;
$returnarray[1] = $temp->product_name;
$returnarray[2] = $temp->image;
$returnarray[3] = $temp->bname;
$returnarray[4] = $temp->cname;
$returnarray[5] = $temp->description;
$returnarray[6] = $temp->qty;
$returnarray[7] = $temp->color;
$returnarray[8] = $temp->orginal_price;
$returnarray[9] = $temp->offer_price;
$returnarray[10] = $temp->acategory_id;
$returnarray[11] = $temp->asubcat_id;
}
}
return $returnarray;
}
Просмотр (сценарий)
<script>
function editproduct(product_id)
{
var myurl="<?php echo base_url();?>index.php?/Product/productlist/" product_id;
//alert(myurl);
$.post(myurl).done(function (data)
{
//alert(data);
var obj=jQuery.parseJSON(data);
//alert(obj);
//alert(myhtml);
var myhtml='<form role="form" id="formedit" action="#">'
'<div class="box-body">'
' <div class="form-group">'
' <label for="exampleInputName">Product Name</label>'
' <input type="hidden" id="upmyid" name="editid" value="' obj[0] '">'
' <input type="text" class="form-control" id="upname" placeholder="Product Name" name="editpname" value="' obj[1] '">'
' </div>'
'</div>'
'<div class="box-body">'
'<div class="form-group">'
'<label for="exampleInputImage">Image</label>'
'<input type="file" class="form-control" id="upimage" placeholder="Image" name="editpimage" value="' obj[2] '">'
'</div>'
'</div>'
'<div class="box-body">'
'<div class="form-group">'
'<label for="exampleInputCategory">Category</label>'
'<select class="form-control select category" style="width: 100%;" name="option2" id="option2">'
'<option value="0">Main Menu </option>'
'<option value="' obj[9] '" selected>' obj[3] '</option>'
'</div>'
'</div>'
'</form>';
swal({ title: "Edit <small>this</small>!",
text: myhtml,
html: true,
type: "", showCancelButton: true, confirmButtonColor: "#3c8dbc",
confirmButtonText: "Update Now",
closeOnConfirm: false },
function()
{
var id=$('#upmyid').val();
var name=encodeURIComponent($('#upname').val());
var myurl="index.php/Product/updateProduct/" id "/" name;
$.post(myurl).done(function(data)
{
//alert(data);
var obj = jQuery.parseJSON(data);
//alert(obj);
if(obj[0]==100)
{
swal({ title: "Updated Successfully",
text: "Click on ok now!",
type: "success", showCancelButton: false, confirmButtonColor: "#3c8dbc",
confirmButtonText: "OK",
closeOnConfirm: false },
function()
{
location.reload();
});
}
else
{
swal("Sorry!",
"Unable to Update now.",
"warning");
}
});
}
);
});
}
</script>
Комментарии:
1. каждый раз, когда вы запускаете свою строку foreach в PHP, она перезаписывает одни и те же части массива с последними значениями. Вам нужно создавать новый массив (или, что еще лучше, объект) каждый раз, когда вы выполняете цикл, а затем добавлять этот массив / объект в следующий пустой индекс $mainarray . На самом деле,
$mainarray[] = $temp;
может быть достаточно, похоже, что $temp уже является объектом.2. затем, во-вторых, в javascript вам нужно выполнить цикл
obj
и распечатать новый<option>
для каждого возвращаемого объекта. И я сомневаюсь, что вам нужен jQuery.parseJSON() , потому что PHP уже должен возвращать объект JSON, а не строку, поскольку вы использовали $json_encode() .3. Извините, но я вас не понимаю, не могли бы вы отредактировать скрипт
4. Я опубликовал ответ, который, я думаю, должен работать
Ответ №1:
Каждый раз, когда вы запускаете свою строку foreach в PHP, она перезаписывает одни и те же части массива с последними значениями. например, если у вас есть 10 строк, возвращенных из вашей базы данных, цикл выполняется 10 раз. Поэтому $mainarray[0]
заменяется 10 раз на последнее значение $temp->id;
, и то же самое для всех остальных полей. Это означает, что вы будете получать значения только из последней строки базы данных в свой PHP-массив.
Попробуйте это так (непроверенный, извинения за любые незначительные ошибки):
Модель:
foreach($rows as $temp)
{
$returnarray[] = $temp;
}
Это поместит весь объект $temp в следующий доступный индекс $mainarray
.
Во-вторых, ваш код JavaScript не настроен на обработку нескольких элементов в ответе и, следовательно, будет печатать только один элемент данных, даже если должно было быть возвращено много элементов.
Вид
1) Удалите эту строку:
var obj=jQuery.parseJSON(data);
В этом не должно быть необходимости — $json_encode()
в вашем PHP уже будет возвращен объект JSON, а не строка, поэтому вам не нужно его анализировать. jQuery уже будет восприниматься как data
объект JSON.
2) Обновите свой код генерации HTML следующим образом (изменения указаны там, где он отображается <select>
). Необходимо выполнить цикл по data
массиву и создать по одному <option>
для каждого объекта в массиве.
var myhtml='<form role="form" id="formedit" action="#">'
'<div class="box-body">'
' <div class="form-group">'
' <label for="exampleInputName">Product Name</label>'
' <input type="hidden" id="upmyid" name="editid" value="' obj[0] '">'
' <input type="text" class="form-control" id="upname" placeholder="Product Name" name="editpname" value="' obj[1] '">'
' </div>'
'</div>'
'<div class="box-body">'
'<div class="form-group">'
'<label for="exampleInputImage">Image</label>'
'<input type="file" class="form-control" id="upimage" placeholder="Image" name="editpimage" value="' obj[2] '">'
'</div>'
'</div>'
'<div class="box-body">'
'<div class="form-group">'
'<label for="exampleInputCategory">Category</label>'
'<select class="form-control select category" style="width: 100%;" name="option2" id="option2">'
'<option value="0">Main Menu </option>';
$.each(data, function(index, obj) {
myhtml = '<option value="' obj.acategory_id '">' obj.cname '</option>';
});
myhtml = '</select>'
'</div>'
'</div>'
'</form>';