php 仅更新用户在表单中更改的字段

wko9yo5t  于 2023-04-04  发布在  PHP
关注(0)|答案(3)|浏览(122)

假设我有一个包含16到20个字段的表单,包括输入类型文本和文本区域。
表单使用POST方法将字段提交到php页面,该页面使用$_POST变量更新数据库中的表。
我的问题是我只想更新数据库中更改的值,而不是更新每个值,
这种优化应用程序的方法有多好?,我还在另一个网站上读到了以下答案:

  • mySQL会自动检测到你正在更新一个与它已经包含的值相同的字段,并且实际上不会更新该字段。不确定这是否对其他可以与php一起使用的数据库相同。

另外,上述说法的真实性如何?

z9gpfhce

z9gpfhce1#

很简单,提交表单后,请执行以下操作:

if(isset($_POST['name'])) {
// Do the update
}
else {
// Don't do anything because it means there is no $_POST['name']
}

这是基本的逻辑,我希望这就是你所寻找的。

iqjalb3h

iqjalb3h2#

当你使用$_POST变量来构造SQL查询时,只要确保你没有包含任何没有在$_POST中设置的列名或值。如果SQL UPDATE语句没有一个列的值,并且没有形成预期的值,那么DB不会尝试更新这些列。最好的方法可能是使用foreach循环:

// Init SQL query
$statement = "UPDATE tableName SET ";
$params = array();
// Iterate $_POST variables
foreach ($_POST as $key=>$value) {
    // Append a new SET key/value pair
    $statement .= "$key = :$key, ";
    // You're using prepared statements, right?
    $params[$key] = $value;
}

// Cut off last comma and append WHERE clause
$statement = substr($statement,0,-2)." WHERE id = :id";
// Store id for prepared statement
$params['id'] = $id;
// Prepare the query
$pdo->prepare($statement);
// Execute with parameters
$result = $pdo->execute($params);
nwo49xxi

nwo49xxi3#

我认为最简单的方法是首先调用一个fetch查询,然后使用while循环填充输入字段为〈input type=“text”name=“name”value=现在它将包含以前的值,直到用户在输入字段中更改它,就像如果他保持不变,那么以前的值将自动保存

相关问题