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

时间:2017-10-19 22:23:47

标签: php mysql

我已经完成了我的家庭作业项目,但我想再往前走一点。我的项目要求我从表单中获取信息,将该信息链接到变量,然后在MySQL数据库中创建,删除,更新或查找该信息。

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

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

这是我开始使用的代码。

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

这是我尝试过的几种变体。

$ newPerson =“更新FriendsFamilyContact

                            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 =“更新FriendsFamilyContact

                            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 个答案:

答案 0 :(得分:0)

是的,这是可能的

但是,您的情况有些问题。首先,如果要在字符串中打印变量的值,则需要使用双引号(")而不是单引号(')。 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等于的差异,以及PHP自己的comparison table,其中包含isset()和{{1}等比较方法的良好示例和使用empty()

进行比较的一些怪癖