如果原始值为空或新值为空PHP,则日志值更改

时间:2018-01-02 18:27:16

标签: php

我有一个编辑个人资料页面,其中有几个字段,其中的值是从数据库设置的(如果它不是NULL)。它看起来像这样:

<div class="form-group f-left p-t-2 p-x-1">
    <div class="input-group">
        <label for="nationality" class="input-group-addon">
            Nationaliteit
        </label>
        <?php returnInputForm('nationality', 'nationality', $userinfo->nationality, 'Nationaliteit', 'form-control'); ?>
    </div>
</div>
<div class="form-group f-left p-t-2 p-x-1">
    <div class="input-group">
        <label for="phone" class="input-group-addon">
            Telefoon
        </label>
        <?php returnInputForm('phone', 'phone', $userinfo->phone, 'Telefoon / GSM', 'form-control'); ?>
    </div>
</div>

然后在我的控制器方法中,我调用了一个我写的辅助函数:

$this->logmanager->createAdminEditVolunteerLog($userinfo, $userdata, $adminuserid, $userid);

$ userinfo是从x执行select *时的数据库的完整行,其中id = $ userid $ userdata是从他所在页面的表单提交的$ _POST数据。 请注意,$ userdata将始终包含比$ userinfo少的字段。

我在helper类中编写的函数如下所示:

public function createAdminEditVolunteerLog($dbrow, $submitted, $adminuserid, $userid)
{
    if (!is_array($dbrow)) {
        $dbrow = (array) $dbrow;
    }
    if (!is_array($submitted)) {
        $submitted = (array) $submitted;
    }

    $difference = array_diff($dbrow, $submitted);

    //Create a LOG entry
    foreach ($difference as $key => $value) {
        $entity = new stdClass();
        $entity->admin_user_id = $adminuserid;
        $entity->user_id = $userid;
        $entity->field = $key;
        $entity->prev_value = $dbrow[$key];
        $entity->new_value = $value;
        $entity->edit_date = date('Y-m-d H:i:s');

        $this->CI->logAdminEditVolunteers_model->add($entity);
    }
}

如果值已更改,则此功能非常完美!意思是,如果已经存在一个值并且它被修改为另一个值!

在以下2个案例中,没有记录任何内容: - $ dbrow中的原始值为空,但在$ submit中则不是 - $ dbrow中有一个值,但在$ submit中它是空的

如何确保记录最后2个案例?

编辑:我执行了以下测试方案:用户填写了电话号码,因此我删除了电话号码中的值并更改了名字,并在bank_account中添加了一个值,该值事先是空的。 $ dbrow看起来像这样:

    D:\wamp\www\codeigniter\application\libraries\managers\LogManager.php:71:
    array (size=46)
      'user_id' => string '1' (length=1)
      'national_number' => null
      'first_name' => string 'Dennis123' (length=9)
      'phone' => string '123' (length=3)
      'bank_account' => string '' (length=0)
      'bic_code' => string '' (length=0)
  'address_line2' => string '123' (length=3)
  'volunteer_location' => string 'Gentbrugge' (length=10)
  'volunteer_location_lat' => null
  'volunteer_location_long' => null
  'volunteer_location_max_distance' => string '50' (length=2)
  'national_number' => null

并且$ submit看起来像这样:

D:\wamp\www\codeigniter\application\libraries\managers\LogManager.php:72:
array (size=16)
  'user_id' => string '1' (length=1)
  'first_name' => string 'Dennis12' (length=8)
  'phone' => string '' (length=0)
  'bank_account' => string '123' (length=3)
  'bic_code' => string '' (length=0)

$ difference数组(使用array_diff($ submitted,$ dbrow);)后如下所示:

D:\wamp\www\codeigniter\application\libraries\managers\LogManager.php:73:
array (size=2)
  'first_name' => string 'Dennis12' (length=8)
  'modified_at' => string '2018-01-02 19:55:27' (length=19)

我希望这个$ difference数组看起来像这样(所以添加了phone和bank_account因为它们被修改了,但是bic_code不是例如):

array (size=4)
      'first_name' => string 'Dennis12' (length=8)
      'modified_at' => string '2018-01-02 19:55:27' (length=19)
      'phone' => string '' (length=0)
      'bank_account' => string '123' (length=3)

1 个答案:

答案 0 :(得分:0)

这是一个想法。你可以对这两个数组执行此操作,这样你就会有所不同。

将这些想法与其他数组进行比较并添加空白数据。

这样,数组中的键匹配,因此数组差异函数会得到差异。

if (!is_array($dbrow)) 
{
    $dbrow = (array) $dbrow;
}
elseif (is_array($submitted)) 
{
    $dbrow = array();
    foreach ($submitted as $key => $value) 
    {
        $dbrow($key) = "";
    }
}