gpt4 book ai didi

php - 如何根据 HTML FORM 中定义的变量动态生成 MYSQL UPDATE 语句

转载 作者:太空宇宙 更新时间:2023-11-04 15:07:00 26 4
gpt4 key购买 nike

我正在使用一个相当长的 HTML 表单来更新与产品相关的大量详细信息 - 为简洁起见,我不会完整地共享该表单。但是,出于说明目的,这里有一个片段:

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."' ";

最佳答案

假设表中的所有字段名称都与表单输入的名称相同,这是很简单的。你可以使用这个:

$query = "UPDATE product SET";
$comma = " ";
foreach($_POST as $key => $val) {
if( ! empty($val)) {
$query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
$comma = ", ";
}
}
$sql = mysql_query($query);

为了更安全,您应该创建一个可接受参数的白名单,即表中的列如下所示:

$query = "UPDATE product SET";
$comma = " ";
$whitelist = array(
'title',
'rating',
'season',
'brand_id',
'cateogry',
// ...etc
);
foreach($_POST as $key => $val) {
if( ! empty($val) && in_array($key, $whitelist)) {
$query .= $comma . $key . " = '" . mysql_real_escape_string(trim($val)) . "'";
$comma = ", ";
}
}
$sql = mysql_query($query);

这样你的查询只能包含你设置的参数,如果有人设法注入(inject)额外的东西(例如通过改变你的表单输入的名称)它不会被传递到你的数据库。


我还建议您停止使用 Mysql_*,它是 deprecated .你应该看看MySQLiPDO作为替代品。

关于php - 如何根据 HTML FORM 中定义的变量动态生成 MYSQL UPDATE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25683760/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com