PHP表单仅在不为null时才更新MySql

时间:2014-10-18 01:51:04

标签: php mysql

目前我有一个更新行的更新功能但是如果我将其中一个框留空,而不是不更改该值,则删除该值。如果我只需要更新其中一个值,我想更新此值并将其他框保留为空白。这可能吗?

目前我的代码就是这个。

<?php
$key = $_POST['key'];
$value1 = $_POST['value1'];
$value2 = $_POST['value2'];
UPDATE table SET value1 = '$value1',value2 = '$value2' WHERE key = '$key';
?>

2 个答案:

答案 0 :(得分:1)

您必须检查每个值以查看它是否为空,如果是,请修改查询字符串以从SET子句中删除该字段。

这样的事情:

<?php
$set = array();

// make sure the user doesn't attempt to POST a column that doesn't exist in our table,
// which will lead to a SQL error, or worse, allow the user to run custom SQL.
$columns = array('value1', 'value2'); 

foreach ($_POST as $key=>$value) {
    if (in_array($key, $columns) && $value != '') {
        $set[] = $key ." = '". mysql_real_escape_string($value) ."'";
    }
}

if (!empty($set)) {
    $query = "UPDATE table SET ". implode(', ', $set) ." WHERE `key` = '". mysql_real_escape_string($_POST['key']) ."'";
}

另请注意,我已使用mysql_real_escape_string()。这是为了防止SQL注入。我不知道您正在使用的MySQL库,但是您应该使用适当的清理方法来处理您正在使用的任何内容。实际上,您不应该使用常规mysql_*库,因为它已被弃用。相反,我会推荐PDO。

答案 1 :(得分:0)

请使用PDO课程作为最终版本。

<?php
$key = $_POST['key'];
$value1 = $_POST['value1'];
$value2 = $_POST['value2'];
if ($value1 == "")
$query = "UPDATE table SET value2 = '$value2' WHERE key = '$key'";
if ($value2 == "")
$query = "UPDATE table SET value1 = '$value1' WHERE key = '$key'";
else
$query = "UPDATE table SET value1 = '$value1',value2 = '$value2' WHERE key = '$key'";
?>