2016-05-27 1 views
0

データベースから趣味の名前を表示する複数のチェックボックスがあり、動作しています。しかし、私はデータベースに趣味の名前の選択されたIDを格納する必要があります。しかし、私は任意の趣味の名前を選択するときに私のデータベーステーブルに0のみを格納します。複数のチェックボックスのIDをyiiでデータベースに保存しようとしたときにエラーが発生しました

私は1つの趣味テーブルを持っていました。それに1つのモデルも作成しました。誰でも助けてください。

これはビュー/サンプル/ 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(); ?> 

あなたが閲覧した場合これは、コントローラ/ 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)); 
} 
+0

あなたは結果を投稿破広告の更新前のvar_dump($モデル - >趣味)で確認してください。..(これは後に – scaisEdge

+0

を提出返されたものをチェックするために私はのvar_dumpを使用し、それがPHPの警告破を示し):無効な引数が渡されました –

+0

ちょうど質問...あなたのレジスタビューには私はフォームが表示されません?貯蓄の価値をどのように提出しますか? – scaisEdge

答えて

0

であるですあなたのforeachループによって生成されたHTMLは、すべてのチェックボックスが同じ名前とIDを持つことがわかります。その名前はキーとして使用されるため、$ _POST配列には1つだけが存在します。

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

また、あなたのコメントのコードのようにCActiveForm::checkBoxListを使用し、それをスタイルをtemplateを使用することができます:

template:文字列は、どのように指定する配列にこの変更nameを解決するために

各チェックボックスがレンダリングされます。デフォルトでは "{input} {label}"になります。 "{input}"は生成されたチェックボックス入力タグに置き換えられ、 "{label}"は対応するチェックボックスラベルに置き換えられます。

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

あなたが言ったようにコードを変更しました –

+0

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

+0

echo $ form-> hobby;私はこのコードを置くとき –

関連する問題