为什么我的循环忽略并向数据库中的每一项添加 NULL


Why does my loop ignore and add NULL to every second item in the database?

我从一个被注释掉的旧开发人员那里继承了代码,我已经重新实现了它。我遇到的一个问题是,我要输入的第二项是将值注册为 NULL。

前两个代码片段是我猜测导致为插入数据库的每两个项目添加 NULL 的问题。

我在用户模型中有这三个功能:

public function getDynamicVaribles() {
    $string = null;
    foreach ($this->userVariables as $var) {
        $string .= $var->userTypeVariables->name . '=' . $var->value . "<br />";
    }
    return $string;
}
public function getDynamicVaribleValue($varName) {
    foreach ($this->userVariables as $var) {
        if ($var->userTypeVariables->name == $varName) {
            return $var->value;
        }
    }
    return null;
}
public function getDynamicVarible($varName) {
    foreach ($this->userVariables as $userVariable) {
        if ($userVariable->userTypeVariables->name == $varName) {
            return $userVariable;
        }
    }
    return null;
}

我在_form的观点中是这样称呼它的:

<?php
    $varform = new DynamicForm();
    $varform->attributes = $user->getDynamicFormConfig();
    $varform->model_name = 'user';
    echo $varform->run();
?>

以及在我的控制器中调用它的函数

foreach ($user->type->userTypeVariables as $userTypeVar) {
    // Get fields for slide_varibles
    // load Model here...
    $slide_varible = $user->getDynamicVarible($userTypeVar->name);
    // if ($slide_varible == null) {
    //     $slide_varible = new UserVariables;
    // }
    $slide_varible = new UserVariables;
    $slide_varible->user_id = $user->id;
    $slide_varible->value = 
        $_POST['user' . '_' . str_replace(' ', '_', $userTypeVar->name)];
    $slide_varible->user_type_variables_id = $userTypeVar->id;
    $slide_varible->save(false);
}

我在组件中的属性(可能可以忽略):

foreach ($this->attributes as $attr) {
    $attr['formname'] = $this->model_name . '_' . $attr['name'];
    $attr['htmlOptions'] = 
        array('class' => 'span5', 'placeholder' => $attr['name']);
    $attr['htmlOptions']['class'] .= ' form-control';
    if ($attr['required'] === 1){
        $attr['requiredfields'] = array('required' => true);
    }else{
        $attr['requiredfields'] = '';
    }
    // Per type input            
    // 'type'=>'text|radio|textarea|select'

    if ($attr['type'] == 'text') {
        echo '<div class="form-group">';
        echo CHtml::label($attr['name'], $attr['formname'], 
                $attr['requiredfields']);
        echo CHtml::textField($attr['formname'], $attr['value'], 
                $attr['htmlOptions']);
        echo '</div>';
    } 
    elseif ($attr['type'] == 'radio') {
        echo '<div class="form-group">';
        echo CHtml::label($attr['name'], $attr['formname'],
                $attr['requiredfields']);
        echo CHtml::radioButton($attr['formname'],
                $attr['requiredfields']);
        echo '</div>';
    } 
    elseif ($attr['type'] == 'textarea') {
        echo '<div class="form-group">';
        echo CHtml::label($attr['name'], $attr['formname'],
                $attr['requiredfields']);
        echo CHtml::textArea($attr['formname'], $attr['value'], 
                $attr['htmlOptions']);
        echo '</div>';
    } 
    elseif ($attr['type'] == 'select') {
        $items = explode(',', $attr['options']);
        echo '<div class="form-group">';
        echo CHtml::label($attr['name'], $attr['formname'],
                $attr['requiredfields']);
        echo CHtml::dropDownList($attr['formname'], $attr['value'], 
                array($items));
        echo '</div>';
    } 
    elseif ($attr['type'] == 'boolean') {
        echo '<div class="form-group">';
        echo CHtml::label($attr['name'], $attr['formname'],
                $attr['requiredfields']);
        echo CHtml::radioButtonList($attr['formname'], $attr['value'], 
                array('No' => 0, 'Yes' => 1));
        echo '</div>';
    }
}

我遇到的问题是,无论动态表单字段类型/或输入到此表单中,它都只是将 NULL 添加到值字段中。

编辑。未插入该值的原因是句号字符"."导致数据库条目以 NULL 形式输入。

经过一些测试和纯粹的运气,我发现该值未发布到数据库并导致 NULL 值的原因是句号字符"."。我测试过的所有其他字符都会正确插入到数据库中。

截至发布时,我还没有调查为什么会发生这种情况,但如果成功,我会更新帖子。