【发布时间】:2014-10-30 06:46:24
【问题描述】:
我正在使用一个相当长的 HTML 表单来更新与产品相关的许多详细信息 - 为简洁起见,我不会完整地分享该表单。但是,出于说明目的,这里有一个 sn-p :
HTML 表单
<form name="form1" method="post" action="update_ac.php">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td>
<input name="season" type="text" class="button_select" id="season" value="<?=$rows['season']; ?>" size="10" />
<input name="restock" type="checkbox" id="restock" value="on" <?php if($rows['restock']=='on') { echo 'checked="checked"'; } ?>/>
// other fields
</td>
</tr>
</table>
</form>
我的问题是在将表单发布到update_ac.php 时 - 如何根据已完成的字段动态生成 MYSQL 更新语句?
这是我的表单操作页面的示例:
PHP 表单操作
<?php
foreach ($_POST as $key => $value) {
$$key = $value;
}
$sql= mysql_query ("
UPDATE product SET
title='".$title."',
rating='".$rating."',
season='".$season."',
brand_id='".$brand_id."',
category='".$category."',
... etc ");
?>
我不想在 UPDATE 语句中声明每个可能需要更新的字段。鉴于存在从表单发布的已定义 PHP 变量,我希望 UPDATE 语句仅处理相关字段。
目前,我收到很多NOTICE: Undefined variable x,在发布表单时出现了空白字段。
我希望这是有道理的——有点啰嗦。
有什么建议吗?谢谢
更新
从@Styphon 的回答开始 - 我稍微修改它以在查询末尾包含WHERE 条件。
$query = "UPDATE product SET";
$comma = " ";
foreach($_POST as $key => $val) {
if( ! empty($val)) {
$query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
$comma = ", ";
}
}
$product_id = $_POST['product_id'];
$query = $query . "WHERE product_id = '".$product_id."' ";
【问题讨论】:
-
看看
isset或许> -
@Fluffeh - 这并不能解决我的问题,因为我必须针对 ISSET 测试每个可能的变量。我试图避免声明超过 50 个变量。