尝试在yii中存储数据库中多个复选框的id时出错

时间:2016-05-27 09:32:55

标签: php mysql yii

我有多个复选框可以查看数据库中的爱好名称,并且它正在运行。但我需要将所选爱好名称的id存储在数据库中。但是当我选择任何爱好名称时,它只在我的数据库表中存储0。

我有一个Hobbies表,我也为此创建了一个模型。请任何人帮忙。

这是在 views / sample / register.php 文件

<?php
/* @var $this SampleController */
/* @var $model Sample */
/* @var $form CActiveForm */
?>

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
 'id'=>'sample-register-form',
'htmlOptions' => array(
    'enctype' => 'multipart/form-data',
),
'enableClientValidation'=>true,
'clientOptions'=>array(
    'validateOnSubmit'=>true,)
)); ?>

<p class="note">Fields with <span class="required">*</span> are required.</p>

<?php echo $form->errorSummary($model); ?>

<div class="row">
    <?php echo $form->labelEx($model,'username');
    echo $form->textField($model,'username');
    echo $form->error($model,'username'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'email');
    echo $form->textField($model,'email');
    echo $form->error($model,'email'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'password');
    echo $form->passwordField($model,'password');
    echo $form->error($model,'password'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'confirm password');
    echo $form->passwordField($model,'password');
    echo $form->error($model,'password'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'address');
    echo $form->textArea($model,'address',array('rows'=>6, 'cols'=>22));
    echo $form->error($model,'address'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'country');
    $opts = CHtml::listData(Country::model()->findAll(),'countryid','cname');
    echo $form->dropDownList($model,'country_id',$opts,
        array(
                'prompt'=>'Select Country',
                'ajax' => array(
                'type'=>'POST',
                'url'=>CController::createUrl('Sample/Substate'),
                'update'=>'#state_name',
                'data'=>array('country_id'=>'js:this.value'),
                 )));
    echo $form->error($model,'country_id'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'state_id');
    echo CHtml::dropDownList('state_name','', array('prompt'=>'Select Country First'),
        array(
            'ajax'=>array(
            'type'=>'POST',
            'url'=>CController::createUrl('Sample/Subcity'),
            'update'=>'#city_name',
            'data'=>array('state_id'=>'js:this.value' ))));
    echo $form->error($model,'state_id'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'city_id');
    echo CHtml::dropDownList('city_name','', array('prompt'=>'Select State First'));
    echo $form->error($model,'city_id'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'url');
    echo CHtml::activeFileField($model, 'url');   // by this we can upload image
    echo $form->error($model,'url'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'hobby');
    //echo $form->checkBoxList($model,'hobby',CHtml::listData(Hobbies::model()->findAll(),'hobby_id','hobby_name'));
    $data = Hobbies::model()->findAll();
    foreach($data as $button)
    {
        //echo $button->course_name;
        echo $form->checkBox($model,'hobby');
        echo $button->hobby_name .'<br>';
    }
    echo $form->error($model,'hobby'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'gender');
    echo $form->radioButtonList($model,'gender',array('Male'=>'Male','Female'=>'Female'),array('labelOptions'=>array('style'=>'display:inline'), // add this code
        'separator'=>' ',
) );
    echo $form->error($model,'gender'); ?>
</div>

<div class="row">
    <?php echo $form->labelEx($model,'dob');

    $form->widget('zii.widgets.jui.CJuiDatePicker', array(
   'model'=>$model,
   'attribute'=>'dob',
   'name'=>$model->dob,
   'value'=>$model->dob,
   'options'=>array('dateFormat'=>'yy-mm-dd',
                   'altFormat'=>'yy-mm-dd',
                   'changeMonth'=>'true',
                   'changeYear'=>'true',
                   'yearRange'=>'1600:3000',
                  // which shows for both textfield and button
                   //'showOn'=>'both',
                 //  'buttonText'=>'choose date'
                   ),
   'htmlOptions'=>array('size'=>'10')
 ));
    echo $form->error($model,'dob');
?>
</div>

<div class="row buttons">
    <?php echo CHtml::submitButton('Register'); ?>
</div>

<?php $this->endWidget(); ?>

这是在 controller / SampleController.php 文件

public function actionRegister()
{
    $model=new Sample;

        if(isset($_POST['Sample']))
        {
            $model->attributes=$_POST['Sample'];
            if($model->validate())
            {
                $model->hobby = implode(",",$model->hobby);
                    if($model->save())
                    {
                        $this->redirect(array('site/login'));
                    }
                return;
            }
        }
        $this->render('register',array('model'=>$model));
}

1 个答案:

答案 0 :(得分:0)

如果您查看foreach循环生成的html,您会看到所有复选框都具有相同的名称和ID。因此,只有其中一个将存在于$ _POST数组中,因为该名称用作键。

要解决此问题,请将name更改为数组:

echo $form->checkBox($model, 'hobby[]');

或者,您可以在评论代码中使用CActiveForm::checkBoxList并使用template设置样式:

  

template:string,指定每个复选框的呈现方式。默认为&#34; {input} {label}&#34;,其中&#34; {input}&#34;将被生成的复选框输入标记替换为&#34; {label}&#34;将被相应的复选框标签替换。

echo $form->checkBoxList(
    $model, 
    'hobby', 
    CHtml::listData(Hobbies::model()->findAll(), 'hobby_id', 'hobby_name'), 
    array('template' => '{input}{label}<br/>')
);