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
toannet viết 11:37 ngày 10/10/2018
Active hay Deactive bạn nên thiết kế vào 1 cột trong DB
Nếu SP 1 có cột Type = 1 => Active
Ngược lại => Deactive .

==> good luck
khanhkhi1 viết 11:32 ngày 10/10/2018
Cảm ơn bạn. Mình đã tạo trong DB một cột là status để lưu lại 1=>active còn 0=>active. Vấn đề mình gặp ở đây là khi ta check vào 1 danh sách để active hàng loạt sp để active nó thì mình dùng cái mảng active để lưu lại các prod_id cần active. Sau đó mình đưa tất cả các status của san phẩm về 0, rồi mình mới set active lại các sản phảm đã được chọn trong mảng active của mình.Nên mới xảy ra vấn đề khi phân trang qua các trang khác thì lúc check lưu lại các pro_id của trang đó chứ không lưu lại được các pro_id của các trang khác dẫn đến việc các sp ở trang khác bị đưa về status bằng 0 hết.
Đ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
khanhkhi1 viết 11:33 ngày 10/10/2018
Hic hic đến tận bây giờ có ai giúp mình với không
fotech_nd viết 11:37 ngày 10/10/2018
Được gửi bởi khanhkhi1
Hic hic đến tận bây giờ có ai giúp mình với không
Nhìn đoạn code của bạn đau mắt quá, lần sau những đoạn code bạn đưa vào trong thẻ [php] để mọi người dễ nhìn nhé.

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
PHP Code:
<input type=\"checkbox\" value=\"".$arrCont***91;$i***93;->id."\" name=\"active***91;***93;\" ".$checked."/> 
bằng dòng
PHP Code:
<input type=\"checkbox\" name=\"active***91;".$arrCont***91;$i***93;->id."***93;\" value=\"".$arrCont***91;$i***93;->status."\" ".$checked."/> 
Sau đó sửa lại cái hàm Active như sau
PHP Code:
// 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)

Mà mình có góp ý là bạn nên dùng 1 framework nào đó để viết code - như thế sẽ dễ nhìn hơn, có khả năng develop và maintain...

Regards!!!
Bài liên quan
0