我正试图弄清楚如何跳过更新表单中未更改的选项。现在正在发生的事情是一切都在更新,无论它是否被更改。一切都以目前的方式运作良好。
基本上,我正在尝试根据更新的项目创建成功消息'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 '• ' . $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>
答案 0 :(得分:1)
一个建议是在更新中包含一个子句,以确保新值与现有值不匹配。这将导致0更新记录 - 您必须检查记录的数量,而不仅仅是声明是否“成功”。
例如(假设启用可以具有值0,1):
UPDATE type SET enabled=1 WHERE record_num=$i_input AND enabled=0
另一个想法是使用包含初始值的隐藏字段,然后在尝试更新之前对返回的“new”值和返回的初始值进行比较。