不使用表单中的空字段更新数据库

Posted

技术标签:

【中文标题】不使用表单中的空字段更新数据库【英文标题】:Not updating a database with a null field from a form 【发布时间】:2018-04-01 01:46:54 【问题描述】:

我已经完成了我的家庭作业项目,但我正在尝试更进一步。我的项目要求我从表单中获取信息,将该信息链接到变量,然后在 mysql 数据库中创建、删除、更新或查找该信息。

作为更新的一部分,我尝试仅更新地址、城市、州、邮编或电话号码的字段。但是,我只想更新来自表单中信息的字段。如果用户将上述字段之一留空,我不希望该空白字段更新数据库。因此,如果数据库中有信息并且用户在表单中留下了一个空字段,我不希望该空字段将数据库中的字段置空。

我尝试将每个字段设置为具有 if 语句,以便如果信息不为空,它将更新数据库

这是我开始的代码。

                $newPerson = "UPDATE `FriendsFamily`.`Contact`
                                SET
                                `address` = '$address',
                                `city` = '$city',
                                `state` = '$state',
                                `zip` = '$zip',
                                `phone` = '$phone'
                                 where `fname` = '$fname'
                                  and `lname` = '$lname'";

这是我尝试了几种变体的东西。

$newPerson = "更新FriendsFamily.Contact

                            if('$address' != null)                                
                                
                                   SET `address` = $address;
                                

                            if('$city' != null)                                
                                
                                   SET `city` = $city;
                                

                            if('$zip' != null)                                
                                
                                   SET `zip` = '$zip';
                                

                            if('$phone' != null)                                
                                
                                   SET `phone` = '$phone'
                                

                                 where `fname` = '$fname'
                                  and `lname` = '$lname'";

我也试过这个。

$newPerson = "更新FriendsFamily.Contact

                            if('$address' != null)                                
                                
                                   SET `address` = $address,
                                

                            if('$city' != null)                                
                                
                                   SET `city` = $city,
                                

                            if('$zip' != null)                                
                                
                                   SET `zip` = '$zip',
                                

                            if('$phone' != null)                                
                                
                                   SET `phone` = '$phone',
                                

                                 where `fname` = '$fname'
                                  and `lname` = '$lname'";

我想做的事情是否可能,如果是我该怎么做。

【问题讨论】:

【参考方案1】:

是的,这是可能的

但是,您的条件存在一些问题。首先,如果要在字符串中打印变量的值,它需要用双引号 (") 而不是单引号 (')。 This question 很好地解释了两者的区别。

$str = 'foobar';
echo '$str';  // prints: $str
echo "$str";  // prints: foobar

由于您将文字字符串 '$str' 与常量 null 进行比较,因此条件始终为 true

此外,如果您只是需要检查一个值是否不是null,或者将其与另一个值进行比较,则将其转换为字符串可能会导致一些问题。相反,您可以直接比较变量,无需引号。

$foo = null;
$bar = 'bar';

if($str != null) 
    echo '$foo is not null';

else 
    echo '$foo is null';


if($bar != null) 
    echo '$bar is not null';

else 
    echo '$bar is null';


/*
 * The above outputs:
 * $foo is null
 * $bar is not null
 */

我还建议看一下 php 中的 double and triple equal 和 PHP 自己的 comparison table 之间的区别,其中包含比较方法的良好示例,例如 isset()empty() 以及一些关于使用比较的怪癖==

【讨论】:

以上是关于不使用表单中的空字段更新数据库的主要内容,如果未能解决你的问题,请参考以下文章

GraphQL .NET 上部分更新突变的空字段

将表单值传递给更新查询而不更新表中的空白字段

编辑表单正确回显之前保存的数据,但不更新表单字段

是否可以通过脚本更新 Word 文档中的表单字段

使用 Ajax、PHP、MYSQL 更新表单

Kofax 转换 - 在验证时更新表单上的字段