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

标签 php mysql yii

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

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

这位于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));
}

最佳答案

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

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

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

或者您可以使用CActiveForm::checkBoxList如您注释的代码中所示,并使用 template 对其进行样式设置:

template: string, specifies how each checkbox is rendered. Defaults to "{input} {label}", where "{input}" will be replaced by the generated check box input tag while "{label}" will be replaced by the corresponding check box label.

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

关于php - 尝试在 yii 数据库中存储多个复选框的 id 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37479920/

相关文章:

php - 在 magento 中单独的帐单/送货地址?

php - 无法使用 mysqli (PHP) 在表中插入行

MYSQL在同一张表上多次加入

php - 是否可以在另一个 SELECT 语句中使用 SELECT 语句的结果?

php - 通过多个条件查找表中的重复记录

php - 我们如何在 Android 和 iPhone 的移动应用程序中对用户进行身份验证?

php - 显示来自数据库的 pdf blob 文件

php - 在 Yii 中查询关系模型

javascript - 使用 ajax 更新 CGridView 不起作用

php - 将 php 字符串转换为标题大小写