跳过未修改的条目

时间:2012-12-08 18:23:18

标签: php

我正试图弄清楚如何跳过更新表单中未更改的选项。现在正在发生的事情是一切都在更新,无论它是否被更改。一切都以目前的方式运作良好。

基本上,我正在尝试根据更新的项目创建成功消息'return $ error'。如果所有内容都更新,就像现在一样,无论我是否更改了项目,都会收到成功消息。

非常感谢任何帮助。

//类函数

    /* UPDATING TYPES */
    public function updateType($up_type,$up_enabled,$up_delete) {
        try {           
            $query = "UPDATE type SET enabled = '0'";
            $de_activate = $this->common_connect->prepare($query);
            if(!$de_activate->execute()){
                throw new Exception("updateType");
            }
            if(isset($up_enabled)){               
                foreach($up_enabled as $i_input) {
                    $query = "UPDATE type SET enabled = '1' WHERE record_num=$i_input";
                    $active_update = $this->common_connect->prepare($query);
                    if(!$active_update->execute()){
                        throw new Exception("updateType_active");
                    }
                }
                $error[0] = "Sponsor types have been enabled.";
            }
            if(isset($up_delete)){
                foreach($up_delete as $i_input) {
                    $query = "DELETE FROM type WHERE record_num=$i_input";
                    $delete_type = $this->common_connect->prepare($query);
                    if(!$delete_type->execute()){
                        throw new Exception("updateType_delete_type");
                    }
                }
                $error[1] = "Sponsor types has been deleted.";
            }
            if(isset($up_type)){
                foreach($up_type as $k=>$v) {
                    $query = "UPDATE type SET type=:v WHERE record_num=:k";
                    $update_type = $this->common_connect->prepare($query);
                    $update_type->bindParam(':v',$v,PDO::PARAM_STR);
                    $update_type->bindParam(':k',$k,PDO::PARAM_STR);
                    if(!$update_type->execute()){
                        throw new Exception("updateType_update_type");
                    }
                }
                $error[2] = "Sponsor types has been updated.";
            }
            return $error;
        } catch(Exception $e){
            // save output to saveError function
            errors_output::saveError($e);
            exit();
        }   
    }    

//要更新的功能

if(isset($_POST[up_type]) || isset($_POST[up_enabled]) || isset($_POST[up_delete])) {
    $foo->updateType($_POST[up_type], $_POST[up_enabled], $_POST[up_delete]);   
}

//模板中的成功消息

<?php if (!empty($error)) { ?> 
    <div class="content">
        <div class="notification msgalert">
        <p>
        <?php foreach($error as $i){ ?>
            <?php echo '&bull; ' . $i; ?>
        <?php } ?>
        </p>  
        </div>
    </div>
    <br />
<?php } ?>

//模板中的表单

    <form name="update_types" method="post" action="" enctype='multipart/form-data'> 
        <table>
           <?php if(is_array($array_type_list)) {
                    foreach($array_type_list as $row_type_list) { ?>
                        <tr>
                            <td align="left"><input class="table" name="up_type[<?php echo $row_type_list[record_num]; ?>]" type="text" value="<?php echo $row_type_list[type]; ?>" /></td>
                            <td class="center"><input <?php if($row_type_list[enabled] == 1) { echo 'checked="checked"'; } ?> type="checkbox" name="up_enabled[<?php echo $row_type_list[record_num]; ?>]" value="<?php echo $row_type_list[record_num]; ?>" /></td>
                            <td class="center"><input type="checkbox" name="up_delete[<?php echo $row_type_list[record_num]; ?>]" value="<?php echo $row_type_list[record_num]; ?>" /></td>
                        </tr>
                <?php
                    }
                }
                ?>
        </table> 
    </form>

1 个答案:

答案 0 :(得分:1)

一个建议是在更新中包含一个子句,以确保新值与现有值不匹配。这将导致0更新记录 - 您必须检查记录的数量,而不仅仅是声明是否“成功”。

例如(假设启用可以具有值0,1):

   UPDATE type SET enabled=1 WHERE record_num=$i_input AND enabled=0

另一个想法是使用包含初始值的隐藏字段,然后在尝试更新之前对返回的“new”值和返回的初始值进行比较。