开发者

changing a lists sort order inline

开发者 https://www.devze.com 2023-03-10 08:24 出处:网络
I have a list Each row has a common input field \"sort_order\" that\'s stored in MySQL db. <input name=\"sort_order\" type=\"text\" 开发者_运维技巧value=\"<?php echo $cat[\'sort_order\']; ?>

I have a list Each row has a common input field "sort_order" that's stored in MySQL db.

 <input name="sort_order" type="text" 开发者_运维技巧value="<?php echo $cat['sort_order']; ?>" size="3" />

I want to be able to change the sort order inline, without going into the edit form.

How do I get all the values into the database. I think I need to loop through each row adding the sort_order[row_id] and value to an array. But I am stuck on how to achieve this.

all the values are posting according to firePHP. sort_order[50] 1, sort_order[51] 2 etc.

New Attempt at explaining:

I have a list view with 2 input fields.

<input name="cat_id" type="hidden" value="<?php echo $cat['cat_id']; ?>" /> 

<input name="sort_order" type="text" value="<?php echo $cat['sort_order']; ?>" size="3" />

I have a function that's called on post in the controller:

public function sortOrderUpdate(){


//collect the values of cat_id and sort_order from each input into a array
//$this->request->post['sort_order']
//$this->request->post['cat_id']

//send to the model

$this->model_cat->updateCatSortOrder($sortorderarray);


}

And the database model file function:

public function updateCatSortOrder($sortorderarray){


foreach((int)$sortorderarray as $sort){
$this->db->query("UPDATE cat SET sort_order='" . (int)$sort['sort_order'] . "'  WHERE cat_id = '" . (int)$sort['cat_id'] .  "'");
    }
}

Whats the best way to achieve this?


Just use empty square brackets:

<input type="text" name="sort_order[]" value"<?php echo $sort_order; ?>" />

You can then access the input as an array, saving you from building it yourself. It'll be stored as $_POST['sort_order'] (or $_GET, depending on the method attribute specified in your <form> tag).

On a related note, you should probably escape $sort_order when echoing it:

<input type="text" name="sort_order[]" value"<?php echo htmlspecialchars($sort_order); ?>" />


i would not recommend using [ ] in html names.

<input type="text" name="sort_order_<?php echo $row_id; ?>" value"<?php echo $sort_order; ?>" />

say, you have 50 input fields, when posted, you can build an array this way:

$sortorder = array();
for($i=0; $i<50; $i++){
    $sortorder[] = $_REQUEST['sort_order_' . $i];
}


Ok this seems to work:

<input name="cat_id[]" type="hidden" value="<?php echo $cat['cat_id']; ?>" />
<input name="sort_order[]" type="text" value="<?php echo $cat['sort_order']; ?>" size="3" />

Controller:

    public function updateCatSortOrder(){

            $sortvals = $this->request->post['sort_order']; //$this->request->post  same as $_POST 
    $row = $this->request->post['cat_id'];
    $n = count($this->request->post['cat_id']);
    $sortorder = array();
    for($i=0; $i<$n; $i++){

        $sortorder[] = array(
        'cat_id' => $row[$i],
        'sort_order' => $sortvals[$i]
        );
    }


    $this->model_cat->updateCatSortOrder($sortorder);
            }

Model:

 //UPDATE CAT SORT ORDER    
 public function updateCatSortOrder($sortorder){
    foreach($sortorder as $sort){
    $this->db->query("UPDATE cat SET sort_order='" .   $this->db->escape($sort['sort_order']) . "' WHERE cat_id = '" . $this->db->escape($sort['cat_id']).  "'");
   }

 }
0

精彩评论

暂无评论...
验证码 换一张
取 消