我从旧开发人员那里继承了已经注释掉的代码并且我已经重新实现了它。我遇到的一个问题是我输入的第二项是将值注册为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。
EDIT。没有插入值的原因是由于完全停止字符&#34;。&#34;导致数据库条目以NULL形式进入。
答案 0 :(得分:1)
经过一些测试和纯粹的运气后,我发现值没有发布到数据库并导致NULL值的原因是完全停止字符&#34;。&#34;。我测试的每个其他角色都会正确插入到数据库中。
截至发布时,我没有查看为什么会发生这种情况,但如果成功则会更新帖子。