10/10/2018, 09:28
Cần giúp về việc active 1 item ..
Mình đang viết 1 trang admin dùng để quản lý sản phẩm trong đó có mục active sản phẩm, trong đó mình có phân trang cho trang sản phẩm
ví dụ: Prodcut name | active |
prod1 | <> "chỗ này mình để cái check box"
prod2 | <>
prod3 | <>
Last|1|2|...|Next
[ACTIVE]<== đây là nút active
Trong database, table product có pro_status : có 2 giá trị là 0(không active) và 1(active)
Cái vấn đề mình mắc phải ở đây là khi mình active sản phẩm mình đưa tất cả các sản phẩm về status bằng 0 hết sau đó dựa vào check box(khi đánh dấu check thì sẽ lưu id của sp đó và 1 mảng active)mình lại đưa status của các sp có prod_id được lưu trong mảng active đó về lại 1.
Khi làm như vậy mình bị nảy sinh vấn đề khi phân trang, sau khi qua trang 2,3 ... nếu check box vào các sp ở trang 2,3... thì active chỉ lưu được các prod_id của sản phẩm ở trang này dẫn đến việc khi active lại status sản phẩm thì khi đưa về 0 hết sau đó dựa vào mảng active thì nó chỉ active lại status của sản phẩm có prod_id được lưu trong mảng active được đánh dấu. Dẫn đến các sản phẩm của trang trước nó và sau nó đều bị active status = 0 cả.
Bạn nào có cách giải quyết vấn đề này...giúp mình với
ví dụ: Prodcut name | active |
prod1 | <> "chỗ này mình để cái check box"
prod2 | <>
prod3 | <>
Last|1|2|...|Next
[ACTIVE]<== đây là nút active
Trong database, table product có pro_status : có 2 giá trị là 0(không active) và 1(active)
Cái vấn đề mình mắc phải ở đây là khi mình active sản phẩm mình đưa tất cả các sản phẩm về status bằng 0 hết sau đó dựa vào check box(khi đánh dấu check thì sẽ lưu id của sp đó và 1 mảng active)mình lại đưa status của các sp có prod_id được lưu trong mảng active đó về lại 1.
Khi làm như vậy mình bị nảy sinh vấn đề khi phân trang, sau khi qua trang 2,3 ... nếu check box vào các sp ở trang 2,3... thì active chỉ lưu được các prod_id của sản phẩm ở trang này dẫn đến việc khi active lại status sản phẩm thì khi đưa về 0 hết sau đó dựa vào mảng active thì nó chỉ active lại status của sản phẩm có prod_id được lưu trong mảng active được đánh dấu. Dẫn đến các sản phẩm của trang trước nó và sau nó đều bị active status = 0 cả.
Bạn nào có cách giải quyết vấn đề này...giúp mình với
Bài liên quan
Nếu SP 1 có cột Type = 1 => Active
Ngược lại => Deactive .
==> good luck
Đoạn code của mình:
Trong phần view:
//----------------------------------------------------------------
$checked = ($arrCont[$i]->status > 0)?"checked=\"checked\"":"";
$ConList .="
<tr class=\"datarow\">
<td style=\"color:#ffffff\" align=\"center\">".$arrCont[$i]->title."</td>
<td style=\"color:#ffffff\" align=\"center\">
<input type=\"checkbox\" value=\"".$arrCont[$i]->id."\" name=\"active[]\" ".$checked."/></td>
</tr>
";
//----------------------------
Hàm mình xử lý$active = $_POST['active'])
//---------------------------------
function Active($active, $catid){
if ($catid == "all") {
$sql=" Update ".$this->database->table['con']." as CON1
SET CON1.con_status= '0'";
}else {
$sql=" Update ".$this->database->table['con']." as CON1
SET CON1.con_status= '0'
WHERE CON1.con_cat_id = ".$catid;
}
echo $sql;
$query = $this->database->QuerySQL($sql);
for ($i=0; $i<sizeof($active); $i++){
if ($active[$i] != "") {
$sql=" Update ".$this->database->table['con']." as CON1
SET CON1.con_status= '1'
WHERE CON1.con_id = ".$active[$i];
echo $sql;
$query = $this->database->QuerySQL($sql);
}
}
return ($query != "")?"Update successful!":"Update fail!";
}
[=========> Bổ sung bài viết <=========]
Có ai biết giúp mình với không
Còn về cách giải quyết bạn xử lý như sau (mình ko test nhưng chắc là được ):
Thay dòng
<input type=\"checkbox\" value=\"".$arrCont***91;$i***93;->id."\" name=\"active***91;***93;\" ".$checked."/>
<input type=\"checkbox\" name=\"active***91;".$arrCont***91;$i***93;->id."***93;\" value=\"".$arrCont***91;$i***93;->status."\" ".$checked."/>
// Proces input param
$active = isset($_POST***91;'active'***93;) ? (array)$_POST***91;'active'***93; : array();
// Call when ready submit post
if ($active) {
Active($active);
}
/**
* Your description here
*
* @param array $active
*/
function Active($active){
// Start transaction when you use transaction (Optional)
foreach ($active as $id => $val) {
// Sql string
$sql = "Update ".$this->database->table***91;'con'***93;;
$sql .= " SET con_status= ". intval((bool)$val);
$sql .= " WHERE con_id = '" . addslashes($id)."'"; // can use intval($id) when the type of primary key is number
// Execute update query
$result = $this->database->QuerySQL($sql);
if (!$result) {
// Process to rollback when you use transaction (Optional)
}
}
// Transaction commit when you use transaction (Optional)
}
Regards!!!